本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如果您的儲存貯體 ACL 授予 外部的存取權 AWS 帳戶,則必須先將儲存貯體 ACL ACLs 許可遷移至儲存貯體政策,並將儲存貯體 ACL 重設為預設私有 ACL。如果您未遷移這些儲存貯體 ACL,則套用「儲存貯體擁有者強制執行」設定以停用 ACL 的請求會失敗,並傳回 InvalidBucketAclWithObjectOwnership 錯誤代碼。也建議您檢閱物件 ACL 許可,並將其遷移至儲存貯體政策。如需有關建議先決條件的詳細資訊,請參閱 停用 ACL 的先決條件。
每個現有的儲存貯體和物件 ACL 在 IAM 政策中都有對應項。下列儲存貯體政策範例說明儲存貯體和物件 ACL 的 READ
和 WRITE
許可如何映射至 IAM 許可。如需每個 ACL 如何轉譯成 IAM 許可的詳細資訊,請參閱 ACL 許可與存取政策許可的對應。
若要檢閱 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
如果儲存貯體中的每個物件都有授予 存取權的 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:::/*" } ] }
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 ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在 Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。
-
選擇許可索引標籤標籤。
-
在 Access control list (存取控制清單 (ACL)) 下,請檢閱您的儲存貯體 ACL 許可。
檢閱物件的 ACL 許可
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在 Buckets (儲存貯體) 清單中,選擇包含您物件的儲存貯體名稱。
-
在 Object (物件) 清單中,選擇您的物件名稱。
-
選擇許可索引標籤標籤。
-
在 Access control list (存取控制清單 (ACL)) 下,請檢閱您的物件 ACL 許可。
遷移 ACL 許可並更新您的儲存貯體 ACL
登入 AWS Management Console ,並在 https://console.aws.amazon.com/s3/
:// 開啟 Amazon S3 主控台。 -
在 Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。
-
在 Permissions (許可) 索引標籤上,Bucket policy (儲存貯體政策) 下,選擇 Edit (編輯)。
-
在 Policy (政策) 方塊中,新增或更新儲存貯體政策。
-
選擇 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/
*" -
針對物件擁有權套用「儲存貯體擁有者強制執行」設定。
授權 Amazon ElastiCache (Redis OSS) 存取您的 S3 儲存貯體
您可以將 ElastiCache (Redis OSS) 備份匯出至 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 (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 -
針對物件擁有權套用「儲存貯體擁有者強制執行」設定。