本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Athena 中的 Amazon S3 儲存貯體跨帳戶存取
常見的 Amazon Athena 案例是將存取權授予非儲存貯體擁有者帳戶中的使用者,讓他們可以執行查詢。在這種情況下,使用儲存貯體政策來授予存取權。
注意
如需從 Athena 跨帳戶存取資 AWS Glue 料目錄的相關資訊,請參閱跨帳戶存取 AWS Glue 資料目錄。
以下範例儲存貯體政策由儲存貯體擁有者建立並套用至 s3://DOC-EXAMPLE-BUCKET
儲存貯體,會將存取權授予 123456789123
帳戶 (不同帳戶) 中的所有使用者。
{ "Version": "2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789123:root" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }
若要將存取權授予帳戶中的特定使用者,將 Principal
索引鍵取代為指定該使用者而非 root
的索引鍵。例如,針對使用者描述檔 Dave
,請使用 arn:aws:iam::123456789123:user/Dave
。
跨帳戶存取使用自訂 AWS KMS 金鑰加密的儲存貯體
如果您擁有使用自訂 AWS Key Management Service (AWS KMS) 金鑰加密的 Amazon S3 儲存貯體,則可能需要從其他 Amazon Web Services 帳戶將存取權授予使用者。
將帳戶 A 中 AWS KMS加密儲存貯體的存取權授與帳戶 B 中的使用者需要下列權限:
-
帳戶 A 中的儲存貯體政策必須授與帳戶 B 所擔任的角色的存取權。
-
帳戶 A 中的 AWS KMS 金鑰策略必須授予使用者在帳戶 B 中所扮演角色的存取權。
-
帳戶 B 所承擔的 AWS Identity and Access Management (IAM) 角色必須同時授與存取儲存貯體和帳戶 A 中金鑰的存取權。
下列程序說明如何授與這些許可。
將帳戶 A 中儲存貯體的存取權授與帳戶 B 中的使用者
-
從帳戶 A,檢閱 S3 儲存貯體政策,並確認有允許透過帳戶 B 的帳戶 ID 存取的陳述式。
例如,下列儲存貯體政策會允許
s3:GetObject
存取帳戶 ID111122223333
:{ "Id": "ExamplePolicy1", "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Principal": { "AWS": [ "111122223333" ] } } ] }
從帳戶 a 中的 AWS KMS 金鑰策略授與帳戶 b 中的使用者存取權
-
在帳戶 A 的 AWS KMS 金鑰策略中,將帳戶 B 所承擔的角色授與下列動作的權限:
-
kms:Encrypt
-
kms:Decrypt
-
kms:ReEncrypt*
-
kms:GenerateDataKey*
-
kms:DescribeKey
下列範例僅會將金鑰存取權授予一個 IAM 角色。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "
AllowUseOfTheKey
", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333
:role/role_name
" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] } -
-
在帳戶 A 中,使用策略檢視檢閱金鑰 AWS Management Console 策略。
-
在金鑰政策中,確認下列陳述式將帳戶 B 列為主體。
"Sid": "Allow use of the key"
-
如果
"Sid": "Allow use of the key"
陳述式不存在,請執行下列步驟:-
使用主控台預設檢視切換以檢視金鑰政策。
-
將帳戶 B 的帳戶 ID 新增為具有金鑰存取權的外部帳戶。
-
若要透過帳戶 B 所擔任的 IAM 角色授予帳戶 A 中儲存貯體和金鑰的存取權
-
從帳戶 B 中,開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
在帳戶 B 中開啟與使用者關聯的 IAM 角色。
-
檢閱套用至 IAM 角色的許可政策清單。
-
確定已套用會授與儲存貯體存取權的政策。
下列範例陳述式會授予 IAM 角色
DOC-EXAMPLE-BUCKET
儲存貯體上的s3:GetObject
和s3:PutObject
操作的存取權:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
-
確定已套用會授予金鑰存取權的政策。
注意
如果帳戶 B 所擔任的 IAM 角色已經具有管理員存取權,則您不需要透過使用者 IAM 政策授予金鑰存取權。
下列陳述式範例會授予 IAM 角色使用金鑰
arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd
的存取權。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt3", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey", "kms:ReEncrypt*" ], "Effect": "Allow", "Resource": "arn:aws:kms:
us-west-2
:123456789098
:key/111aa2bb-333c-4d44-5555-a111bb2c33dd
" } ] }
跨帳戶存取儲存貯體物件
由帳戶 (帳戶 C) (而非儲存貯體擁有的帳戶 (帳戶 A)) 上傳的物件,可能需要可授與查詢帳戶 (帳戶 B) 讀取權限的明確物件層級 ACL。為了避免此需求,帳戶 C 應該先負責帳戶 A 中的角色,才能在儲存貯體中放置物件。如需詳細資訊,請參閱如何提供 Amazon S3 儲存貯體中物件的跨帳戶存取權?