本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
停用 ACL 的先決條件
Amazon S3 中的儲存貯體存取控制清單 (ACL) 是一種機制,可讓您定義 S3 儲存貯體中個別物件的精細許可,指定哪些 AWS 帳戶或群組可以存取和修改這些物件。Amazon S3 中的大多數新式使用案例不再需要使用 ACL。我們建議您使用 AWS Identity and Access Management (IAM) 和儲存貯體政策來管理存取,並保持 ACLs停用,除非在異常情況下,您需要個別控制每個物件的存取。
如果您的儲存貯體已啟用 ACLs,請在停用 ACLs 之前完成下列先決條件:
檢閱儲存貯體和物件 ACL,並遷移 ACL 許可
當您停用 ACL 時,儲存貯體和物件 ACL 所授予的許可不會再影響存取。停用 ACL 之前,請先檢閱儲存貯體和物件 ACL。
每個現有的儲存貯體和物件 ACL 在 IAM 政策中都有對應項。下列儲存貯體政策範例說明儲存貯體和物件 ACL 的 READ
和 WRITE
許可如何映射至 IAM 許可。如需每個 ACL 如何轉譯成 IAM 許可的詳細資訊,請參閱 ACL 許可與存取政策許可的對應。
在您停用 ACLs之前:
如果您的儲存貯體 ACL 授予 AWS 帳戶外部的存取權,您必須先將儲存貯體 ACL 許可遷移至儲存貯體政策。
接著,將儲存貯體 ACL 重設為預設私有 ACL。
我們也建議您檢閱物件層級 ACL 許可,並將其遷移至儲存貯體政策。
如果您的儲存貯體 ACLs將讀取或寫入許可授予帳戶外的其他人,您必須先將這些許可遷移至儲存貯體政策,才能停用 ACLs。遷移這些許可後,您可以將物件擁有權設定為儲存貯體擁有者強制執行設定。如果您未遷移授予帳戶外讀取或寫入存取權的儲存貯體 ACL,則套用「儲存貯體擁有者強制執行」設定的請求會失敗,並傳回 InvalidBucketAclWithObjectOwnership 錯誤代碼。
如果您的儲存貯體 ACL 授予 外部的存取權 AWS 帳戶,則在停用 ACLs 之前,您必須將儲存貯體 ACL 許可遷移至儲存貯體政策,並將儲存貯體 ACL 重設為預設私有 ACL。如果您不遷移和重設,套用儲存貯體擁有者強制執行設定以停用 ACLs的請求會失敗並傳回InvalidBucketAclWithObjectOwnership錯誤碼。也建議您檢閱物件 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://https://console.aws.amazon.com/s3/
的 Amazon S3 主控台。 -
在 Buckets (儲存貯體) 清單中,選擇您的儲存貯體名稱。
-
在 Permissions (許可) 索引標籤上,Bucket policy (儲存貯體政策) 下,選擇 Edit (編輯)。
-
在 Policy (政策) 方塊中,新增或更新儲存貯體政策。
-
選擇儲存變更。
-
更新您的儲存貯體 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 進行授權的所有請求
若要識別需要 ACL 進行授權的 Amazon S3 請求,您可以使用 Amazon S3 伺服器存取日誌或 AWS CloudTrail中的 aclRequired
值。如果請求需要 ACL 進行授權,或者您有指定 ACL 的 PUT
請求,則字串為 Yes
。如果不需要 ACL,或者您要設定 bucket-owner-full-control
固定 ACL,或者儲存貯體政策允許這些請求,則 Amazon S3 伺服器存取日誌中的 aclRequired
值字串為 "-
",且在 CloudTrail 中不存在。如需預期的 aclRequired
值詳細資訊,請參閱 常見 Amazon S3 請求的 aclRequired 值。
如果您有 PutBucketAcl
或 PutObjectAcl
請求具有授予 ACL 型許可的標頭,但 bucket-owner-full-control
固定 ACL 除外,則您必須先移除這些標頭,才能停用 ACL。否則,請求將會失敗。
對於需要 ACL 進行授權的所有其他請求,請將這些 ACL 許可移轉至儲存貯體政策。然後,在啟用儲存貯體擁有者強制執行設定之前,移除任何儲存貯體 ACL。
注意
請勿移除物件 ACL。否則,依賴物件 ACL 取得許可的應用程式將失去存取權。
如果您發現沒有請求要求 ACL 進行授權,您可以繼續停用 ACL。如需識別請求的詳細資訊,請參閱 使用 Amazon S3 伺服器存取日誌來識別請求 和 使用 CloudTrail 來識別 Amazon S3 請求。
檢閱和更新使用 ACL 相關條件索引鍵的儲存貯體政策
套用「儲存貯體擁有者強制執行」設定以停用 ACL 之後,只有在請求使用儲存貯體擁有者完全控制 ACL 或未指定 ACL 時,才能將新物件上傳至儲存貯體。在停用 ACL 之前,請檢閱儲存貯體政策以取得與 ACL 相關的條件索引鍵。
如果您的儲存貯體政策使用與 ACL 相關的條件索引鍵來請求 bucket-owner-full-control
標準 ACL (例如 s3:x-amz-acl
),則您不需要更新儲存貯體政策。下列儲存貯體政策會使用 s3:x-amz-acl
以要求適用於 S3 PutObject
請求的 bucket-owner-full-control
標準 ACL。本政策仍然需要物件寫入者指定 bucket-owner-full-control
標準 ACL。不過,停用 ACL 的儲存貯體仍會接受此 ACL,因此請求會繼續成功,不需要用戶端進行變更。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:user/ExampleUser
" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
不過,如果儲存貯體政策使用需要不同 ACL 的 ACL 相關條件索引鍵,則必須移除此條件索引鍵。此範例儲存貯體政策存需要適用於 S3 PutObject
請求的 public-read
ACL,因此必須先更新才能停用 ACL。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:user/ExampleUser
" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }
範例使用案例
下列範例說明如何針對特定使用案例,將 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 -
針對物件擁有權套用「儲存貯體擁有者強制執行」設定。