スキップしてコンテンツを表示

AWS Lake Formation を使用して AWS Glue データカタログのデータベースとテーブルをクロスアカウントで共有する方法を教えてください。

所要時間3分
0

AWS Lake Formation を使用して、AWS Glue データカタログのデータベースとテーブルをクロスアカウントで共有したいです。

解決策

Lake Formation のクロスアカウント機能を使用すると、データレイクとの間でデータを書き込んだり、共有したりするためのアクセス許可を他の AWS アカウントに付与できます。リソースは、タグベースのアクセス制御または名前付きリソースのいずれかで共有できます。この記事では、名前付きリソースを使用する方法で、データカタログリソースへのクロスアカウントアクセスを許可することに焦点を当てています。

前提条件が満たされていることを確認する

データカタログのリソースを別のアカウントと共有したり、別のアカウントから共有されているリソースにアクセスしたりする前に、次の前提条件に留意してください。

Lake Formation のアクセス許可を取り消す

データカタログリソースの IAMAllowedPrincipals グループから、Lake Formation のアクセス許可をすべて取り消します。

新しいテーブルが Super アクセス許可を持つことを防ぐ

共有する可能性のあるテーブルを含むデータカタログのデータベースにおいて、新しいテーブルが取得する IAMAllowedPrincipals へのデフォルトのアクセス許可が Super になることを防ぎます。

  1. Lake Formation コンソールを開きます。
  2. ナビゲーションペインの [データカタログ][データベース] を選択します。
  3. 更新するデータベースを選択します。
  4. [アクション] を選択してから、**[編集]**を選択します。
  5. [新しく作成されたテーブルのデフォルトアクセス許可][このデータベースの新しいテーブルには IAM アクセス制御のみを使用する] をオフにします。
  6. [保存] を選択します。

詳細については、「Super」を参照してください。

クロスアカウントアクセスに必要なアクセス許可を追加する

アカウント内で、AWS Glue データカタログのリソースポリシーが既に有効になっている場合は、そのポリシーを削除するか、クロスアカウントを付与するために必要な新しいアクセス許可をポリシーに追加します。次のリソースポリシー例では、アカウント 1111222233334444 から 5555666677778888 へのクロスアカウント AWS Glue アクセスを付与しています。

詳細については、「クロスアカウントアクセスを許可する」を参照してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ram.amazonaws.com"
      },
      "Action": "glue:ShareResource",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::5555666677778888:root"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    }
  ]
}

組織との共有を有効にする

データカタログのリソースが組織間で共有されている場合は、AWS RAM コンソールを使用して AWS Organizations との共有を有効にします。このオプションを有効にする AWS Identity and Access Management (IAM) ユーザーまたはロールには、IAM アクセス許可 ram:EnableSharingWithAwsOrganization が必要です。

詳細については、「クロスアカウントアクセスの前提条件」を参照してください。

必要な IAM アクセス許可を付与する

ソースアカウント 名前付きリソースを使用する方法でクロスアカウントアクセス許可を付与するには、AWS Glue と AWS Resource Access Manager (AWS RAM) に対する必須の IAM アクセス許可が必要です。これらのアクセス許可を付与する AWS マネージドポリシーである AWSLakeFormationCrossAccountManager を選択するか、このポリシーに基づく新しいポリシーを作成してください。

ターゲットアカウント ターゲットアカウントのデータレイク管理者には、次のポリシーも必要です。このポリシーにより、管理者は AWS RAM によるリソース共有の招待を受け入れ、組織とのリソース共有を有効にすることができます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ram:AcceptResourceShareInvitation",
        "ram:RejectResourceShareInvitation",
        "ec2:DescribeAvailabilityZones",
        "ram:EnableSharingWithAwsOrganization"
      ],
      "Resource": "*"
    }
  ]
}

注: AWS RAM のリソース共有への招待を受信する IAM ユーザーまたはロールには、glue:PutResourcePolicy に対する必須の IAM アクセス許可が必要です。

データベースとそのテーブルをターゲットアカウントと共有する

データベースおよび、そのデータベース内のすべてのテーブルを組織に属していないターゲットアカウントと共有するには、次の操作を行います。

注: ソースアカウントのデータベース内のすべてのテーブルを共有する場合、ソースアカウントで作成された新しいテーブルは自動的にターゲットアカウントと共有されます。

ソースアカウントで、次の操作を行います。

  1. Lake Formation コンソールを開き、データレイク管理者でサインインします。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 共有するデータセットを選択します。
  4. [アクション] を選択してから、[付与] を選択します。
  5. [外部アカウント] を選択します。
  6. [AWS アカウントまたは AWS 組織の ID] にターゲットアカウントのアカウント ID を入力します。
  7. [テーブル][すべてのテーブル] が選択されていることを確認します。
  8. [テーブルのアクセス許可][付与可能なアクセス許可] で、付与するアクセス許可を選択します。
  9. **[付与]**を選択します。

ターゲットアカウントで、次の操作を行います。

  1. AWS RAMコンソールを開きます。
  2. ナビゲーションペインの [自分と共有][リソース共有] を選択します。
  3. アクセスが許可されているリソース共有のリストをレビューします。
  4. ソースアカウントから共有されたリソースへの招待を受け入れるには、リソース共有 ID を選択し、[リソース共有を承認] を選択します。
  5. Lake Formation コンソールを開きます。
  6. ナビゲーションペインで [データベース] を選択します。
    リストで共有データベースを確認することができます。このデータベースの所有者アカウント ID には、ソースアカウントのアカウント ID が表示されます。
  7. 共有データベースを選択し、[アクション] を選択します。
  8. [リソースリンクの作成] を選択します。
  9. [リソースリンクの作成] ページで、次の操作を行います。
    [リソースリンク名] にリソースリンクの名前を入力します。
    [共有データベース] では共有データベースの名前を選択する必要があります。
    [共有データベースの所有者 ID] にソースアカウントのアカウント ID を入力します。
  10. [作成] を選択します。
    リソースリンクが作成されます。

