停用 ACLs 的先決條件 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

停用 ACLs 的先決條件

如果您的儲存貯體 ACL 授予您外部的存取權 AWS 帳戶,則在您停用 ACLs 之前,必須將儲存貯體 ACL 許可遷移至儲存貯體政策,並將儲存貯體 ACL 重設為預設私有 ACL。如果您未遷移這些儲存貯體 ACLs,則套用儲存貯體擁有者強制執行設定以停用 ACLs 的請求會失敗,並傳回 InvalidBucketAclWithObjectOwnership 錯誤碼。我們也建議您檢閱物件 ACL 許可,並將其遷移至儲存貯體政策。如需有關建議先決條件的詳細資訊,請參閱 停用 ACLs 的先決條件

您現有的每個儲存貯體和物件 ACLs 在 IAM 政策中具有同等的 。下列儲存貯體政策範例示範儲存貯體READ和物件 ACLs 映射到 IAM WRITE許可的方式和許可。如需有關每個 ACL 如何轉換為 IAM 許可的詳細資訊,請參閱 ACL 許可和存取政策許可的映射

若要檢閱並遷移 ACL 許可至儲存貯體政策,請參閱下列主題。

儲存貯體政策範例

這些儲存貯體政策範例示範如何將第三方的 ACL 許可遷移READWRITE儲存貯體和物件 Word 許可 AWS 帳戶 至儲存貯體政策。 READ_ACPWRITE_ACP ACLs 與政策的相關性較低s3:GetObjectAcl,因為他們授予 ACL 相關許可 (s3:GetBucketAcls3:PutBucketAcl、 和 s3:PutObjectAcl)。

範例 – READ 儲存貯體的 ACL

如果您的儲存貯體有 AWS 帳戶 ACL READ 111122223333授予許可,以列出儲存貯體的內容,您可以撰寫儲存貯體政策來授予 s3:ListBuckets3: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 儲存貯體中每個物件的ACLs

如果儲存貯體中的每個物件都有 READACL 授予對 的存取權 AWS 帳戶 111122223333,您可以撰寫儲存貯體政策,為儲存貯體中的每個物件授予此帳戶的 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:::amzn-s3-demo-bucket/*" } ] }

此範例資源元素會授予特定物件的存取權。

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"
範例 – WRITE 將寫入物件的許可授予儲存貯體的 ACL

如果您的儲存貯體具有 WRITEACL,可111122223333授予 AWS 帳戶 許可,將物件寫入儲存貯體,您可以撰寫儲存貯體政策,以授予儲存貯體的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 許可
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。

  3. 選擇許可索引標籤標籤。

  4. 存取控制清單 (ACL) 下,檢閱您的儲存貯體 ACL 許可。

若要檢閱物件的 ACL 許可
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇包含您物件的儲存貯體名稱。

  3. Object (物件) 清單中,選擇您的物件名稱。

  4. 選擇許可索引標籤標籤。

  5. 存取控制清單 (ACL) 下,檢閱您的物件 ACL 許可。

遷移 ACL 許可並更新您的儲存貯體 ACL
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。

  3. Permissions (許可) 索引標籤上,Bucket policy (儲存貯體政策) 下,選擇 Edit (編輯)。

  4. Policy (政策) 方塊中,新增或更新儲存貯體政策。

    如需儲存貯體政策,請參閱 儲存貯體政策範例範例演練

  5. 選擇 Save changes (儲存變更)。

  6. 更新您的儲存貯體 ACL 以移除對其他群組的 ACL 授予或 AWS 帳戶。

  7. 針對物件擁有權套用儲存貯體擁有者強制執行設定

使用 AWS CLI 來檢閱和遷移 ACL 許可

  1. 若要傳回儲存貯體的儲存貯體 ACL,請使用 get-bucket-acl AWS CLI 命令:

    aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket

    例如,此儲存貯體 ACL 會授予第三方帳戶的 WRITEREAD存取權。在此 ACL 中,第三方帳戶由正式使用者 ID 識別。若要套用儲存貯體擁有者強制執行的設定並停用 ACLs,您必須將第三方帳戶的這些許可遷移至儲存貯體政策。

    { "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" } ] }

    如需其他 ACLs 範例,請參閱 範例演練

  2. 將儲存貯體 ACL 許可遷移至儲存貯體政策:

    此範例儲存貯體政策會為第三方帳戶授予 s3:PutObjects3:ListBucket 許可。在儲存貯體政策中,第三方帳戶由 AWS 帳戶 ID () 識別111122223333

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

    如需更多儲存貯體政策範例,請參閱 儲存貯體政策範例範例演練

  3. 若要傳回特定物件的 ACL,請使用 get-object-acl AWS CLI 命令。

    aws s3api get-object-acl --bucket amzn-s3-demo-bucket --key EXAMPLE-OBJECT-KEY
  4. 如有需要,請將物件 ACL 許可遷移至儲存貯體政策。

    此範例資源元素會授予儲存貯體政策中特定物件的存取權。

    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-OBJECT-KEY"
  5. 將儲存貯體的 ACL 重設為預設 ACL。

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  6. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定

範例演練

下列範例示範如何將 ACL 許可遷移至特定使用案例的儲存貯體政策。

授予 S3 日誌交付群組的存取權以進行伺服器存取日誌記錄

如果您想要套用儲存貯體擁有者強制執行設定,以針對伺服器存取記錄目的地儲存貯體 (也稱為目標儲存貯體) 停用 ACLs,則必須將 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 amzn-s3-demo-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:::amzn-s3-demo-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 amzn-s3-demo-bucket --acl private
  3. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定至您的目的地儲存貯體。

對儲存貯體中的物件授予公用讀取存取權。

如果您的物件 ACLs 授予儲存貯體中所有物件的公開讀取存取權,您可以將這些 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 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/*"
  2. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定

授予 Amazon ElastiCache (Redis OSS) 存取 S3 儲存貯體的權限

您可以將 ElastiCache (Redis OSS) 備份匯出至 S3 儲存貯體,讓您從 outside ElastiCache 存取備份。若要將備份匯出至 S3 儲存貯體,您必須授予 ElastiCache 許可,才能將快照複製到儲存貯體。如果您已在儲存貯體 ElastiCache 中授予 ACL 的許可,您必須先將這些許可遷移至儲存貯體政策,才能套用儲存貯體擁有者強制執行設定以停用 ACLs。如需詳細資訊,請參閱 Amazon ElastiCache 使用者指南中的 GrantWord 存取您的 Amazon S3 儲存貯Amazon S3體。 ElastiCache

下列範例顯示授予 ACL 許可的儲存貯體 ElastiCache 許可。

{ "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" } ] }
將儲存貯體 ACL for ElastiCache (Redis OSS) 的許可遷移至儲存貯體政策
  1. 將以下儲存貯體政策新增至您的儲存貯體,替換範例值。

    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/*" ] } ] }
  2. 將儲存貯體的 ACL 重設為預設 ACL:

    aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
  3. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定