在 Athena 中設定 Spark 的跨帳戶 AWS Glue 存取 - Amazon Athena

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

在 Athena 中設定 Spark 的跨帳戶 AWS Glue 存取

本主題將說明如何將消費者帳戶 666666666666 和擁有者帳戶 999999999999 設定為跨帳户 AWS Glue 存取權。設定帳戶後,消費者帳戶可以在擁有者的 AWS Glue 資料庫和資料表上從 Athena for Spark 執行查詢。

1. 在中 AWS Glue,提供對消費者角色的存取

在中 AWS Glue,擁有者會建立原則,提供取用者角色存取擁有者 AWS Glue 資料目錄的權限。

新增允許取用者角色存取擁有者資料目錄的 AWS Glue 原則
  1. 使用目錄擁有者的帳戶,登入 AWS Management Console。

  2. 請在以下位置開啟 AWS Glue 主控台。 https://console.aws.amazon.com/glue/

  3. 在導覽窗格中,展開資料目錄,然後選擇目錄設定

  4. 資料目錄設定頁面的許可區段中,新增如下政策。此政策為消費者帳戶 666666666666 提供存取所有者帳戶 999999999999 中的資料目錄的角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Cataloguers", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::666666666666:role/Admin", "arn:aws:iam::666666666666:role/AWSAthenaSparkExecutionRole" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-west-2:999999999999:catalog", "arn:aws:glue:us-west-2:999999999999:database/*", "arn:aws:glue:us-west-2:999999999999:table/*" ] } ] }

2. 設定消費者帳戶,以用於存取

在取用者帳戶中,建立允許存取擁有者 AWS Glue Data Catalog、資料庫和資料表的原則,並將原則附加至角色。下列範例會使用消費者帳戶 666666666666

若要建立存取擁有者的 AWS Glue 原則 AWS Glue Data Catalog
  1. 使用消費者帳戶,登入 AWS Management Console。

  2. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  3. 在導覽窗格中,展開存取管理,然後選擇政策

  4. 選擇建立政策

  5. 指定許可頁面上,選擇 JSON

  6. 政策編輯器中,輸入如下所示的 JSON 陳述式,允許對擁有者帳戶的資料目錄 AWS Glue 執行動作。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/*", "arn:aws:glue:us-east-1:999999999999:table/*" ] } ] }
  7. 選擇下一步

  8. 檢閱和建立頁面上,針對政策名稱,輸入該政策的名稱。

  9. 選擇建立政策

接下來,您可以在消費者帳戶中使用 IAM 主控台,將剛建立的政策連接到消費者帳戶用來存取擁有者資料目錄的 IAM 角色或角色。

將 AWS Glue 策略附加到用戶帳戶中的角色
  1. 在消費者帳戶 IAM 主控台導覽窗格中,選擇角色

  2. 角色頁面上,尋找您要連接政策的角色。

  3. 選擇新增許可,然後選擇連接政策

  4. 尋找您剛建立的政策。

  5. 選取政策的核取方塊,然後選擇新增許可

  6. 重複這些步驟,將政策新增至您要使用的其他角色。

3. 設定工作階段並建立查詢

在 Athena Spark 的請求者帳戶中,使用指定的角色,藉由建立筆記本編輯目前工作階段來建立工作階段,以測試存取。設定工作階段屬性時,請指定下列其中一個:

  • Glue 目錄分隔符號 – 使用這種方法,您可以在查詢中包含擁有者帳戶 ID。如果您要使用工作階段來查詢不同擁有者的資料目錄,請使用此方法。

  • Glue 目錄 ID – 使用這種方法,您可以直接查詢資料庫。如果您要使用工作階段來僅查詢單一擁有者的資料目錄,則此方法比較方便。

使用 AWS Glue 目錄分隔符號方法

當您編輯工作階段屬性時,請新增下列項目:

{ "spark.hadoop.aws.glue.catalog.separator": "/" }

當您在儲存格中執行查詢時,請使用類似下列範例中的語法。請注意,在 FROM 子句中,資料庫名稱前需要目錄 ID 和分隔符號。

df = spark.sql('SELECT requestip, uri, method, status FROM `999999999999/mydatabase`.cloudfront_logs LIMIT 5') df.show()

使用目 AWS Glue 錄 ID 方法

當您編輯工作階段屬性時,請輸入下列屬性。將 999999999999 取代為擁有者帳戶 ID。

{ "spark.hadoop.hive.metastore.glue.catalogid": "999999999999" }

當您在儲存格中執行查詢時,請使用如下語法。請注意,在 FROM 子句中,資料庫名稱前不需要目錄 ID 和分隔符號。

df = spark.sql('SELECT * FROM mydatabase.cloudfront_logs LIMIT 10') df.show()

其他資源

跨帳戶存取 AWS Glue 資料目錄

使用AWS Lake Formation 開發人員指南中的 Lake Formation 管理跨帳戶權限。 AWS Glue

AWS 規範性指導模式中AWS Glue Data Catalog 使用 Amazon Athena 設定對共用的跨帳戶存取