ACL を無効にする前提条件。 - Amazon Simple Storage Service

ACL を無効にする前提条件。

バケット ACL が AWS アカウント の外部へのアクセスを許可する場合は、ACL を無効にする前にバケット ACL アクセス権限をバケットポリシーに移行し、バケット ACL をデフォルトのプライベート ACL にリセットする必要があります。これらのバケット ACL を移行しない場合、ACL を無効にするためにバケット所有者強制設定を適用する要求は失敗し、InvalidBucketAclWithObjectOwnership エラーコードが返されます。また、オブジェクト ACL アクセス権限を確認し、バケットポリシーに移行することをお勧めします。推奨されるその他の前提条件の詳細については、ACL を無効にする前提条件 を参照してください。

IAM ポリシーでは、既存のバケットとオブジェクト ACL にはそれぞれ同等のものが含まれます。次のバケットポリシー例は、バケットおよびオブジェクト ACL の READWRITE の許可は IAM 許可にマッピングされます。各 ACL が IAM アクセス許可に変換される方法の詳細については、ACL アクセス許可とアクセスポリシーのアクセス許可のマッピング を参照してください。

バケットポリシーへの ACL アクセス権限を確認し、移行するには、以下のトピックを参照してください。

バケットポリシーの例

これらのバケットポリシーの例は、READWRITE バケット、サードパーティ AWS アカウントの ACL アクセス権限をバケットポリシーに移行およびバケット化およびオブジェクト化する方法を示しています。READ_ACPWRITE_ACP ACLは、ACL関連のアクセス許可 (s3:GetBucketAcls3:GetObjectAcls3:PutBucketAcls3:PutObjectAcl) を付与するため、ポリシーとの関連性は低くなります。

例 — バケットの読み取り ACL

バケットに、バケットの内容を一覧表示する AWS アカウント 111122223333 許可を与える読み取り ACL がある場合、パケットの s3:ListBuckets3:ListBucketVersionss3: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:::DOC-EXAMPLE-BUCKET" } ] }

例 — バケット内のオブジェクトごとの読み取り ACL

