選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

ACL 的政策範例

焦點模式
ACL 的政策範例 - Amazon Simple Storage Service

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

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

您可以在儲存貯體政策中使用條件索引鍵來控制對 Amazon S3 的存取。

授予條件為要求儲存貯體擁有者取得完全控制權的 s3:PutObject 許可

PUT 物件操作允許存取控制清單 (ACL) 特定的標頭,可用來授予以 ACL 為基礎的許可。使用這些金鑰,儲存貯體擁有者可設定條件,在使用者上傳物件時要求特定的存取許可。

假設帳戶 A 擁有一個儲存貯體,而帳戶管理員希望將上傳物件的許可授予帳戶 B 的使用者 Dave。根據預設,Dave 上傳的物件是為帳戶 B 所擁有,而帳戶 A 沒有這些物件的許可。因為付費的是儲存貯體擁有者,它希望有 Dave 上傳之物件的完整許可。帳戶 A 管理員只要將 s3:PutObject 許可授予 Dave,附帶要求包含 ACL 專屬標頭的條件,明確授予完整許可或指定使用固定的 ACL,即可完成此操作。如需詳細資訊,請參閱 PUT 物件

需要 x-amz-full-control 標頭

您可以指定要求中的 x-amz-full-control 標頭需要有儲存貯體擁有者的完全控制許可。下列儲存貯體政策授予使用者 Dave s3:PutObject 許可,附使用 s3:x-amz-grant-full-control 條件索引鍵的條件,需要要求包含 x-amz-full-control 標頭。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }
注意

此範例有關跨帳戶許可。不過,如果 Dave (取得許可的人) 屬於擁有儲存貯體 AWS 帳戶 的 ,則不需要此條件式許可。這是因為 Dave 隸屬的父帳戶擁有使用者上傳的物件。

新增明確拒絕

前面的儲存貯體政策將條件式許可授予帳戶 B 的使用者 Dave。當此政策生效時,Dave 卻可能透過另一個政策無條件取得相同的許可。例如,Dave 可屬於某個群組,而您無條件授予該群組 s3:PutObject 許可。為避免此等許可漏洞,您可以新增明確拒絕,撰寫較嚴格的存取政策。在本例中,如果 Dave 在授予儲存貯體擁有者的完整許可要求中未包含必要標頭,您會明確拒絕他的使用者上傳許可。明確拒絕會取代任何其他已授予的許可。以下是已新增明確拒絕的修訂後存取政策範例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID" } } } ] }
使用 測試政策 AWS CLI

如果您有兩個 AWS 帳戶,您可以使用 AWS Command Line Interface () 測試政策AWS CLI。您可以連接政策並使用 Dave 的登入資料,使用以下 AWS CLI put-object命令來測試許可。您可以新增 --profile 參數,來提供 Dave 的憑證。您可以透過新增 --grant-full-control 參數,授予儲存貯體擁有者的完全控制許可。如需設定和使用 的詳細資訊 AWS CLI,請參閱《Amazon S3 API 參考》中的使用 AWS CLI 開發 Amazon S3。 Amazon S3

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile

需要 x-amz-acl 標頭

您可以要求有固定 ACL 的 x-amz-acl 標頭將完全控制許可授予儲存貯體擁有者。要求中若需要 x-amz-acl 標頭,您可以取代 Condition 區塊中的金鑰/值對,並指定 s3:x-amz-acl 條件索引鍵,如以下範例所示。

"Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }

若要使用 測試許可 AWS CLI,您可以指定 --acl 參數。 AWS CLI 然後, 會在傳送請求時新增 x-amz-acl 標頭。

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --acl "bucket-owner-full-control" --profile AccountBadmin

授予條件為 x-amz-acl 標頭的 s3:PutObject 許可

AWS 帳戶 如果請求包含讓物件可公開讀取的x-amz-acl標頭,則下列儲存貯體政策會授予兩個 的s3:PutObject許可。Condition 區塊使用 StringEquals 條件,而且有用於評估的金鑰/值對 "s3:x-amz-acl":["public-read"]。在此金鑰/值對中,s3:x-amz-acl 是 Amazon S3 專用金鑰,如字首 s3: 所示。

{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": { "AWS": [ "arn:aws:iam::Account1-ID:root", "arn:aws:iam::Account2-ID:root" ] }, "Action":"s3:PutObject", "Resource": ["arn:aws:s3:::awsexamplebucket1/*"], "Condition": { "StringEquals": { "s3:x-amz-acl":["public-read"] } } } ] }
重要

不是所有的條件都對所有動作有意義。例如,在授予 s3:CreateBucket Amazon S3 許可的政策中包含 s3:LocationConstraint 條件有意義。但在授予 s3:GetObject 許可的政策中包含此條件就沒意義。Amazon S3 可以測試這類涉及 Amazon S3 特定條件的語意錯誤。但是,如果您為 IAM 使用者或角色建立政策,但包含語意無效的 Amazon S3 條件,則不會回報任何錯誤,因為 IAM 無法驗證 Amazon S3 條件。

下一個主題:

封鎖公開存取

上一個主題:

設定 ACL
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。