政策範例 ACLs - Amazon Simple Storage Service

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

政策範例 ACLs

您可以使用儲存貯體政策中的條件金鑰來控制對 Amazon S3 的存取。

授予 s3:具有要求存儲桶所有者獲得完全控制PutObject 權的條件的權限

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

假設帳戶 A 擁有一個儲存貯體,而帳戶管理員希望將上傳物件的許可授予帳戶 B 的使用者 Dave。根據預設,Dave 上傳的物件是為帳戶 B 所擁有,而帳戶 A 沒有這些物件的許可。因為付費的是儲存貯體擁有者,它希望有 Dave 上傳之物件的完整許可。帳戶管理員可以通過授予 Dave s3:PutObject 權限來執行此操作,條件是請求包含明確授予完整權限或使用固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,請參閱使用 AWS CLI 來透過 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 頭

您可以要求具有罐x-amz-acl頭的標頭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

授予 s3:具有 x-amz-acl 標題條件的PutObject 權限

下列儲存貯體政策授予兩個人的s3:PutObject權限 AWS 帳戶 如果請求包含使對象可公開讀取的x-amz-acl標題。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 條件。