バケットポリシー¶
バケットポリシーは、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 |
|
dag:LocationConstraint | バケットが生成されたRegionを示します。 | |
dag:ListBucket | dag:prefix |
|
dag:delimiter |
|
|
dag:max-keys |
|
|
dag:PutBucketAcl | dag:x-iijgio-acl |
|
- バケットポリシー内に出てくるオブジェクトのKey
- 下の表は、バケットポリシー設定内でオブジェクトに関するKey。
Action | 適用可能なkey | 説明 |
---|---|---|
dag:PutObject | dag:x-iijgio-acl |
|
dag:x-iijgio-copy-source |
|
|
dag:x-iijgio-metadata-directive |
|
|
dag:PutObjectAcl | dag:x-iijgio-acl |
|
- APIとActionの対応
- ActionはAPIと以下の様な関係があります。制御したいAPIに応じてActionを選択下さい。
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 |
---|---|
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 | 中間一致での指定ができます |
|
Principal | *を、全ユーザの意味で利用できます。 |
|
Resource | *をオブジェクトのワイルドカードとして設定できます。バケットにはワイルドカードは指定できません。 |
|
Warning
{
"Version": "2008-10-17",
"Id": "policy-allow-all",
"Statement": {
"Sid": "allow-all",
"Effect": "Allow",
"Principal": {
"IIJGIO": "*"
},
"Resource" , "grn:iijgio:dag:::bucket",
"Action": "dag:*"
}
}