バケット内のすべてのオブジェクトに AWS アカウント 111122223333 へのアクセスを許可する読み取りACLがある場合、バケット内のすべてのオブジェクトに対してこのアカウントに s3:GetObjects3: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:::DOC-EXAMPLE-BUCKET/*" } ] }

この例のリソースエレメントは、特定のオブジェクトへのアクセスを許可します。

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"

例 — バケットにオブジェクトを書き込む許可を付与する ACL を記述します。

バケットにオブジェクトを書き込むための AWS アカウント 1 1 1 1 2 2 2 2 3 3 3 3 許可を付与する書き込み 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:::DOC-EXAMPLE-BUCKET/*" } ] }

S3 コンソールを使用した、ACL アクセス権限の確認と移行

ACL アクセス権限を確認します

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. バケット リストでバケット ACL アクセス権限を表示するには、バケット名を選択します。

  3. [Permissions] (許可) を選択します。

  4. アクセスコントロールリスト (ACL) で、バケット ACL アクセス権限を確認します。

  5. [オブジェクト] タブを選択します。

  6. [オブジェクト] リストで、オブジェクト名を選択します。

  7. [Permissions] (許可) を選択します。

  8. アクセスコントロールリスト (ACL) で、オブジェクト ACL アクセス権限を確認します。

ACL アクセス権限を移行してバケット ACL を更新します

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケット] リストで、バケット名を選択します。

  3. [Permissions] (アクセス許可) タブの [Bucket policy] (バケットポリシー) で [Edit] (編集) をクリックします。

  4. ポリシーボックスで、バケットポリシーを追加または更新します。

    バケットポリシーの例ついては、バケットポリシーの例」 と「チュートリアル例 を参照してください。

  5. [Save changes] (変更の保存) をクリックします。

  6. バケット ACL を更新して、他のグループ、または AWS アカウント への ACL アクセス権限を削除します。

  7. オブジェクトの所有者にバケット所有者 強制設定を適用します。

AWS CLI を使用して、ACL アクセス権限を確認して移行します。

  1. バケットのバケット ACL を返すには、get−bucket−acl AWS CLI コマンドを使用します。:

    aws s3api get-bucket-acl --bucket DOC-EXAMPLE-BUCKET

    例えば、このバケット ACL は WRITEREAD にサードパーティーのアカウントへのアクセスを付与します。この 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 の例については、チュートリアル例 を参照してください。

  2. バケット ACL アクセス権限をバケットポリシーに移行します。

    この例のバケットポリシーは、サードパーティアカウントの s3:PutObjects3:ListBucket アクセス許可を付与します。バケットポリシーでは、サードパーティアカウントは AWS アカウント ID (111122223333)で識別されます。

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy 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:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

    バケットポリシーの例については、バケットポリシーの例チュートリアル例 を参照してください。

  3. 特定のオブジェクトの ACL を返すには、get−object−acl AWS CLI コマンドを使用します。

    aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key EXAMPLE-OBJECT-KEY
  4. 必要に応じて、オブジェクト ACL アクセス権限をバケットポリシーに移行します。

    このリソースエレメントの例では、バケットポリシーの特定のオブジェクトへのアクセスを付与します。

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/EXAMPLE-OBJECT-KEY"
  5. バケットの ACL をデフォルトの ACL にリセットします。

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  6. オブジェクト所有権のバケット所有者強制設定を適用します

チュートリアル例

以下の例では、特定のユースケースでの ACL アクセス権限をバケットポリシーに移行する方法を示します。

サーバーアクセスログ用の S3 ログ配信グループへのアクセスを許可します。

バケット所有者強制設定を適用して、サーバーアクセスログターゲットバケットの ACL を無効にするには、S3 ログ配信グループのバケット ACL アクセス権限をログサービスプリンシパル (logging.s3.amazonaws.com) をバケットポリシーで指定します。ログ配信許可の詳細については、ログ配信許可 を参照してください。

このバケット ACL は、S3 ログ配信グループへの WRITEREAD_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 アクセス権限を、バケットポリシーのロギングサービスプリンシパルに移行します。

  1. 次のバケットポリシーをターゲットバケットに追加し、例の値を置き換えます。

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://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:::DOC-EXAMPLE-BUCKET/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME" }, "StringEquals": { "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID" } } } ] }
  2. ターゲットバケットの ACL をデフォルトの ACL にリセットします。

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. オブジェクト所有権のバケット所有者強制設定をターゲットバケットに適用します

バケット内のオブジェクトへのパブリック読み取りアクセスを付与します

オブジェクト 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 アクセス権限をバケットポリシーに移行します。

  1. バケット内のすべてのオブジェクトへのパブリック読み取りアクセスを許可するには、例の値を置き換えて、次のバケットポリシーを追加します。

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }

    バケットポリシー内の特定のオブジェクトへのパブリックアクセスを許可するには、Resource エレメントに次の形式を使用します。

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"

    特定のプレフィックスを持つすべてのオブジェクトへのパブリックアクセスを許可するには、Resource エレメントに次の形式を使用します。

    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/PREFIX/*"
  2. オブジェクト所有権のバケット所有者強制設定をターゲットバケットに適用します

S3 バケットに Amazon ElastiCache for Redis アクセスを付与する

ElastiCache for Redis バックアップを S3 バケットにエクスポートできます。これにより、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 forRedis のバケット ACL アクセス権限をバケットポリシーに移行します。

  1. 次のバケットポリシーをバケットに追加し、例の値を置き換えます。

    aws s3api put-bucket-policy --bucket DOC-EXAMPLE-BUCKET --policy file://policy.json policy.json: "Id": "Policy15397346", "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:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
  2. バケットの ACL をデフォルトの ACL にリセットします。

    aws s3api put-bucket-acl --bucket DOC-EXAMPLE-BUCKET --acl private
  3. オブジェクト所有権のバケット所有者強制設定を適用します