

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

# 啟用跨帳戶聯合查詢
<a name="xacct-fed-query-enable"></a>

聯合查詢允許您使用部署在 AWS Lambda上的資料來源連接器查詢 Amazon S3 以外的資料來源。跨帳戶聯合查詢功能允許 Lambda 函數和要查詢的資料來源位於不同的帳戶中。

**注意**  
只有在您尚未向 AWS Glue Data Catalog註冊聯合資料來源時，才會使用此方法。如果您已向 註冊資料來源 AWS Glue Data Catalog，請使用 AWS Glue Data Catalog 跨帳戶功能和許可模型。如需詳細資訊，請參閱《AWS Glue 使用者指南**》中的[授予跨帳戶存取權](https://docs.aws.amazon.com/glue/latest/dg/cross-account-access.html)。

作為資料管理員，您可以透過與資料分析師的帳戶共用資料連接器來啟用跨帳戶聯合查詢，或者作為資料分析師，透過使用資料管理員提供的共用 Lambda ARN 新增至您的帳戶，來啟用此功能。當對原始帳戶中的連接器進行組態變更時，更新的組態將自動套用於其他使用者帳戶中的連接器共用執行個體。

## 考量和限制
<a name="xacct-fed-query-enable-considerations-and-limitations"></a>
+ 跨帳戶聯合查詢功能適用於使用 Lambda 型資料來源的非 Hive 中繼儲存資料連接器。
+ 此功能不適用於 AWS Glue Data Catalog 資料來源類型。如需跨帳戶存取 AWS Glue Data Catalog的資訊，請參閱 [設定 AWS Glue 資料目錄的跨帳戶存取](security-iam-cross-account-glue-catalog-access.md)。
+ 如果來自連接器 Lambda 函數的回應超過 6 MB 的 Lambda 回應大小限制，Athena 會自動對您設定的 Amazon S3 儲存貯體進行加密、批次處理和溢出回應。執行 Athena 查詢的實體必須能夠存取溢出位置，這樣 Athena 才能讀取溢出的資料。建議您設定 Amazon S3 生命週期政策，從溢出位置刪除物件，因為查詢完成後就不需要資料了。
+  AWS 區域 不支援跨 使用聯合查詢。

## 所需的許可
<a name="xacct-fed-query-enable-required-permissions"></a>

若要設定所需的許可，必須在帳戶 A (*444455556666*) 和帳戶 B (*111122223333*) 中採取動作。

### 帳戶 A 的動作
<a name="xacct-fed-query-enable-required-permissions-account-a"></a>

若資料管理員帳戶 A 要與資料分析師帳戶 B 共用 Lambda 函數，帳戶 B 需要 Lambda 叫用函數和溢出儲存貯體存取權限。因此，帳戶 A 應將[資源型政策](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)新增至 Lambda 函數中，並將[主體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)存取權限新增至 Amazon S3 中的溢出儲存貯體。

1. 以下政策向帳戶 B 授予帳戶 A 中 Lambda 函數的 Lambda 叫用函數許可。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "CrossAccountInvocationStatement",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:user/username"
                   ]
               },
               "Action": "lambda:InvokeFunction",
               "Resource": "arn:aws:lambda:us-east-1:444455556666:function:lambda-function-name"
           }
       ]
   }
   ```

------

1. 以下政策允許溢出儲存貯體存取帳戶 B 中的主體。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
               "AWS": ["arn:aws:iam::111122223333:user/username"]
               },
               "Action": [
                   "s3:GetObject",
                   "s3:ListBucket"
                ],
               "Resource": [
                   "arn:aws:s3:::spill-bucket",
                   "arn:aws:s3:::spill-bucket/*"
               ]
           }
        ]
    }
   ```

------

1. 如果 Lambda 函數使用 AWS KMS 金鑰加密溢出儲存貯體，而不是聯合 SDK 提供的預設加密，帳戶 A AWS KMS 中的金鑰政策必須將存取權授予帳戶 B 中的使用者，如下列範例所示。

   ```
   { 
       "Sid": "Allow use of the key", 
       "Effect": "Allow", 
       "Principal": 
       { 
          "AWS": ["arn:aws:iam::account-B-id:user/username"] 
       }, 
       "Action": [ "kms:Decrypt" ], 
       "Resource": "*" // Resource policy that gets placed on the KMS key. 
    }
   ```

### 帳戶 B 的動作
<a name="xacct-fed-query-enable-required-permissions-account-b"></a>

