バケットポリシー

バケットポリシーは、Access Policy Language (APL)を使用してストレージへのアクセス可否を定義します。

バケットの所有者のみが、バケットポリシーを定義することができます。

以下のようなことが定義可能です。
  • バケットレベルのパーミッション定義 (Allow/Deny レベルの設定)
  • バケット内のすべてのオブジェクトへのアクセス拒否
  • 所有者がバケットの所有者と同じオブジェクトへのアクセス許可| (所有者が別ユーザのオブジェクトに対しては、所有者がACLを設定する必要がある)

バケットポリシーの内容はJSON形式で記述されます。

バケットポリシーの設定

バケットポリシーはPUT Bucket policyを用いて設定します。

以下は、2人のユーザ(1-22-333-4444, 3-55-678-9100)が バケット mybucket(grn:iijgio:dag:::mybucket/*)内のオブジェクトに対してGETリクエスト(dag:GetObject*)を実行できるようにする設定のサンプルです。

PUT /?policy HTTP/1.1
Host: mybucket.storage-dag.iijgio.com
Date: Tue, 04 Apr 2010 20:34:56 GMT
Authorization: IIJGIO VGhpcyBSAMPLEBieSB1bHZpbmc=

{
"Version":"2008-10-17",
"Id":"aaaa-bbbb-cccc-dddd",
"Statement" : [
    {
        "Effect":"Allow",
        "Sid":"1",
        "Principal" : {
            "IIJGIO":["1-22-3333-4444","3-55-678-9100"]
        },
        "Action":["dag:GetObject*"],
        "Resource":"grn:iijgio:dag:::mybucket/*"
    }
  ]
}

バケットポリシーの取得

指定のバケットへ設定されているバケットポリシーの取得にはGET Bucket policyを使用します。

以下は mybucket.storage-dag.iijgio.com のバケットに設定されているバケットポリシーを取得するサンプルです。
GET ?policy HTTP/1.1
Host: mybucket.storage-dag.iijgio.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: IIJGIO 02236Q3V0WHVSRSAMPLEEX5sCYVf1bNRuU=

Note

バケットの所有者は、デフォルトでGET Bucket policyを実行できる権限があります。

バケットポリシーの削除

バケットに関連するバケットポリシー設定の削除は、DELETE Bucket policyを使用します。

以下は “mybucket” に関連するバケットポリシーを削除するサンプルです。
DELETE ?policy HTTP/1.1
Host: mybucket.storage-dag.iijgio.com
Date: Tue, 04 Apr 2010 20:34:56 GMT
Authorization: IIJGIO VGhpcyBSAMPLEeSB1bHZpbmc=

Note

DELETE Bucket policyオペレーションを行うには、DeletePolicyのパーミッションを所持しており、かつ対象バケットの所有者である必要があります。

サンプル

制約が追加された複数のアカウントに対して、パーミッションを設定するサンプル
以下はpublic-readというCanned ACLが含まれている複数のアカウントに対してPutObject, PutObjectAclを許可するサンプルです。
{
    "Version": "2008-10-17",
    "Statement": [{
        "Sid": "AddCannedAcl",
        "Effect": "Allow",
        "Principal": {
            "IIJGIO": ["SAMPLE00000000000000", "SAMPLE00000000000001"]
        },
        "Action": ["dag:PutObject","dag:PutObjectAcl"],
        "Resource": ["grn:iijgio:dag:::bucket/*"],
        "Condition": {
            "StringEquals": {
                "dag:x-iijgio-acl": ["public-read"]
            }
        }
    }]
}
anonymousユーザにパーミッションを設定するサンプル
以下はanonymousユーザにパーミッションを許可するサンプルです。
{
    "Version": "2008-10-17",
    "Statement": [{
        "Sid": "AddPerm",
        "Effect": "Allow",
        "Principal": {
            "IIJGIO": "*"
        },
        "Action": ["dag:GetObject"],
        "Resource": ["grn:iijgio:dag:::bucket/*"]
    }]
}
指定のIPアドレスに対してアクセスを制限するサンプル
以下はIPアドレス指定に基づくパーミッション付与のサンプルです。指定可能なIPアドレスはFAQの「IPアドレスを元にアクセス制御を行うことができますか? 」を参照してください。
{
   "Id": "S3PolicyIdl",
   "Statement": [
       {
           "Action": "dag:*",
           "Condition": {
               "IpAddress": {
                   "iijgio:SourceIp": "10.13.0.0/24"
               },
               "NotIpAddress": {
                   "iijgio:SourceIp": "10.13.0.2/32"
               }
           },
           "Effect": "Allow",
           "Principal": {
               "IIJGIO": "*"
           },
           "Resource": "grn:iijgio:dag:::bucket/*",
           "Sid": "IPAllow"
       },
       {
           "Action": "dag:*",
           "Condition": {
               "IpAddress": {
                   "iijgio:SourceIp": "10.12.0.0/24"
               }
           },
           "Effect": "Deny",
           "Principal": {
               "IIJGIO": "*"
           },
           "Resource": "grn:iijgio:dag:::bucket/*",
           "Sid": "IPDeny"
       }
   ],
   "Version": "2008-10-17"
}
指定のHTTP Refererに対してアクセスを制限するサンプル
以下はHTTP Refererに基づくパーミッション付与のサンプルです。
{
    "Version": "2008-10-17",
    "Id": "http referer policy example",
    "Statement": [{
        "Sid": "Allow get requests referred by wwwmysitecom and mysite.com",
        "Effect": "Allow",
        "Principal": {
            "IIJGIO": "*"
        },
        "Action": "dag:GetObject",
        "Resource": "grn:iijgio:dag:::example-bucket/*",
        "Condition": {
            "StringLike": {
                "iijgio:Referer": [
                    "http://www.mysite.com/*",
                    "http://mysite.com/*"
                ]
            }
        }
    }]
}

Resources, Operaitons, Conditions について

バケットポリシー内にリソースを指定します。

Bucket Policy の中では、バケット, オブジェクトを参照させることができます。

リソースは、以下のようなリソース記述子(GRN)のフォーマットで記述します。
  • grn:iijgio:dag:::[resourcename]

リソース名には、アクセス対象のバケットの完全修飾名もしくはオブジェクト名を指定します。

対象がバケットの場合は、”BucketName” というように指定します。

対象がオブジェクトの場合は、”BucketName/ObjectKey” と指定します。
  • BucketNameはバケット名、ObjectKeyはオブジェクトのKey表しています。

  • 例) バケットが”mybucket”で、オブジェクトのKeyが”shared/developer/settings.conf”の場合は以下のようになります。
    • mybucket/shared/developer/settings.conf
オペレーション

以下がバケットポリシー内に設定するオペレーションの形式です。

バケットに関連するAction
  • dag:CreateBucket
  • dag:DeleteBucket
  • dag:ListBucket
  • dag:GetBucketAcl
  • dag:PutBucketAcl
  • dag:GetBucketLocation
  • dag:GetBucketPolicy
  • dag:PutBucketPolicy
  • dag:DeleteBucketPolicy
  • dag:ListBucketMultipartUploads
  • dag:GetBucketCORS
  • dag:PutBucketCORS
  • dag:GetBucketWebsite
  • dag:PutBucketWebsite
  • dag:DeleteBucketWebsite
オブジェクトに関連するAction
  • dag:GetObject
  • dag:PutObject
  • dag:DeleteObject
  • dag:GetObjectAcl
  • dag:PutObjectAcl
  • dag:ListMultipartUploadParts
  • dag:AbortMultipartUpload
バケットポリシー内に出てくるバケットのKey
下の表は、バケットポリシー設定内でバケットに関するKey。
表. バケットに関するバケットポリシー設定項目一覧
Action 適用可能なkey 説明
dag:CreateBucket dag:x-iijgio-acl
バケットに適用されているCanned ACL
Canned ACLとは、作成されたバケットに適用されている 予め定義された権限のことです。
【値】 private | public-read | public-read-write | bucket-owner-read | bucket-owner-full-control
【例】 public-read
  dag:LocationConstraint バケットが生成されたRegionを示します。
dag:ListBucket dag:prefix
レスポンスの対象を、指定された接頭辞で開始される名前のオブジェクトのみに制限します。
接頭辞指定でオブジェクトアクセス可否を設定したい場合に使用します。
【例】 home
  dag:delimiter
オブジェクトをグルーピングする際に使用している文字
【例】 /
  dag:max-keys
要求に対して返されるオブジェクトの最大数
デフォルト値は1000です。
Access Policy Languageの数値指定部で使用します。
【例】 100
dag:PutBucketAcl dag:x-iijgio-acl
バケットに適用されているCanned ACL。
【値】private | public-read | public-read-write | bucket-owner-read | bucket-owner-full-control
【例】 public-read
バケットポリシー内に出てくるオブジェクトのKey
下の表は、バケットポリシー設定内でオブジェクトに関するKey。
表. オブジェクトに関するバケットポリシー設定項目一覧
Action 適用可能なkey 説明
dag:PutObject dag:x-iijgio-acl
バケットに適用されている Canned ACL
Canned ACLとは、作成されたバケットに適用されている予め定義された権限のことです。
【値】 private | public-read | public-read-write | bucket-owner-read | bucket-owner-full-control
【例】 public-read
  dag:x-iijgio-copy-source
オブジェクトをコピー元オブジェクト
オブジェクトをコピーする際に使用します。
ヘッダーで指定されるコピー元のオブジェクトは、バケット名とkeyがスラッシュ(/)で区切られている必要があります。
【例】 /bucketname/keyname
  dag:x-iijgio-metadata-directive
オブジェクトのメタデータの指定方法
オブジェクトをコピーする際に使用します
ヘッダーには「コピー元のオブジェクトのメタデータをコピーする」か「ボディで指定したメタデータを設定する」かのどちらかの選択を指定します。
【値】 COPY | REPLACE (デフォルトは COPY)
【例】 REPLACE
dag:PutObjectAcl dag:x-iijgio-acl
オブジェクトに適用されている Canned ACL
Canned ACLとは、PUTされたオブジェクトに予め適用される権限のことです。
【値】private | public-read | public-write | bucket-owner-read | bucket-owner-full-control
【例】 public-read
APIとActionの対応
ActionはAPIと以下の様な関係があります。制御したいAPIに応じてActionを選択下さい。
表. バケットに関するActionとAPIの関係
Action 対応するAPI
dag:CreateBucket Put Bucket
dag:DeleteBucket Delete Bucket
dag:ListBucket Get Bucket
dag:PutBucketAcl Put Bucket Acl
dag:GetBucketAcl Get Bucket Acl
dag:GetBucketPolicy Get Bucket Policy
dag:PutBucketPolicy Put Bucket Policy
dag:DeleteBucketPolicy Delete Bucket Policy
dag:ListBucketMultipartUploads List Multipart Uploads
dag:GetBucketCORS Get Bucket cors
dag:PutBucketCORS Put Bucket cors
dag:PutBucketCORS Delete Bucket cors
dag:GetBucketLocation Get Bucket location
dag:PutBucketWebsite Put Bucket website
dag:GetBucketWebsite Get Bucket website
dag:DeleteBucketWebsite Delete Bucket website
表. オブジェクトに関するActionとAPIの関係
Action 対応するAPI
dag:GetObject Get Object
dag:PutObject Put Object
dag:PutObject Post Object
dag:PutObject Initiate Multipart Upload
dag:PutObject Upload Part
dag:PutObject Complete Multipart Upload
dag:AbortMultipartUpload Abort Multipart Upload
dag:DeleteObject Delete Object
dag:DeleteObject Delete Multiple Objects
dag:GetObjectAcl Get Object Acl
dag:PutObjectAcl Put Object Acl
dag:ListMultipartUploadParts List Parts

ワイルドカードの指定について

Action、Principal、Resourceにはワイルドカード(アスタリスク)を指定することが可能です。

表. ワイルドカードの指定方法
要素 設定方法 詳細
Action 中間一致での指定ができます
設定のサンプルを示します。
例1 “Action”: “dag:Get*”
Getから始まるすべてのActionを指定しています。

例2 “Action”: “dag:*Object*”
Objectを含むActionを指定しています。
Principal *を、全ユーザの意味で利用できます。
設定のサンプルを示します。
例1 “Principal”: “*”
全ユーザ(認証済み、匿名)を指定しています。

このような設定は無効です。
例2 “Principal”: “AAA*”
Resource *をオブジェクトのワイルドカードとして設定できます。バケットにはワイルドカードは指定できません。
設定のサンプルを示します。
例1 “Resource”: “grn:iijgio:dag:::バケット名/*”
バケット内の全オブジェクトを指定しています。

例2 “Resource”: “grn:iijgio:dag:::バケット名/*/aaa/*”
パスにaaaを含むオブジェクトを指定しています。

このような設定は無効です。
例3 “Resource”: “grn:iijgio:dag:::バケット名*/”

Warning

ワイルドカードを適用する際は慎重な判断をお願いします。

以下のサンプルではAction、Principalともにワイルドカードを指定しています。EffectはAllow(許可)です。
つまり、この バケットの全操作を全ユーザに許可している ことを意味しており、リスクが高い状態です。
このような設定は推奨しません。Conditionの設定やPrincipalの設定を行い、アクセス可能な範囲を限定してください。
{
     "Version": "2008-10-17",
     "Id": "policy-allow-all",
     "Statement": {
         "Sid": "allow-all",
         "Effect": "Allow",
         "Principal": {
             "IIJGIO": "*"
         },
         "Resource" , "grn:iijgio:dag:::bucket",
         "Action": "dag:*"
     }
 }
なお、ここでのサンプルは誤用防止の為に意図的にJSONとして不正な構造にしています。

ページ先頭へ