Athena for Spark でのクロスアカウント AWS Glue アクセスの設定 - Amazon Athena

Athena for 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. https://console.aws.amazon.com/glue/ で AWS 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 Data Catalog にアクセスするための AWS Glue ポリシーを作成するには
  1. コンシューマーアカウントを使用して、AWS Management Console にログインします。

  2. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  3. ナビゲーションペインの [アクセス管理] を展開し、[ポリシー] を選択します。

  4. [Create policy] を選択します。

  5. [アクセス許可の指定] ページで、[JSON] を選択します。

  6. ポリシーエディターで、所有者アカウントのデータカタログに対する AWS Glue アクションを許可する次のような JSON ステートメントを入力します。

    { "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 アプローチの使用

セッションプロパティを編集するときは、次のプロパティを入力します。所有者アカウント ID は 999999999999 に置き換えてください。

{ "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 デベロッパーガイドのAWS Glue と Lake Formation の両方を使用したクロスアカウント許可の管理」を参照してください。

AWS 規範的ガイダンス パターンのAmazon Athena を使用して、共有 AWS Glue Data Catalog へのクロスアカウント アクセスを設定します。