若要讓帳戶 A 與帳戶 B 共用其連接器，帳戶 B 必須透過呼叫 AWS 安全字符服務 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 動作來建立名為`AthenaCrossAccountCreate-account-A-id`帳戶 A 擔任的角色。

1. 使用 IAM 主控台或 AWS CLI 在 中建立`AthenaCrossAccountCreate-account-A-id`角色做為自訂信任政策角色。自訂信任政策會委派存取權，並允許其他人在您的 AWS 帳戶中執行動作。如需相關步驟，請參閱《IAM 使用者指南**》中的[使用自訂信任政策建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

   信任關係應該有一個主體物件，其中索引鍵為 `AWS`，值為帳戶 A 的 ARN，如下列範例所示。

   ```
   ...
   "Principal": 
   { 
      "AWS": ["arn:aws:iam::account-A-id:user/username"]
   }, 
   ...
   ```

1. 此外，在帳戶 B 中建立如下所示的政策，以允許 `CreateDataCatalog` 動作。

   ```
   {
    "Effect": "Allow",
    "Action": "athena:CreateDataCatalog",
    "Resource": "arn:aws:athena:*:account-B-id:datacatalog/*"
   }
   ```

1. 將允許 `CreateDataCatalog` 動作的政策新增至您使用帳戶 B 建立的 `AthenaCrossAccountCreate-account-A-id` 角色。

## 與帳戶 B 共享帳戶 A 中的資料來源
<a name="xacct-fed-query-enable-sharing-a-lambda-data-source-in-account-a-with-account-b"></a>

設定許可後，即可使用 Athena 主控台中的**資料來源和目錄**頁面，將您的帳戶 (帳戶 A) 中的資料連接器與另一個帳戶 (帳戶 B) 共用。帳戶 A 保留連接器的完全控制權和擁有權。當帳戶 A 對連接器進行組態變更時，更新的組態將套用於帳戶 B 中的共用連接器。

**注意**  
您只能共用 Lambda 類型資料來源，而且無法共用使用 AWS Glue 連線的資料來源。如需詳細資訊，請參閱[可用資料來源連接器](connectors-available.md)。

**與帳戶 B 共用帳戶 A 中的 Lambda 資料來源**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 如果未顯示主控台的導覽窗格，請選擇左側的展開選單。  
![\[選擇展開選單。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/nav-pane-expansion.png)

1. 選擇**資料來源和目錄**。

1. 在**資料來源和目錄**頁面上，選擇您要共用的連接器連結。

1. 在 Lambda 資料來源的詳細資訊頁面上，從右上角的**動作**功能表，選擇**共用**。

1. 在**與另一個帳戶共用 *Lambda-name*** 對話方塊中，輸入所需的資訊。
   + 針對 **Data source name** (資料來源名稱) 中，輸入您希望複製的資料來源在其他帳戶中顯示的名稱。
   + 針對 **Account ID** (帳戶 ID) 中，輸入要與其共用資料來源的帳戶 ID (在本例中為帳戶 B)。

1. 選擇**共用**。您指定的共用資料連接器會建立在帳戶 B 中。帳戶 A 中連接器的組態變更會套用於帳戶 B 中的連接器。

## 將共用資料來源從帳戶 A 新增至帳戶 B
<a name="xacct-fed-query-enable-add-a-shared-lambda-function-arn-to-your-account"></a>

作為資料分析師，您可能會從資料管理員處獲得連接器的 ARN，以將其新增至您的帳戶中。您可以使用 Athena 主控台的**資料來源和目錄**頁面，將管理員提供的 Lambda ARN 新增至您的帳戶。

**將共用資料連接器的 Lambda ARN 新增至您的帳戶**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 如果未顯示導覽窗格，請選擇左側的展開選單。

1. 選擇**資料來源和目錄**。

1. 在**資料來源和目錄**頁面上，選擇**建立資料來源**。

1. 在**選擇資料來源**頁面上，選擇**自訂或共用連接器**。

1. 選擇**下一步**。

1. 在**輸入資料來源詳細資訊**頁面的**連線詳細資訊**區段中，針對**選取或輸入 Lambda 函式**，輸入帳戶 A 的 Lambda ARN。

1. 選擇**下一步**。

1. 在**檢閱和建立**頁面上，選擇**建立資料來源**。

## 疑難排解
<a name="xacct-fed-query-enable-troubleshooting"></a>

如果您收到錯誤訊息，指出帳戶 A 沒有在帳戶 B 中擔任角色的許可，請確認在帳戶 B 中建立的角色的名稱拼寫正確，並且連接了正確的政策。