バケット ACL が AWS アカウント の外部へのアクセスを許可する場合は、ACL を無効にする前にバケット ACL アクセス権限をバケットポリシーに移行し、バケット ACL をデフォルトのプライベート ACL にリセットする必要があります。これらのバケット ACL を移行しない場合、ACL を無効にするために [バケット所有者の強制] 設定を適用する要求は失敗し、InvalidBucketAclWithObjectOwnership エラーコードが返されます。また、オブジェクト ACL アクセス権限を確認し、バケットポリシーに移行することをお勧めします。推奨されるその他の前提条件の詳細については、ACL を無効にする前提条件 を参照してください。
IAM ポリシーでは、既存のバケットとオブジェクト ACL にはそれぞれ同等のものが含まれます。次のバケットポリシー例は、バケットおよびオブジェクト ACL の READ
と WRITE
の許可は IAM 許可にマッピングされます。各 ACL が IAM アクセス許可に変換される方法の詳細については、ACL アクセス許可とアクセスポリシーのアクセス許可のマッピング を参照してください。
バケットポリシーへの ACL アクセス権限を確認し、移行するには、以下のトピックを参照してください。
バケットポリシーの例
これらのバケットポリシーの例は、READ
と WRITE
バケット、サードパーティー AWS アカウントの ACL アクセス権限をバケットポリシーに移行およびバケット化およびオブジェクト化する方法を示しています。READ_ACP
と WRITE_ACP
ACL は、ACL 関連のアクセス許可 (s3:GetBucketAcl
、s3:GetObjectAcl
、s3:PutBucketAcl
、s3:PutObjectAcl
) を付与するため、ポリシーとの関連性は低くなります。
例 — バケットの READ
ACL
バケットの内容の一覧表示を AWS アカウント
に許可する 111122223333
READ
ACL がバケットにある場合、バケットに対して s3:ListBucket
、s3:ListBucketVersions
、s3:ListBucketMultipartUploads
の各アクセス許可を付与するバケットポリシーを記述できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to list the objects in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:root" ] }, "Action": [ "s3:ListBucket", "s3:ListBucketVersions", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::" } ] }
amzn-s3-demo-bucket
例 — バケット内の各オブジェクトの READ
ACL
AWS アカウント
にアクセスを許可する 111122223333
READ
ACL がバケット内の各オブジェクトにある場合、バケット内の各オブジェクトに対する s3:GetObject
アクセス許可と s3:GetObjectVersion
アクセス許可をこのアカウントに付与するバケットポリシーを記述できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Read permission for every object in a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:root" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::/*" } ] }
amzn-s3-demo-bucket
この例のリソースエレメントは、特定のオブジェクトへのアクセスを許可します。
"Resource": "arn:aws:s3:::
/
amzn-s3-demo-bucket
OBJECT-KEY
"
例 — バケットにオブジェクトを書き込むアクセス許可を付与する WRITE
ACL
バケットへのオブジェクトの書き込み許可を AWS アカウント
に付与する 111122223333
WRITE
ACL がバケットにある場合は、バケットに s3:PutObject
許可を付与するバケットポリシーを記述できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to write objects to a bucket", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:root" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::/*" } ] }
amzn-s3-demo-bucket
S3 コンソールを使用した、ACL アクセス権限の確認と移行
バケットの ACL アクセス権限を確認する方法
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[バケット] リストで、バケット名を選択します。
-
[アクセス許可] タブを選択します。
-
アクセスコントロールリスト (ACL) で、バケット ACL アクセス権限を確認します。
オブジェクトの ACL アクセス権限を確認する方法
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[Buckets] (バケット) リストで、オブジェクトが含まれるバケットの名前を選択します。
-
[オブジェクト] リストで、オブジェクト名を選択します。
-
[アクセス許可] タブを選択します。
-
アクセスコントロールリスト (ACL) で、オブジェクト ACL アクセス権限を確認します。
ACL アクセス権限を移行してバケット ACL を更新します
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[バケット] リストで、バケット名を選択します。
-
アクセス許可タブの バケットポリシーで 編集をクリックします。
-
ポリシーボックスで、バケットポリシーを追加または更新します。
バケットポリシーの例ついては、バケットポリシーの例」 と「チュートリアル例 を参照してください。
-
[Save changes] (変更の保存) をクリックします。
-
バケット ACL を更新して、他のグループ、または AWS アカウント への ACL アクセス権限を削除します。
-
オブジェクト所有権にバケット所有者の強制設定を適用します。
AWS CLI を使用して、ACL アクセス権限を確認して移行します。
-
バケットのバケット ACL を返すには、get-bucket-acl
AWS CLI コマンドを使用します。 aws s3api get-bucket-acl --bucket
amzn-s3-demo-bucket
例えば、このバケット ACL は
WRITE
とREAD
にサードパーティーのアカウントへのアクセスを付与します。この ACL では、サードパーティーアカウントは正規ユーザー ID で識別します。[バケット所有者の強制] 設定を適用して ACL を無効にするには、サードパーティアカウントのこれらの許可をバケットポリシーに移行する必要があります。{ "Owner": { "DisplayName": "
DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT
", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "THIRD-PARTY-EXAMPLE-ACCOUNT
", "ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "WRITE" } ] }その他の ACL の例については、チュートリアル例 を参照してください。
-
バケット ACL アクセス権限をバケットポリシーに移行します。
この例のバケットポリシーは、サードパーティアカウントの
s3:PutObject
とs3:ListBucket
アクセス許可を付与します。バケットポリシーでは、サードパーティーアカウントは AWS アカウント ID (
)で識別されます。111122223333
aws s3api put-bucket-policy --bucket
--policyamzn-s3-demo-bucket
file://policy.json
policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PolicyForCrossAccountAllowUpload", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333
:root" ] }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" } ] }amzn-s3-demo-bucket
バケットポリシーの例については、バケットポリシーの例 と チュートリアル例 を参照してください。
-
特定のオブジェクトの ACL を返すには、get-object-acl
AWS CLI コマンドを使用します。 aws s3api get-object-acl --bucket
amzn-s3-demo-bucket
--keyEXAMPLE-OBJECT-KEY
-
必要に応じて、オブジェクト ACL アクセス権限をバケットポリシーに移行します。
このリソースエレメントの例では、バケットポリシーの特定のオブジェクトへのアクセスを付与します。
"Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/EXAMPLE-OBJECT-KEY
" -
バケットの ACL をデフォルトの ACL にリセットします。
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
オブジェクト所有者に[バケット所有者の強制] 設定を適用します。
チュートリアル例
以下の例では、特定のユースケースでの ACL アクセス権限をバケットポリシーに移行する方法を示します。
トピック
サーバーアクセスのログ記録用の S3 ログ配信グループへのアクセスを付与する
バケット所有者の強制設定を適用してサーバーアクセスログ送信先バケット (別名 ターゲットバケット) の ACL を無効にするには、バケットの S3 ログ配信グループへの ACL アクセス許可をバケットポリシーのログ記録サービスプリンシパル (logging.s3.amazonaws.com
) に移行する必要があります。ログ配信許可の詳細については、ログ配信許可 を参照してください。
このバケット ACL は、S3 ログ配信グループへの WRITE
と READ_ACP
アクセスを許可します。
{ "Owner": { "DisplayName": "
DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "WRITE" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery" }, "Permission": "READ_ACP" } ] }
S3 ログ配信グループのバケット ACL アクセス権限を、バケットポリシーのロギングサービスプリンシパルに移行します。
-
次のバケットポリシーをバケットに追加して、例の値を置き換えます。
aws s3api put-bucket-policy --bucket
amzn-s3-demo-bucket
--policyfile://policy.json
policy.json: { { "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::
/amzn-s3-demo-bucket
EXAMPLE-LOGGING-PREFIX
*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME
" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID
" } } } ] } -
バケットの ACL をデフォルトの ACL にリセットします。
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
オブジェクト所有権のバケット所有者の強制 を送信先バケットに適用します。
バケット内のオブジェクトへのパブリック読み取りアクセスを付与します
オブジェクト ACL がバケット内のすべてのオブジェクトへのパブリック読み取りアクセスを許可する場合、これらの ACL アクセス権限をバケットポリシーに移行できます。
このオブジェクト ACL は、バケット内のオブジェクトへのパブリック読み取りアクセスを許可します。
{ "Owner": { "DisplayName": "
DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] }
パブリック読み取り ACL アクセス権限をバケットポリシーに移行します。
-
バケット内のすべてのオブジェクトへのパブリック読み取りアクセスを許可するには、例の値を置き換えて、次のバケットポリシーを追加します。
aws s3api put-bucket-policy --bucket
amzn-s3-demo-bucket
--policy file://policy.json
policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }バケットポリシー内の特定のオブジェクトへのパブリックアクセスを許可するには、
Resource
エレメントに次の形式を使用します。"Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/OBJECT-KEY
"特定のプレフィックスを持つすべてのオブジェクトへのパブリックアクセスを許可するには、
Resource
エレメントに次の形式を使用します。"Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/PREFIX/
*" -
オブジェクト所有者に[バケット所有者の強制] 設定を適用します。
S3 バケットへのアクセス権を Amazon ElastiCache (Redis OSS) に付与する
S3 バケットに ElastiCache (Redis OSS) のバックアップをエクスポートできます。これにより、ElastiCache の外部からバックアップにアクセスできます。バックアップを S3 バケットにエクスポートするには、スナップショットをバケットにコピーするための ElastiCache 許可を付与する必要があります。バケット ACL で ElastiCache にアクセス許可を付与した場合は、[バケット所有者の強制] 設定を適用して ACL を無効にする前に、これらの許可をバケットポリシーに移行する必要があります。詳細については、Amazon ElastiCache ユーザーガイド の Amazon S3 バケットへの ElastiCache アクセスの許可 を参照してください。
次の例は、ElastiCache に許可を付与するバケット ACL アクセス許可を示しています。
{ "Owner": { "DisplayName": "
DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
" }, "Grants": [ { "Grantee": { "DisplayName": "DOC-EXAMPLE-ACCOUNT-OWNER
", "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID
", "Type": "CanonicalUser" }, "Permission": "FULL_CONTROL" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "aws-scs-s3-readonly", "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353", "Type": "CanonicalUser" }, "Permission": "READ_ACP" } ] }
ElastiCache (Redis OSS) のバケット ACL アクセス許可をバケットポリシーに移行するには
-
次のバケットポリシーをバケットに追加し、例の値を置き換えます。
aws s3api put-bucket-policy --bucket
amzn-s3-demo-bucket
--policy file://policy.json
policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt15399483", "Effect": "Allow", "Principal": { "Service": "Region
.elasticache-snapshot.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:GetBucketAcl", "s3:ListMultipartUploadParts", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] } -
バケットの ACL をデフォルトの ACL にリセットします。
aws s3api put-bucket-acl --bucket
amzn-s3-demo-bucket
--acl private -
オブジェクト所有者に[バケット所有者の強制] 設定を適用します。