Athena 中的 Amazon S3 儲存貯體跨帳戶存取 - Amazon Athena

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

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 存取帳戶 ID 111122223333

    { "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 中的使用者存取權
  1. 在帳戶 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": "*" } ] }
  2. 在帳戶 A 中,使用策略檢視檢閱金鑰 AWS Management Console 策略

  3. 在金鑰政策中,確認下列陳述式將帳戶 B 列為主體。

    "Sid": "Allow use of the key"
  4. 如果 "Sid": "Allow use of the key" 陳述式不存在,請執行下列步驟:

    1. 使用主控台預設檢視切換以檢視金鑰政策。

    2. 將帳戶 B 的帳戶 ID 新增為具有金鑰存取權的外部帳戶。

若要透過帳戶 B 所擔任的 IAM 角色授予帳戶 A 中儲存貯體和金鑰的存取權
  1. 從帳戶 B 中,開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在帳戶 B 中開啟與使用者關聯的 IAM 角色。

  3. 檢閱套用至 IAM 角色的許可政策清單。

  4. 確定已套用會授與儲存貯體存取權的政策。

    下列範例陳述式會授予 IAM 角色 DOC-EXAMPLE-BUCKET 儲存貯體上的 s3:GetObjects3:PutObject 操作的存取權:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }
  5. 確定已套用會授予金鑰存取權的政策。

    注意

    如果帳戶 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 儲存貯體中物件的跨帳戶存取權?