啟用跨帳戶聯合查詢 - Amazon Athena

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

啟用跨帳戶聯合查詢

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

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

考量與限制

  • 跨帳戶聯合查詢功能適用於使用 Lambda 型資料來源的非 Hive 中繼儲存資料連接器。

  • 此功能不適用於 AWS Glue Data Catalog 資料來源類型。如需跨帳戶存取 AWS Glue Data Catalog s 的相關資訊,請參閱跨帳戶存取 AWS Glue 資料目錄

  • 如果來自連接器 Lambda 函數的回應超過 6 MB 的 Lambda 回應大小限制,Athena 會自動對您設定的 Amazon S3 儲存貯體進行加密、批次處理和溢出回應。執行 Athena 查詢的實體必須能夠存取溢出位置,這樣 Athena 才能讀取溢出的資料。建議您設定 Amazon S3 生命週期政策,從溢出位置刪除物件,因為查詢完成後就不需要資料了。

  • 不支援跨 AWS 區域 使用聯合查詢。

所需的許可

  • 若資料管理員帳戶 A 要與資料分析師帳戶 B 共用 Lambda 函數,帳戶 B 需要 Lambda 叫用函數和溢出儲存貯體存取權限。因此,帳戶 A 應將資源型政策新增至 Lambda 函數中,並將主體存取權限新增至 Amazon S3 中的溢出儲存貯體。

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

      { "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountInvocationStatement", "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:aws-region:account-A-id:function:lambda-function-name" } ] }
    2. 以下政策允許溢出儲存貯體存取帳戶 B 中的主體。

      { "Version": "2008-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["arn:aws:iam::account-B-id:user/username"] }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::spill-bucket", "arn:aws:s3:::spill-bucket/*" ] } ] }
    3. 如果 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. }
  • 若要讓帳戶 A 與帳戶 B 共用其連接器,帳戶 B 必須透過呼叫 AWS 安全性權杖服務 AssumeRoleAPI 動作來建立名為AthenaCrossAccountCreate-account-A-id該帳戶 A 所承擔的角色。

    以下政策允許 CreateDataCatalog 動作,應在帳戶 B 中建立,並新增至帳戶 B 為帳戶 A 建立的 AthenaCrossAccountCreate-account-A-id 角色。

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

與帳戶 B 共享帳戶 A 中的資料來源

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

與帳戶 B 共用帳戶 A 中的 Lambda 資料來源
  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 如果未顯示主控台的導覽窗格,請選擇左側的展開選單。

    選擇展開選單。
  3. 選擇 Data Source (資料來源)。

  4. Data sources (資料來源) 頁面上,選擇您要共用的連接器連結。

  5. 在 Lambda 資料來源的詳細資訊頁面上,選擇右上角的 Share (共用) 選項。

    選擇共用。
  6. Share Lambda-name with another account (與另一個帳戶共用 Lambda-name) 對話方塊中,輸入所需的資訊。

    • 針對 Data source name (資料來源名稱) 中,輸入您希望複製的資料來源在其他帳戶中顯示的名稱。

    • 針對 Account ID (帳戶 ID) 中,輸入要與其共用資料來源的帳戶 ID (在本例中為帳戶 B)。

    輸入資料來源名稱和 AWS 帳戶 ID。
  7. 選擇共用。您指定的共用資料連接器會建立在帳戶 B 中。帳戶 A 中連接器的組態變更會套用於帳戶 B 中的連接器。

將共用資料來源從帳戶 A 新增至帳戶 B

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

將共用資料連接器的 Lambda ARN 新增至您的帳戶
  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 如果您正在使用新的主控台體驗,且看不到導覽窗格,請選擇左側的展開選單。

  3. 選擇 Data Source (資料來源)。

  4. Data sources (資料來源) 頁面上,選擇 Connect data source (連接資料來源)。

    選擇 Connect data source (連接資料來源)。
  5. 選擇 Custom or shared connector (自訂或共用連接器)。

    選擇 Custom or shared connector (自訂或共用連接器)。
  6. Lambda function (Lambda 函數) 區段中,請確認選取 Use an existing Lambda function (使用現有 Lambda 函數) 選項。

    指定另一個帳戶的 Lambda ARN。
  7. 針對 Choose or enter a Lambda function (選擇或輸入 Lambda 函數),輸入帳戶 A 的 Lambda ARN。

  8. 選擇 Connect data source (連接資料來源)。

故障診斷

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