本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ACLs 的政策範例
您可以使用儲存貯體政策中的條件索引鍵來控制對 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 Word 參考中的使用 AWS CLI 與 Amazon S3 一起開發。 Amazon S3 API
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
在 PutObject 標頭上授予具有 條件的 s3: x-amz-acl 許可
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 條件。