リソースリンクは、メタデータデータベースとテーブルへのリンクであるデータカタログオブジェクトで、多くの場合、他の AWS アカウントの共有データベースとテーブルへのリンクです。これらのリンクは、データレイク内のデータへのクロスアカウントアクセスを行ううえで便利です。リソースリンクの作成後は、データレイク管理者のアクセス許可を使用して共有データベース内のテーブルにクエリを実行できます。

IAM ユーザー/プリンシパルに共有データベースへのアクセス許可を付与するには、リソースリンクと共有データベースに必要なアクセス許可を付与します。こうすることで、IAM ユーザー/プリンシパルは Lake Formation コンソールで共有データベースとリソースリンクを閲覧できます。IAM ユーザーは、Amazon Athena コンソールまたは Amazon Redshift Spectrum でデータベースとリソースのリンクを閲覧することもできます。

IAM ユーザーにリソースリンクへのアクセス許可を付与するには、次の手順を実行します。

  1. Lake Formation コンソールを開き、データレイク管理者でサインインします。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 作成したリソースリンクを選択します。
  4. [アクション] を選択してから、[付与] を選択します。
  5. [プリンシパル][IAM ユーザーとロール] を選択します。
  6. [IAM ユーザーとロール] でアクセス許可を付与する必要がある IAM ユーザーまたはプリンシパルを選択します。
  7. [リソースリンクのアクセス許可]Describe を選択します。
  8. **[付与]**を選択します。

IAM ユーザーに共有データベースへのアクセス許可を付与するには、次の手順を実行します。

  1. Lake Formation コンソールを開き、データレイク管理者でサインインします。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 共有データベースを選択します。
  4. [アクション] を選択してから、[付与] を選択します。
  5. [プリンシパル] で [IAM ユーザーとロール] を選択します。
  6. [IAM ユーザーとロール] でアクセス許可を付与する必要がある IAM ユーザーまたはプリンシパルを選択します。
  7. [データベースのアクセス許可]Describe を選択します。
    注: このステップにより、共有データベースを閲覧するための最低限のアクセス許可がユーザーに付与されます。
  8. **[付与]**を選択します。

データベース内のすべてのテーブルか特定のテーブルへのアクセスを許可するには、[すべてのテーブル] オプションを選択します。

  1. リソースのリンクを選択します。
  2. [アクション] を選択してから、[付与] を選択します。
  3. [IAM ユーザーとロール] を選択します。
  4. [IAM ユーザーとロール] でアクセス許可を付与する必要があるユーザーまたはプリンシパルを選択します。
  5. LF タグまたはカタログリソースで、次の操作を行います。
    データベース内のすべてのテーブルへのアクセスを許可するには、[テーブル - オプション][すべてのテーブル] を選択します。
    データベース内の特定のテーブルのみへのアクセスを許可するには、[テーブル - オプション] で該当するテーブルを選択します。
  6. [テーブルのアクセス許可][付与可能なアクセス許可]SelectDescribe を選択します。
  7. **[付与]**を選択します。

注: ソースアカウントで [付与可能なアクセス許可] として選択したアクセス許可のみを付与できます。

必要なアクセス許可を付与した後は、ターゲットアカウントから Athena のテーブルへのクエリを正常に実行できます。

ターゲットアカウントとテーブルのみを共有する

個々のテーブルを対象アカウントと共有するには、前のセクションの手順を実行し、次の変更を行います。

ソースアカウント

Lake Formation コンソールからターゲットアカウントへのアクセスを許可するには、データベースではなく、個々のテーブルを選択します。

ターゲットアカウント

  • Lake Formation コンソールで共有テーブルにアクセスするために、AWS RAM コンソールでリソース共有を承認します。
  • 共有テーブル用のリソースリンクを作成します。リソースリンクの作成後は、データレイク管理者のアクセス許可を使用して共有テーブルをクエリできます。
  • IAM ユーザーまたはプリンシパルに共有テーブルへのアクセス許可を付与するには、リソースリンクに対するアクセス許可を付与する必要があります。

その他の考慮事項をレビューする

  • テーブルにアクセス許可を付与するときに、アクセスをテーブル内の特定の列のみに制限することができます。制限した場合、ターゲットアカウントは共有テーブル内の該当する列のみを閲覧できます。
  • ターゲットアカウントの IAM ユーザーまたはプリンシパルは、ソースアカウント内の Amazon Simple Storage Service (Amazon S3) パスにアクセスできる必要があります。
  • ソースアカウントから以前に付与されたアクセス許可を取り消すと、ターゲットアカウントは共有データベースまたはテーブルにアクセスできなくなります。ただし、ターゲットアカウントで作成したリソースリンクは自動的に削除されません。リソースリンクは手動で削除する必要があります。
  • データベースまたはテーブルを削除しても、AWS RAM ではリソース共有は自動的に削除されません。したがって、共有データベースまたはテーブルを削除する前に、クロスアカウントアクセス許可を手動で取り消す必要があります。

関連情報

共有データカタログテーブルとデータベースを閲覧する

リソースリンクを作成する

データロケーションへのアクセス許可を付与する (外部アカウント)

データカタログリソースに対するアクセス許可を付与、解除する

AWS Lake Formation のクロスアカウント機能のしくみ