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

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

停用的先決條件 ACLs

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

您現有的每個值區和物件在IAM政策中都ACLs具有對等值區。下列值區政策範例說明值區READ和物件ACLs對應至WRITE權限的方式和IAM權限。如需每個權限如何ACL轉換成IAM權限的詳細資訊,請參閱ACL權限與存取原則權限的對應

若要檢閱值區政策並將ACL權限移轉至值區政策,請參閱下列主題。

儲存貯體政策範例

以下值區政策範例說明如何遷移第三方的WRITE值區READ和物件ACL權限 AWS 帳戶 到存儲桶策略。 READ_ACPWRITE_ACPACLs與原則相關性較低,因為它們授ACL與相關權限 (s3:GetBucketAcls3:GetObjectAcls3:PutBucketAcl、、和s3:PutObjectAcl)。

範例 -READ ACL 對於桶

如果你的桶有一READACL個補助金 AWS 帳戶 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:::DOC-EXAMPLE-BUCKET" } ] }
範例 -對READACLs於值區中的每個物件

如果值區中的每個物件都有授予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:::DOC-EXAMPLE-BUCKET/*" } ] }

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

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/OBJECT-KEY"
範例 — 授WRITEACL予將物件寫入值區的權限

如果你的存儲桶有一WRITEACL個補助 AWS 帳戶 111122223333將物件寫入值區的權限,您可以撰寫值區政策來授與值區的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. 在 [存取控制清單 (ACL)] 下方,檢閱您的值區ACL權限。

若要檢閱物件的ACL權限
  1. 登入 AWS Management Console 並在打開 Amazon S3 控制台https://console.aws.amazon.com/s3/

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

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

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

  5. 存取控制清單 (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. 選擇 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 帳戶 識別碼 (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 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授予WRITEREAD_ACP存取 S3 日誌傳遞群組:

{ "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:::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 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 (RedisOSS)訪問您的 S3 存儲桶

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