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

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

停用 ACL 的先決條件

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

每個現有的儲存貯體和物件 ACL 在 IAM 政策中都有對應項。下列儲存貯體政策範例說明儲存貯體和物件 ACL 的 READWRITE 許可如何映射至 IAM 許可。如需每個 ACL 如何轉譯成 IAM 許可的詳細資訊,請參閱 ACL 許可與存取政策許可的對應

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

儲存貯體政策範例

這些範例儲存貯體政策說明如何將 READWRITE 儲存貯體及第三方 AWS 帳戶 的物件 ACL 許可遷移至儲存貯體政策。READ_ACPWRITE_ACP ACL 與政策較不相關,因為其會授予與 ACL 相關的許可 (s3:GetBucketAcls3:GetObjectAcls3:PutBucketAcls3:PutObjectAcl)。

範例 — 儲存貯體的 READ ACL

如果您的值區擁有授與列出值區內容之 AWS 帳戶 111122223333權限的 READ ACL,您可以撰寫值區政策授s3:ListBucket與值區的s3:ListBucketMultipartUploads權限。s3:ListBucketVersions

{ "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" } ] }
範例 – READ 儲存貯體中每個物件的 ACL

如果值區中的每個物件都有授與存取權的 READ ACL AWS 帳戶 111122223333,您可以撰寫值區政策,為值區中的每個物件授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:::DOC-EXAMPLE-BUCKET/*" } ] }

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

"Resource": "arn:aws:s3:::DOC-EXAMPLE-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:::DOC-EXAMPLE-BUCKET/*" } ] }

使用 S3 主控台來檢閱及遷移 ACL 許可

檢閱儲存貯體的 ACL 許可
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

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

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

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

檢閱物件的 ACL 許可
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

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

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

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

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

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

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

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

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

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

  5. 選擇儲存變更

  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. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定

授予 Amazon ElastiCache 對您 S3 儲存貯體的 Redis 存取權

您可以將ElastiCache 適用於 Redis 的備份匯出到 S3 儲存貯體,讓您可以從外部 ElastiCache存取備份。若要將備份匯出到 S3 儲存貯體,您必須授 ElastiCache予將快照複製到儲存貯體的許可。如果您已授與值區 ACL ElastiCache 中的權限,您必須先將這些權限移轉至值區政策,才能套用值區擁有者強制執行設定來停用 ACL。如需詳細資訊,請參閱 Amazon ElastiCache 使用者指南的授予對 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" } ] }
若要將 Redis 的 ElastiCache 值區 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. 針對物件擁有權套用「儲存貯體擁有者強制執行」設定