AWS Glue データカタログへのクロスアカウントアクセス - Amazon Athena

AWS Glue データカタログへのクロスアカウントアクセス

Athena のクロスアカウント AWS Glue カタログ機能を使用して、所有するアカウント以外のアカウントから AWS Glue カタログを登録できます。AWS Glue に必要な IAM アクセス許可を設定して、カタログを Athena DataCatalog リソースとして登録したら、Athena を使用してクロスアカウントクエリを実行できます。Athena コンソールを使用して別のアカウントからカタログを登録する方法については、「別のアカウントからの AWS Glue Data Catalog の登録」を参照してください。   

AWS Glue でのクロスアカウントアクセスの詳細については、「AWS Glue デベロッパーガイド」の「クロスアカウントアクセス許可の付与」を参照してください。

開始する前に

この機能は、既存の Athena DataCatalog リソース API と機能性を使用してクロスアカウントアクセスを有効にするため、開始する前に以下のリソースを読んでおくことが推奨されます。

考慮事項と制約事項

現在、Athena での AWS Glue カタログのクロスアカウントアクセスには、以下の制約事項があります。

  • この機能は、Athena エンジンバージョン 2 以降がサポートされている AWS リージョン のみで使用できます。Athena エンジンバージョンの詳細については、「Athena エンジンのバージョニング」を参照してください。ワークグループのエンジンバージョンをアップグレードする方法について、「Athena エンジンバージョンの変更」を参照してください。

  • 別のアカウントの AWS Glue Data Catalog をアカウントに登録するときは、特定のリージョンにある他のアカウントのデータのみにリンクされているリージョン DataCatalog リソースを作成します。

  • 現在、クロスアカウント AWS Glue カタログを含む CREATE VIEW ステートメントはサポートされていません。

開始方法

以下のシナリオでは、次の例にあるように、「借用者」アカウント (666666666666) が「所有者」アカウント (999999999999) に属する AWS Glue カタログを参照する SELECT クエリを実行する必要があります。

SELECT * FROM ownerCatalog.tpch1000.customer

以下の手順は所有者と借用者の両方の観点からのもので、ステップ 1a および 1b は所有者アカウントの AWS Glue リソースへのアクセス権を借用者アカウントに付与する方法を示しています。この例は、データベース tpch1000 とテーブル customer へのアクセス権を付与します。これらの例の名前は、要件に合わせて変更してください。

ステップ 1a: 借用者に AWS Glue アクセス権を付与する所有者ポリシーを作成する

所有者アカウント (999999999999) から借用者のユーザーまたはロールに AWS Glue アクセス権を付与するには、AWS Glue コンソール、またはAWS Glue PutResourcePolicy API オペレーションを使用できます。以下の手順では、AWS Glue コンソールを使用します。

