ポリシーの指定項目

対象リージョン:東日本第3/西日本第3

ポリシーに指定可能な項目について説明します。

ポリシーは以下のようなJSON形式で記載します。

{
    "Statement": [
        {
            "Sid": "AllowListBucketOfASpecificUserPrefix",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "urn:sgws:s3:::department-bucket",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "${sgws:username}/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            ...
        }
    ]
}

ポリシーに指定可能な項目を以下に示します。

項目 説明 バケットポリシー グループポリシー

Statement

本項目の中にポリシー(Sid~Conditionの組合せ)を記載します。

Sid

ユーザーが識別のために付ける任意の文字列を記述します。

Effect

ポリシーの方向性を指定します。そのポリシーが許可(Allow)を表すか禁止(Deny)を表すかを指定します。

Principal/NotPrincipal

ポリシーの対象者(テナント、グループ、ユーザー)を指定します。

×

Action/NotAction

ポリシーの対象となる操作(バケット/オブジェクトに対する操作権限)を指定します。

Resource/NotResource

ポリシーの対象になるリソース(バケット/オブジェクト)を指定します。

Condition

条件式を使用して、ポリシーを適用する条件を指定できます。

◯:必須、△:任意、×:指定不可

Statement(バケットポリシー:必須/グループポリシー:必須

本項目の中にポリシー(Sid~Conditionの組合せ)を記載します。

指定形式
"Statement": { "<ポリシー(Sid~Conditionの組合せ)>" }
設定例
"Statement": [
    {
        <ポリシー(Sid~Conditionの組合せ)>
    },
    {
        <ポリシー(Sid~Conditionの組合せ)>
    }
]
ヒント: 1つのStatementの中に、複数のポリシー(Sid~Conditionの組合せ)を記載できます。

Sid(バケットポリシー:省略可/グループポリシー:省略可)

ユーザーが識別のために付ける任意の文字列を記述します。

指定形式
"Sid": "<任意の文字列>"
設定例
"Sid": "AllowEveryoneReadOnlyAccess"

Effect(バケットポリシー:必須/グループポリシー:必須

ポリシーの方向性を指定します。そのポリシーが許可(Allow)を表すか禁止(Deny)を表すかを指定します。

指定形式
  • 許可を表すポリシー

    "Effect": "Allow"
  • 禁止を表すポリシー

    "Effect": "Deny"
ヒント:

Principal/NotPrincipal(バケットポリシー:必須/グループポリシー:指定不可)

ポリシーの対象者(テナント、グループ、ユーザー)を指定します。

ヒント:
  • 「root」ユーザーのリソースへのアクセスはデフォルトで許可されます。
  • グループポリシーの場合、暗黙的に自身のグループがポリシーの対象になります。このため、グループポリシーに本項目の指定は不要です。
  • バケットポリシーの作成時に、作成予定のグループやユーザーを指定できます。
指定形式

「Principal」は包含、「NotPrincipal」は除外を意味します。指定した対象者にポリシーを適用する場合は「Principal」、指定した対象者以外にポリシーを適用する場合は「NotPrincipal」を使用してください。

  • テナント識別子を使用する場合

    "Principal": { "SGWS": "<テナント識別子>"}
    "NotPrincipal": { "SGWS": "<テナント識別子>"}
  • URNを使用する場合

    "Principal": { "SGWS": "<URN>" }
    "NotPrincipal": { "SGWS": "<URN>" }

    <URN>には以下の構文を使用します。

    urn:sgws:identity::<テナント識別子>:root
    urn:sgws:identity::account_id:user/<ユーザー名>
    urn:sgws:identity::account_id:group/<グループ名>
設定例
  • 匿名ユーザーを含むすべてのユーザーを指定する場合

    "Principal": "*"
    ヒント: すべてのユーザーに権限を付与する場合だけ、ワイルドカード(*)を使用できます。
  • 特定のテナント(テナント識別子:27233906934684427525)を指定する場合

    "Principal": { "SGWS": "27233906934684427525" }
    ヒント: テナントに所属しているすべてのユーザーが対象になります。
  • 特定のテナント(テナント識別子:27233906934684427525)の「root」ユーザーだけを指定する場合

    "Principal": { "SGWS": "urn:sgws:identity::27233906934684427525:root" }
  • 特定のテナント(テナント識別子:27233906934684427525)のユーザー(User-A)だけを指定する場合

    "Principal": { "SGWS": "urn:sgws:identity::27233906934684427525:user/User-A" }
  • 特定のテナント(テナント識別子:27233906934684427525)のユーザー(User-A)以外を指定する場合

    "NotPrincipal": { "SGWS": "urn:sgws:identity::27233906934684427525:user/User-A" }
  • 特定のテナント(テナント識別子:27233906934684427525)のグループ(Managers)だけを指定する場合

    "Principal": { "SGWS": "urn:sgws:identity::27233906934684427525:group/Managers" }
  • ユーザー名の代わりにUUIDを指定する場合

    urn:sgws:identity::27233906934684427525:user-uuid/de305d54-75b4-431badb2-eb6b9e546013
    注: ユーザー名を使用した権限の付与には、意図せず同名のユーザーへ権限を付与してしまう危険性があります。これを回避するためには、UUIDを使用した権限の付与を推奨します。

Action/NotAction(バケットポリシー:必須/グループポリシー:必須

ポリシーの対象となる操作(バケット/オブジェクトに対する操作権限)を指定します。

操作権限を明示的に割り当てなければ、バケット/オブジェクトに対する操作は実行できません。

また、明示的にバケット/オブジェクトに対する操作を禁止することで、ほかのポリシーで許可された操作を禁止できます。

指定形式

「Action」は包含、「NotAction」は除外を意味します。指定した操作にポリシーを適用する場合は「Action」、指定した操作以外にポリシーを適用する場合は「NotAction」を使用してください。

"Action": "<操作権限>"
"NotAction": "<操作権限>"

<操作権限>に指定できる操作権限については「操作権限」を参照してください。

設定例
"Action": "s3:*"
ヒント: ワイルドカード(*)を使用してすべての操作権限や特定の操作権限を指定できます。
表 1. 操作権限
種別 権限 S3 REST APIの処理
バケットに適用できる権限 s3:CreateBucket PUT Bucket
s3:DeleteBucket DELETE Bucket
s3:DeleteBucketPolicy DELETE Bucket policy
s3:GetBucketAcl GET Bucket ACL
s3:GetBucketCORS GET Bucket cors
s3:GetBucketPolicy GET Bucket policy
s3:GetBucketVersioning GET Bucket versioning
s3:ListAllMyBuckets

GET Service

s3:ListBucket

GET Bucket (List Objects)

HEAD Bucket

s3:ListBucketMultipartUploads List Multipart Uploads
s3:ListBucketVersions GET Bucket versions
s3:PutBucketCORS

DELETE Bucket cors

PUT Bucket cors

s3:PutBucketPolicy PUT Bucket policy
s3:PutBucketVersioning PUT Bucket versioning
オブジェクトに適用できる権限 s3:AbortMultipartUpload Abort Multipart Upload
s3:DeleteObject

DELETE Object

DELETE Multiple Objects

s3:DeleteObjectTagging DELETE Object Tagging
s3:DeleteObjectVersionTagging DELETE Object Tagging(オブジェクトの特定のバージョン)
s3:DeleteObjectVersion DELETE Object(オブジェクトの特定のバージョン)
s3:GetObject

GET Object

HEAD Object

s3:GetObjectAcl GET Object ACL
s3:GetObjectTagging GET Object Tagging
s3:GetObjectVersionTagging GET Object Tagging(オブジェクトの特定のバージョン)
s3:GetObjectVersion GET Object(オブジェクトの特定のバージョン)
s3:ListMultipartUploadParts List Parts
s3:PutObject

PUT Object

PUT Object - Copy

Initiate Multipart Upload

Complete Multipart Upload

Upload Part

Upload Part - Copy

s3:PutObjectTagging PUT Object Tagging
s3:PutObjectVersionTagging PUT Object Tagging(オブジェクトの特定のバージョン)

Resource/NotResource(バケットポリシー:必須/グループポリシー:必須

ポリシーの対象になるリソース(バケット/オブジェクト)を指定します。

グループポリシーの作成時に、作成予定のバケットを指定できます。

指定形式

「Resource」は包含、「NotResource」は除外を意味します。指定したリソースにポリシーを適用する場合は「Resource」、指定したリソース以外にポリシーを適用する場合は「NotResource」を使用してください。

指定形式はURNを使用した以下の形式です。

"Resource": "<URN>"
"NotResource": "<URN>"

<URN>の指定には以下の構文を使用します。

urn:sgws:s3:::<バケット名>
urn:sgws:s3:::<バケット名>/<オブジェクト名>
注:

<オブジェクト名>に指定できる文字は、JSON UTF-8形式またはJSON \uエスケープシーケンスを使用してエンコードする必要があります。パーセントエンコーディングはサポートされていません。

PUT Bucket policy処理のHTTP要求の本文は、charset=UTF-8でエンコードする必要があります。

設定例
  • バケット名にmybukcetを指定する場合

    "Resource": "urn:sgws:s3:::mybucket/*"
    ヒント: ワイルドカード(*, ?)を使用してすべてのリソースや特定のリソースを指定できます。アスタリスク(*)は0文字以上の文字を表し、疑問符(?)は任意の1文字を表します。
  • オブジェクト名の一部にポリシー変数を使用する場合

    "Resource": "urn:sgws:s3:::mybucket/home/${sgws:username}/*"
    ヒント: 条件式にはポリシー変数を指定できます。ポリシー変数の詳細については「ポリシー変数」を参照してください。

Condition(バケットポリシー:省略可/グループポリシー:省略可)

条件式を使用して、ポリシーを適用する条件を指定できます。

指定形式

条件キーと値のペアを条件演算子で評価します。

"Condition": { "<条件演算子>": { "<条件キー>": "<値>" } }

<条件演算子>に指定できる条件演算子は「条件演算子」を、<条件キー>に指定できるキーは「条件キー」を参照してください。

設定例
  • 複数の条件式を使用する場合

    "Condition": {
        "StringLike": {
            "s3:prefix": "admin-user/*"
            "s3:delimiter": "admin"
        },
        "StringNotEquals": {
            "s3:max-keys": "1000"
        }
    }
    ヒント: 1つのConditionの中に複数の条件式を記載できます。また、各条件式に条件キーと値のペアを複数個指定できます。
  • 条件式にポリシー変数を使用する場合

    "Condition": {
        "StringLike": {
            "s3:prefix": "${sgws:username}/*"
        }
    }
    ヒント: 条件式にはポリシー変数を指定できます。ポリシー変数の詳細については「ポリシー変数」を参照してください。
表 2. 条件演算子
分類 条件演算子 説明

String

(条件キーを文字列値と比較)

StringEquals 完全に一致する(大文字と小文字の区別あり)
StringNotEquals 完全に一致しない(大文字と小文字の区別あり)
StringEqualsIgnoreCase 完全に一致する(大文字と小文字の区別なし)
StringNotEqualsIgnoreCase 完全に一致しない(大文字と小文字の区別なし)
StringLike

指定された文字列が含まれている(大文字と小文字の区別あり)

ヒント: ワイルドカード文字(*, ?)を使用できます。
StringNotLike

指定された文字列が含まれていない(大文字と小文字の区別あり)

ヒント: ワイルドカード文字(*, ?)を使用できます。

Numeric

(条件キーを数値と比較)

NumericEquals 完全に一致する
NumericNotEquals 完全に一致しない
NumericGreaterThan 指定された値を超過する
NumericGreaterThanEquals 指定された値以上である
NumericLessThan 指定された値未満である
NumericLessThanEquals 指定された値以下である

Null Check

(条件キーの有無を確認)

Null 条件キーがあるかどうかを確認する

表 3. 条件キー
カテゴリ 適用される条件キー 説明
リソース/アイデンティティ sgws:username APIリクエストを実行したユーザー名と比較します。バケットまたはオブジェクトの処理に使用できます。

S3:ListBucketおよびS3:ListBucketVersions権

s3:delimiter APIリクエスト※のdelimiterパラメーターと比較します。
s3:max-keys APIリクエスト※のmax-keysパラメーターと比較します。
s3:prefix APIリクエスト※のprefixパラメーターと比較します。

※「バケット内のオブジェクト一覧表示」または「バケットのバージョニング状態」のAPIで使用できます。