AWS Glue と Lake Formation の両方を使用したクロスアカウント許可の管理 - AWS Lake Formation

AWS Glue と Lake Formation の両方を使用したクロスアカウント許可の管理

AWS Glue または AWS Lake Formation を使用することで、Data Catalog リソースと基盤となるデータに対するクロスアカウントアクセス権を付与することが可能です。

AWS Glue では、データカタログリソースポリシーを作成または更新することでクロスアカウント許可を付与します。Lake Formation では、Lake Formation の GRANT/REVOKE 許可モデルと、Grant Permissions API 操作を使用することによって、クロスアカウント許可を付与します。

ヒント

データレイクをセキュア化するには、Lake Formation 許可のみに頼ることをお勧めします。

Lake Formation のクロスアカウント付与は、Lake Formation コンソールまたは AWS Resource Access Manager (AWS RAM) コンソールを使用して確認できます。ただし、これらのコンソールページには、AWS Glue Data Catalog リソースポリシーによって付与されたクロスアカウント許可が表示されません。同様に、AWS Glue コンソールの [Settings] (設定) ページを使用して Data Catalog リソースポリシー内のクロスアカウント許可を表示することはできますが、そのページに Lake Formation を使用して付与されたクロスアカウント許可は表示されません。

クロスアカウント許可を表示および管理するときに付与を見落とさないようにするため、Lake Formation と AWS Glue では、以下のアクションを実行して、Lake Formation と AWS Glue の両方によるクロスアカウント付与を認識しており、それらを許可していることを示す必要があります。

AWS Glue Data Catalog リソースポリシーを使用してクロスアカウント許可を付与する場合

アカウント (付与者アカウントまたはプロデューサーアカウント) が、AWS RAM を使用してリソースを共有するクロスアカウント付与を行っていない場合は、データカタログリソースポリシーを通常どおり AWS Glue に保存できます。ただし、AWS RAM リソース共有がかかわる付与がすでに行われている場合は、リソースポリシーの保存が成功するように、以下のいずれかを実行する必要があります。

  • AWS Glue コンソールの [Settings] (設定) ページでリソースポリシーを保存するときは、ポリシー内の許可が Lake Formation コンソールを使用して付与された許可に追加されることを示す警告が、コンソールに表示されます。[Proceed] (続行) を選択してポリシーを保存する必要があります。

  • glue:PutResourcePolicy API オペレーションを使用してリソースポリシーを保存するときは、EnableHybrid フィールドを「TRUE」(型 = 文字列) に設定する必要があります。以下のコードサンプルは、Python でこれを実行する方法を示しています。

    import boto3 import json REGION = 'us-east-2' PRODUCER_ACCOUNT_ID = '123456789012' CONSUMER_ACCOUNT_IDs = ['111122223333'] glue = glue_client = boto3.client('glue') policy = { "Version": "2012-10-17", "Statement": [ { "Sid": "Cataloguers", "Effect": "Allow", "Action": [ "glue:*" ], "Principal": { "AWS": CONSUMER_ACCOUNT_IDs }, "Resource": [ f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:catalog", f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:database/*", f"arn:aws:glue:{REGION}:{PRODUCER_ACCOUNT_ID}:table/*/*" ] } ] } policy = json.dumps(policy) glue.put_resource_policy(PolicyInJson=policy, EnableHybrid='TRUE')

    詳細については、「AWS Glue デベロッパーガイド」の「PutResourcePolicy アクション (Python: put_resource_policy)」を参照してください。

Lake Formation の名前付きリソース方式を使用してクロスアカウント許可を付与する場合

アカウント (プロデューサーアカウント) にデータカタログリソースポリシーがない場合、Lake Formation クロスアカウント付与は通常どおりに実行されます。ただし、Data Catalog リソースポリシーが存在する場合は、以下のステートメントをポリシーに追加して、クロスアカウント付与が名前付きリソース方式で行われた場合でもそれらが成功することを許可する必要があります。<region> は有効なリージョン名に置き換え、<account-id> は AWS アカウント ID (プロデューサーアカウントの ID) に置き換えてください。

{ "Effect": "Allow", "Action": [ "glue:ShareResource" ], "Principal": {"Service": [ "ram.amazonaws.com" ]}, "Resource": [ "arn:aws:glue:<region>:<account-id>:table/*/*", "arn:aws:glue:<region>:<account-id>:database/*", "arn:aws:glue:<region>:<account-id>:catalog" ] }

この追加のステートメントがない場合、Lake Formation 付与は成功しますが、AWS RAM でブロックされるため、受領者アカウントは付与されたリソースにアクセスできません。

重要

クロスアカウント付与を実行するために Lake Formation のタグベースのアクセスコントロール (LF-TBAC) 方式も使用している場合、少なくとも「前提条件」で指定されている許可がある Data Catalog リソースポリシーが必要です。

以下も参照してください。