

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

# 設定 Athena 中的 Amazon S3 儲存貯體跨帳戶存取權
<a name="cross-account-permissions"></a>

常見的 Amazon Athena 案例是將存取權授予非儲存貯體擁有者帳戶中的使用者，讓他們可以執行查詢。在這種情況下，使用儲存貯體政策來授予存取權。

**注意**  
如需有關從 Athena 跨帳戶存取 AWS Glue 資料目錄的資訊，請參閱 [設定 AWS Glue 資料目錄的跨帳戶存取](security-iam-cross-account-glue-catalog-access.md)。

以下範例儲存貯體政策由儲存貯體擁有者建立並套用至 `s3://amzn-s3-demo-bucket` 儲存貯體，會將存取權授予 `123456789123` 帳戶 (不同帳戶) 中的所有使用者。

------
#### [ JSON ]

****  

```
{
   "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:::amzn-s3-demo-bucket",
             "arn:aws:s3:::amzn-s3-demo-bucket/*"
          ]
       }
    ]
 }
```

------

若要將存取權授予帳戶中的特定使用者，將 `Principal` 索引鍵取代為指定該使用者而非 `root` 的索引鍵。例如，針對使用者描述檔 `Dave`，請使用 `arn:aws:iam::123456789123:user/Dave`。

## 設定使用自訂 AWS KMS 金鑰加密之儲存貯體的跨帳戶存取權
<a name="cross-account-permissions-kms"></a>

如果您有使用 custom 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 儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)，並確認有允許透過帳戶 B 的帳戶 ID 存取的陳述式。

  例如，下列儲存貯體政策會允許 `s3:GetObject` 存取帳戶 ID `111122223333`：

------
#### [ JSON ]

****  

  ```
  {
    "Id": "ExamplePolicy1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "ExampleStmt1",
        "Action": [
          "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Principal": {
          "AWS": [
            "111122223333"
          ]
        }
      }
    ]
  }
  ```

------

**從帳戶 a 中的 AWS KMS 金鑰政策，將存取權授予帳戶 b 中的使用者**

1. 在帳戶 A 的 AWS KMS 金鑰政策中，將帳戶 B 所擔任的角色許可授予下列動作：
   +  `kms:Encrypt` 
   +  `kms:Decrypt` 
   +  `kms:ReEncrypt*` 
   +  `kms:GenerateDataKey*` 
   +  `kms:DescribeKey` 

   下列範例僅會將金鑰存取權授予一個 IAM 角色。

------
#### [ JSON ]

****  

   ```
   {
       "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": "*"
           }
       ]
   }
   ```

------

1. 從帳戶 A，[使用政策檢視檢閱金鑰 AWS 管理主控台 政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view)。

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

   ```
   "Sid": "Allow use of the key" 
   ```

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

   1. [使用主控台預設檢視](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view)切換以檢視金鑰政策。

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

**若要透過帳戶 B 所擔任的 IAM 角色授予帳戶 A 中儲存貯體和金鑰的存取權**

1. 從帳戶 B 中，開啟位於 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 的 IAM 主控台。

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

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

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

   下列範例陳述式會授予 IAM 角色 `amzn-s3-demo-bucket` 儲存貯體上的 `s3:GetObject` 和 `s3:PutObject` 操作的存取權：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt2",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. 確定已套用會授予金鑰存取權的政策。
**注意**  
如果帳戶 B 所擔任的 IAM 角色已經具有[管理員存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)，則您不需要透過使用者 IAM 政策授予金鑰存取權。

   下列陳述式範例會授予 IAM 角色使用金鑰 `arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd` 的存取權。

------
#### [ JSON ]

****  

   ```
   {
     "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"
       }
     ]
   }
   ```

------

## 設定對儲存貯體物件的跨帳戶存取權
<a name="cross-account-permissions-objects"></a>

由帳戶 (帳戶 C) (而非儲存貯體擁有的帳戶 (帳戶 A)) 上傳的物件，可能需要可授與查詢帳戶 (帳戶 B) 讀取權限的明確物件層級 ACL。為了避免此需求，帳戶 C 應該先負責帳戶 A 中的角色，才能在儲存貯體中放置物件。如需詳細資訊，請參閱[如何提供 Amazon S3 儲存貯體中物件的跨帳戶存取權？](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)。