所有者から借用者アカウントに AWS Glue アクセス権を付与するには
  1. 所有者アカウントから AWS Glue コンソール (https://console.aws.amazon.com/glue/) にサインインします。

  2. ナビゲーションペインで [Settings] (設定) をクリックします。

  3. [Permissions] (許可) ボックスに、以下のようなポリシーを入力します。許可の範囲を拡大する場合は、データベースとテーブルのリソースタイプ両方にワイルドカード文字 (*) を使用できます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::666666666666:user/username", "arn:aws:iam::666666666666:role/rolename" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }

ステップ 1b: 所有者の AWS Glue リソースへのアクセス権を持つ借用者ロールまたはユーザーポリシーを作成する

所有者アカウントの AWS Glue リソースに対するアクセス権を借用者アカウントのロールまたはユーザーに付与するには、AWS Identity and Access Management (IAM) コンソール、または IAM API を使用できます。以下の手順では、IAM コンソールを使用します。

所有者アカウントの AWS Glue リソースに対するアクセス権を借用者のロールまたはユーザーに付与するには
  1. 借用者アカウントから IAM コンソール (https://console.aws.amazon.com/iam/) にサインインします。

  2. IAM ナビゲーションペインで、[Roles] (ロール) または [Users] (ユーザー) を選択します。

  3. 変更するロールまたはユーザーを選択します。

  4. 以下のいずれかを行ってください。

    • ロールを変更する場合は、[Attach policies] (ポリシーのアタッチ) をクリックします。

    • ユーザーを変更する場合は、[Add permissions] (許可の追加) をクリックしてから [Attach existing policies directly ] (既存のポリシーをユーザーに直接アタッチ) を選択します。

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

  6. [JSON] を選択します。

  7. ボックスに以下のポリシーを入力してから、要件に応じて変更します。

    { "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/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }
  8. [ポリシーの確認] を選択します。

  9. [名前] にポリシーの名前を入力します。

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

完了したら、AWS Glue API を使用してテスト用のクロスアカウントコールをいくつか実行し、アクセス許可が期待どおりに設定されているのを確認することが推奨されます。

ステップ 2: 借用者が所有者アカウントに属する AWS Glue Data Catalog を登録する

以下の手順では、Athena コンソールを使用して、所有者のアマゾン ウェブ サービスアカウント内の AWS Glue Data Catalog をデータソースとして設定する方法を説明します。コンソールの代わりに API オペレーションを使用してカタログを登録する方法については、「API を使用した所有者アカウントに属する Athena データカタログの登録」(API を使用した所有者アカウントに属する Athena データカタログの登録) を参照してください。

別のアカウントに属する AWS Glue Data Catalog を登録する
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. コンソールのナビゲーションペインが表示されない場合は、左側の展開メニューをクリックします。

    
                            展開メニューを選択します。
  3. [Data sources] (データソース) を選択します。

  4. コンソールの右上で、[Create data source] (データソースの作成) を選択します。

  5. [Choose a data source] (データソースを選択) ページの [Data sources] (データソース) で、[S3 - AWS Glue Data Catalog] (S3 – AWS Glue Data Catalog データカタログ) を選択してから、[Next] (次へ) を選択します。

  6. [Enter data source details] (データソースの詳細を入力) ページの [AWS Glue Data Catalog] (AWS Glue Data Catalog データカタログ) セクションにある [Choose an AWS Glue Data Catalog] (AWS Glue Data Catalog データカタログを選択) で、[AWS Glue Data Catalog in another account] (別のアカウントの AWS Glue Data Catalog データカタログ) を選択します。

  7. [Data source details] (データソースの詳細) に、以下の情報を入力します。

    • [Data source name] (データソース名) – 他のアカウントにあるデータカタログを参照するために SQL クエリで使用する名前を入力します。

    • Description (説明) – (オプション) 他のアカウントにあるデータカタログの説明を入力します。

    • カタログ ID – データカタログが属する Amazon Web Services アカウントの 12 桁のアカウント ID を入力します。Amazon Web Services アカウント ID はカタログ ID です。

  8. (オプション) [Tags] (タグ) では、データソースと関連付けるキーと値のペアを入力します。タグの詳細については、「Athena リソースへのタグ付け」を参照してください。

  9. [Next] を選択します。

  10. [Review and create] (確認と作成) ページで入力した情報を確認してから、[Create data source] (データソースの作成) を選択します。[Data source details] (データソースの詳細) ページに、登録したデータカタログのデータベースとタグがリストされます。

  11. [Data sources] (データソース) を選択します。登録したデータカタログは、[Data source name] (データソース名) 列にリストされています。

  12. データカタログに関する情報を表示または編集するには、カタログを選択してから、[Actions] (アクション)、[Edit] (編集) の順に選択します。

  13. 新しいデータカタログを削除するには、カタログを選択してから、[Actions] (アクション)、[Delete] (削除する) の順に選択します。

ステップ 3: 借用者がクエリを送信する

以下の例にあるように、借用者が catalog.database.table 構文を使用して、カタログを参照するクエリを送信します。

SELECT * FROM ownerCatalog.tpch1000.customer

借用者は、完全修飾構文を使用する代わりに、カタログを QueryExecutionContext を使用して渡すことによって、それをコンテキスト的に指定することもできます。

その他の Amazon S3 許可

  • 借用者アカウントが Athena クエリを使用して所有者アカウント内のテーブルに新しいデータを書き込む場合、テーブルが所有者のアカウントに存在してはいても、所有者には Amazon S3 内のこのテーブルへのアクセス権が自動的に付与されません。これは、別途設定されている場合を除き、Amazon S3 内のこの情報のオブジェクト所有者が借用者になっているからです。データに対するアクセス権を所有者に付与するには、追加のステップとして、オブジェクトに対する許可を適宜設定します。

  • MSCK REPAIR TABLE などの特定のクロスアカウント DDL オペレーションには、Amazon S3 許可が必要です。例えば、データが所有者アカウントの S3 バケットにある所有者アカウントのテーブルに対して借用者アカウントがクロスアカウント MSCK REPAIR オペレーションを実行している場合、クエリを成功させるには、そのバケットが借用者に許可を付与する必要があります。

バケットのアクセス許可の付与に関する詳細は、「Amazon Simple Storage Service ユーザーガイド」の「ACL の設定」を参照してください。

カタログの動的な使用

前提条件である登録ステップを行うことなく、クロスアカウント AWS Glue カタログに対するテストを素早く実行したいという場合があります。本書に前述されているとおり、必要な IAM 許可と Amazon S3 許可が正しく設定されている場合は、DataCatalog リソースオブジェクトを作成することなくクロスアカウントクエリを動的に実行することができます。

登録せずにカタログを明示的に参照するには、以下の例にある構文を使用します。

SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer

glue:<arn>」形式を使用します。<arn> は、使用する AWS Glue Data Catalog の ARN です。この例では、Athena がこの構文を使用して、アカウント 999999999999 の AWS Glue データカタログのために DataCatalog オブジェクトを別途作成したかのように、それを動的にポイントします。

動的カタログの使用に関する注意事項

動的カタログを使用するときは、以下の点に注意してください。

  • 動的カタログの使用には、通常 Athena データカタログ API オペレーションに使用する IAM 許可が必要です。主な違いは、データカタログリソース名が glue:* 命名規則に従っていることです。

  • カタログ ARN は、クエリが実行されているリージョンと同じリージョンに属している必要があります。

  • DML クエリまたはビューで動的カタログを使用しているときは、それをエスケープされた二重引用符 (\") で囲みます。DDL クエリで動的カタログを使用しているときは、それをバックティック文字 (`) で囲みます。

API を使用した所有者アカウントに属する Athena データカタログの登録

ステップ 2 の説明に従って Athena コンソールを使用する代わりに、API オペレーションを使用して所有者アカウントに属するデータカタログを登録することができます。

Athena DataCatalog リソースの作成者には、Athena CreateDataCatalog API オペレーションを実行するための許可が必要です。要件によっては、追加の API オペレーションへのアクセス権が必要になる場合もあります。詳細については、「データカタログポリシーの例」を参照してください。

以下の CreateDataCatalog リクエストボディは、クロスアカウントアクセス用に AWS Glue カタログを登録します。

# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }

以下のサンプルコードは、Java クライアントを使用して DataCatalog オブジェクトを作成します。

# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);

これらのステップの後、借用者が ListDataCatalogs API オペレーションを呼び出すと、ownerCatalog が表示されます。