

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Lake Formation のタグベースのアクセスコントロールと名前付きリソースを使用したデータレイクの共有
<a name="share-dl-tbac-tutorial"></a>

このチュートリアルでは、データベース全体をコピーすることなく、データレイク内に保存されたデータを複数の企業、組織、またはビジネスユニットと安全に共有 AWS Lake Formation するように を設定する方法を示します。Lake Formation クロスアカウントアクセスコントロールを使用してデータベースとテーブルを別の と共有するには AWS アカウント 、次の 2 つのオプションがあります。
+ **Lake Formation のタグベースのアクセスコントロール (推奨)**

  Lake Formation のタグベースのアクセスコントロールは、属性に基づいて許可を定義する認可戦略です。これらの属性は、Lake Formation で LF タグ**と呼ばれています。詳細については、「[Lake Formation のタグベースのアクセスコントロールを使用したデータレイクの管理](managing-dl-tutorial.md)」を参照してください。
+ **Lake Formation の名前付きリソース**

  Lake Formation の名前付きリソース方式は、リソースの許可を定義する認可戦略です。リソースには、データベース、テーブル、列が含まれます。データレイク管理者は、Lake Formation のリソースに対する許可を割り当てたり、取り消したりできます。詳細については、「[Lake Formation でのクロスアカウントデータ共有](cross-account-permissions.md)」を参照してください。

  データレイク管理者がリソースごとに許可を明示的に付与することを希望する場合は、名前付きリソースを使用することをお勧めします。名前付きリソースメソッドを使用して Data Catalog リソースに対する Lake Formation アクセス許可を外部アカウントに付与すると、Lake Formation は AWS Resource Access Manager (AWS RAM) を使用してリソースを共有します。

**Topics**
+ [対象者](#tut-share-tbac-roles)
+ [プロデューサーアカウントで Lake Formation の Data Catalog 設定を構成する](#tut-share-tbac-LF-settings)
+ [ステップ 1: AWS CloudFormation テンプレートを使用してリソースをプロビジョニングする](#tut-tbac-share-provision-resources)
+ [ステップ 2: Lake Formation クロスアカウント共有の前提条件](#cross-account-share-prerequisistes)
+ [ステップ 3: タグベースのアクセスコントロール方式を使用してクロスアカウント共有を実装する](#tut-share-tbac-method)
+ [ステップ 4: 名前付きリソース方式を実装する](#tut-named-resource-method)
+ [ステップ 5: AWS リソースをクリーンアップする](#share-tbac-clean-up-db)

## 対象者
<a name="tut-share-tbac-roles"></a>



このチュートリアルは、データスチュワード、データエンジニア、データアナリストを対象としています。Lake Formation から Data Catalog テーブルを共有 AWS Glue し、Lake Formation でアクセス許可を管理する場合、生成アカウント内のデータスチュワードは、サポートする関数に基づいて機能的な所有権を持ち、さまざまなコンシューマー、外部組織、およびアカウントにアクセス権を付与できます。次の表は、このチュートリアルで使用するロールのリストです。


| ロール  | 説明 | 
| --- | --- | 
| DataLakeAdminProducer | データレイク管理者 IAM ユーザーには、以下のアクセス権があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/share-dl-tbac-tutorial.html) | 
| DataLakeAdminConsumer |  データレイク管理者 IAM ユーザーには、以下のアクセス権があります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/share-dl-tbac-tutorial.html)  | 
| DataAnalyst | DataAnalyst ユーザーには、以下のアクセス権があります。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/share-dl-tbac-tutorial.html) | 

## プロデューサーアカウントで Lake Formation の Data Catalog 設定を構成する
<a name="tut-share-tbac-LF-settings"></a>

このチュートリアルを開始する前に、適切なアクセス許可を持つ管理ユーザーとしてサインインするために AWS アカウント 使用できる が必要です。詳細については、「[初期設定 AWS タスクを完了する](getting-started-setup.md#initial-aws-signup)」を参照してください。

このチュートリアルでは、ユーザーが IAM に精通していることを前提としています。IAM については、「[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」を参照してください。

**プロデューサーアカウントで Lake Formation の Data Catalog 設定を構成する**
**注記**  
 このチュートリアルでは、ソーステーブルを持つアカウントをプロデューサーアカウントと呼び、ソーステーブルにアクセスする必要があるアカウントをコンシューマーアカウントと呼びます。

Lake Formation には、独自の許可管理モデルがあります。IAM アクセス許可モデルとの下位互換性を維持するために、アクセス`Super`許可はデフォルトで既存のすべての AWS Glue Data Catalog リソース`IAMAllowedPrincipals`の グループに付与されます。また、新しい Data Catalog リソースに対しては、**[Use only IAM access control settings]** (IAM アクセスコントロール設定のみを使用する) が有効になります。このチュートリアルでは、きめ細かなアクセスコントロールには Lake Formation の許可を使用し、きめの粗いアクセスコントロールには IAM ポリシーを使用します。詳細については、「[細粒度のアクセスコントロールのための方式](access-control-fine-grained.md)」を参照してください。したがって、クイックセットアップに AWS CloudFormation テンプレートを使用する前に、プロデューサーアカウントの Lake Formation Data Catalog 設定を変更する必要があります。
**重要**  
この設定は、新しく作成したすべてのデータベースとテーブルに影響するため、このチュートリアルは非運用アカウントまたは新しいアカウントで実行することを強くお勧めします。また、共有アカウント (自社の開発アカウントなど) を使用している場合は、他のリソースに影響を与えないことを確認してください。デフォルトのセキュリティ設定を維持したい場合は、他のアカウントとリソースを共有するときに追加のステップを実行し、データベースやテーブルに対するデフォルトの **Super** 許可を `IAMAllowedPrincipals` から取り消す必要があります。詳細については、このチュートリアルの後半で説明します。

プロデューサーアカウントで Lake Formation の Data Catalog 設定を構成するには、以下のステップを実行します。

1. プロデューサーアカウント AWS マネジメントコンソール を使用して、管理者ユーザーまたは Lake Formation `PutDataLakeSettings` API アクセス許可を持つユーザーとして にサインインします。

1. Lake Formation コンソールのナビゲーションペインで、**[Data Catalog]** の **[Settings]** (設定) を選択します。

1. **[Use only IAM access control for new databases]** (新しいデータベースには IAM アクセスコントロールのみを使用する) と **[Use only IAM access control for new tables in new databases]** (新しいデータベース内の新しいテーブルには IAM アクセスコントロールのみを使用する) を選択解除します。

   **[Save]** (保存) を選択します。  
![\[Data catalog settings interface for AWS Lake Formation with permission options.\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/tbac-tut-settings.jpg)

   さらに、**[Administrative roles and tasks]** (管理ロールおよびタスク) の **[Database creators]** (データベース作成者) で、`IAMAllowedPrincipals` への `CREATE_DATABASE` 許可を削除できます。この後にのみ、Lake Formation の許可を使用して誰が新しいデータベースを作成できるかを管理できます。

## ステップ 1: AWS CloudFormation テンプレートを使用してリソースをプロビジョニングする
<a name="tut-tbac-share-provision-resources"></a>

プロデューサーアカウント用の CloudFormation テンプレートでは、以下のリソースを生成します。
+ データレイクとなる Amazon S3 バケット。
+ Lambda 関数 (Lambda-backed CloudFormation カスタムリソース用）。この関数を使用して、パブリック Amazon S3 バケットからユーザーの Amazon S3 バケットにサンプルデータファイルをコピーします。
+ IAM ユーザーおよびポリシー: DataLakeAdminProducer。
+ Lake Formation の適切な設定および許可 (以下を含む):
  + プロデューサーアカウントで Lake Formation データレイク管理者を定義する
  + Amazon S3 バケットを Lake Formation データレイクのロケーションとして登録する (プロデューサーアカウント)
+  AWS Glue Data Catalog データベース、テーブル、パーティション。間でリソースを共有するには 2 つのオプションがあるため AWS アカウント、このテンプレートはデータベースとテーブルの 2 つの別々のセットを作成します。

コンシューマーアカウントの CloudFormation テンプレートは、次のリソースを生成します。
+ IAM ユーザーおよびポリシー:
  + DataLakeAdminConsumer
  + DataAnalyst
+  AWS Glue Data Catalog データベース。このデータベースを使用して、共有リソースへのリソースリンクを作成します。

**プロデューサーアカウントでリソースを作成する**

1. 米国東部 (バージニア北部) リージョンの [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で AWS CloudFormation コンソールにサインインします。

1. [[Launch Stack]](https://aws-bigdata-blog.s3.amazonaws.com/artifacts/Securely_sharing_data_across_AWS_accounts_using_AWS_Lake_Formation/lakeformation_tutorial_cross_account_producer.yaml) (スタックの起動) を選択します。

1.  **[Next]** (次へ) を選択します。

1. **[Stack name]** (スタック名) にスタック名 (`stack-producer` など) を入力します。

1.  **[User Configuration]** (ユーザー設定) セクションで、[`ProducerDatalakeAdminUserName`] と [`ProducerDatalakeAdminUserPassword`] にユーザーネームとパスワードを入力します。

1. **[DataLakeBucketName]** に、データレイクバケットの名前を入力します。この名前はグローバルに一意である必要があります。

1. **[DatabaseName]** と **[TableName]** は、デフォルト値のままにします。

1. **[Next]** (次へ) を選択します。

1. 次のページで、**[Next]** (次へ) を選択します。

1.  最終ページの詳細を確認し、 **が IAM リソースを作成する AWS CloudFormation 可能性があることを確認します**。

1.  **[作成]** を選択します。

   スタックの作成には、最大 1 分かかる場合があります。

**コンシューマーアカウントでリソースを作成する**

1. 米国東部 (バージニア北部) リージョンの [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) で AWS CloudFormation コンソールにサインインします。

1. [[Launch Stack]](https://aws-bigdata-blog.s3.amazonaws.com/artifacts/Securely_sharing_data_across_AWS_accounts_using_AWS_Lake_Formation/lakeformation_tutorial_cross_account_consumer.yaml) (スタックの起動) を選択します。

1.  **[Next]** (次へ) を選択します。

1. **[Stack name]** (スタック名) にスタック名 (`stack-consumer` など) を入力します。

1.  **[User Configuration]** (ユーザー設定) セクションで、[`ConsumerDatalakeAdminUserName`] と [`ConsumerDatalakeAdminUserPassword`] にユーザーネームとパスワードを入力します。

1. [`DataAnalystUserName`] と [`DataAnalystUserPassword`] に、データアナリスト IAM ユーザーを指定するユーザーネームとパスワードを入力します。

1. **[DataLakeBucketName]** に、データレイクバケットの名前を入力します。この名前はグローバルに一意である必要があります。

1. **[DatabaseName]** は、デフォルト値のままにします。

1. [`AthenaQueryResultS3BucketName`] に、Amazon Athena のクエリ結果を保存する Amazon S3 バケットの名前を入力します。バケットがない場合は、[Amazon S3 バケットを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)します。

1. **[Next]** (次へ) を選択します。

1. 次のページで、**[Next]** (次へ) を選択します。

1.  最終ページの詳細を確認し、**IAM リソースを作成する AWS CloudFormation 可能性があることを確認します**。

1.  **[作成]** を選択します。

   スタックの作成には、最大 1 分かかる場合があります。

**注記**  
チュートリアルを完了したら、 でスタックを削除 CloudFormation して、料金が発生しないようにします。リソースが正常に削除されたことをスタックのイベントステータスで確認します。

## ステップ 2: Lake Formation クロスアカウント共有の前提条件
<a name="cross-account-share-prerequisistes"></a>

Lake Formation でリソースを共有する前に、タグベースのアクセスコントロール方式と名前付きリソース方式の両方に関する前提条件があります。

**タグベースのアクセスコントロールのクロスアカウントデータ共有に関する前提条件を完了する**
+ クロスアカウントデータ共有要件の詳細については、「クロスアカウントデータ共有」という章の「[前提条件](cross-account-prereqs.md)」セクションを参照してください。

  データカタログリソースを**クロスアカウントバージョン設定**のバージョン 3 以降と共有するには、付与者は`AWSLakeFormationCrossAccountManager`アカウントの AWS 管理ポリシーで定義された IAM アクセス許可を持っている必要があります。

  **[クロスアカウントバージョン設定]** のバージョン 1 またはバージョン 2 を使用している場合は、タグベースのアクセスコントロール方式を使用してリソースへのクロスアカウントアクセス権を付与する前に、プロデューザーアカウントで以下の `JSON` 許可オブジェクトを Data Catalog リソースポリシーに追加する必要があります。これにより、`glue:EvaluatedByLakeFormationTags` が true であると、Data Catalog へのアクセス許可がコンシューマーアカウントに付与されます。また、この条件は、Lake Formation 許可タグを使用してリソースに対するアクセスをコンシューマーアカウントに許可した場合にも true になります。このポリシーは、アクセス許可を付与 AWS アカウント するすべての に必要です。

  次のポリシーは、`Statement` 要素内に配置する必要があります。IAM ポリシーの詳細については、次のセクションで説明します。

  ```
  {
      "Effect": "Allow",
      "Action": [
          "glue:*"
      ],
      "Principal": {
          "AWS": [
              "consumer-account-id"
          ]
      },
      "Resource": [
          "arn:aws:glue:region:account-id:table/*",
          "arn:aws:glue:region:account-id:database/*",
          "arn:aws:glue:region:account-id:catalog"
      ],
      "Condition": {
          "Bool": {
              "glue:EvaluatedByLakeFormationTags": true
          }
      }
  }
  ```

**名前付きリソース方式のクロスアカウント共有に関する前提条件を完了する**

1. アカウント内に Data Catalog リソースポリシーが存在しない場合、Lake Formation クロスアカウント付与を行うと、付与は通常どおり続行されます。一方、Data Catalog リソースポリシーが存在し、クロスアカウント付与に名前付きリソース方式を使用する場合、この付与を成功させるには、次のステートメントをポリシーに追加する必要があります。名前付きリソース方式またはタグベースのアクセスコントロール方式のいずれかのみを使用する場合は、このステップをスキップできます。このチュートリアルでは、両方の方式を評価するため、次のポリシーを追加する必要があります。

   次のポリシーは、`Statement` 要素内に配置する必要があります。IAM ポリシーの詳細については、次のセクションで説明します。

   ```
   {
             "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"
             ]
   }
   ```

1. 次に、 AWS Command Line Interface () を使用して AWS Glue Data Catalog リソースポリシーを追加しますAWS CLI。

   タグベースのアクセスコントロール方式と名前付きリソース方式の両方を使用してクロスアカウント許可を付与する場合は、上記のポリシーを追加するときに `EnableHybrid` 引数を「true」に設定する必要があります。このオプションはコンソールでは現在サポートされていないため、`glue:PutResourcePolicy` APIと AWS CLIを使用する必要があります。

   まず、ポリシードキュメント (policy.json など) を作成し、上記の 2 つのポリシーを追加します。*consumer-account-id* をグラント AWS アカウント を受け取る の*アカウント ID* に、*region* をアクセス許可を付与するデータベースとテーブルを含むデータカタログのリージョンに、*account-id* をプロデューサー AWS アカウント ID に置き換えます。

   次のコマンドを入力します AWS CLI 。*glue-resource-policy* は、正しい値 (file://policy.json など) に置き換えます。

   ```
   aws glue put-resource-policy --policy-in-json glue-resource-policy --enable-hybrid TRUE
   ```

   詳細については、「[put-resource-policy](https://docs.aws.amazon.com/cli/latest/reference/glue/put-resource-policy.html)」を参照してください。

## ステップ 3: タグベースのアクセスコントロール方式を使用してクロスアカウント共有を実装する
<a name="tut-share-tbac-method"></a>

このセクションでは、以下の大まかなステップについて説明します。

1.  LF タグを定義する

1.  LF タグをターゲットリソースに割り当てる

1. LF タグの許可をコンシューマーアカウントに付与する

1. データの許可をコンシューマーアカウントに付与する

1. (オプション) データベース、テーブル、列に対する許可を `IAMAllowedPrincipals` から取り消す

1. 共有テーブルへのリソースリンクを作成する

1.  LF タグを作成してターゲットデータベースに割り当てる

1.  LF タグのデータ許可をコンシューマーアカウントに付与する

**LF タグを定義する**
**注記**  
プロデューサーアカウントにサインインしている場合は、サインアウトしてから以下のステップを開始してください。

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) でデータレイク管理者としてプロデューサーアカウントにサインインします。 CloudFormation のスタック作成時に指定したプロデューサーアカウント番号、IAM ユーザーネーム (デフォルトは `DatalakeAdminProducer`)、パスワードを使用します。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) のナビゲーションペインで、**[許可]** の **[管理ロールおよびタスク]** を選択します。

1. **[Add LF-Tag]** (LF タグを追加) を選択します。

**LF タグをターゲットリソースに割り当てる**

LF タグをターゲットリソースに割り当て、データの許可を別のアカウントに付与する

データレイク管理者は、タグをリソースにアタッチできます。別のロールを使用する場合は、describe (記述) の許可と attach (アタッチ) の許可を別々のロールに付与する必要があります。

1. ナビゲーションペインの **[Data Catalog]** で、**[Databases]** (データベース) を選択します。

1. ターゲットデータベース `(lakeformation_tutorial_cross_account_database_tbac)` を選択し、**[アクション]** メニューの **[LF タグの編集]** を選択します。

   このチュートリアルでは、データベースに LF タグを割り当てますが、テーブルおよび列に LF タグを割り当てることもできます。

1. **[Assign new LF-Tag]** (新しい LF タグを割り当てる) を選択します。

1. 値が `public` の `Confidentiality` を追加します。

1.  **[Save]** (保存) を選択します。

****LF タグ**の許可をコンシューマーアカウントに付与する**

プロデューサーアカウントで操作を続行し、LF タグへのアクセス許可をコンシューマーアカウントに付与します。

1. ナビゲーションペインで、**[アクセス許可]** の **[LF タグとアクセス許可]** を選択します。

1. **[LF タグ]** を選択し、コンシューマーアカウントと共有する LF タグの**キー**と**値** (**キー**は `Confidentiality`、**値**は `public`) を選択します。

1. **[Grant permissions]** (アクセス許可の付与) を選択します。

1. **[アクセス許可のタイプ]** で、**[LF タグのキーと値のペアのアクセス許可]** を選択します。

1. **[Principals]** (プリンシパル) で、**[External accounts]** (外部アカウント) を選択します。

1. ターゲットの **AWS アカウント ID** を入力します。

   AWS アカウント 同じ組織内の が自動的に表示されます。それ以外の場合は、 AWS アカウント ID を手動で入力する必要があります。

1. **[アクセス許可]** で、**[記述]** を選択します。

   これはコンシューマーアカウントに付与されるアクセス許可です。付与可能な許可は、コンシューマーアカウントが他のプリンシパルに付与できる許可です。

1. **[付与]** を選択します。

   この時点でコンシューマーデータレイク管理者は、コンシューマーアカウントの Lake Formation コンソールで、共有されているポリシータグを確認できます (**[アクセス許可]** の **[LF タグとアクセス許可]** に移動します)。

**データの許可をコンシューマーアカウントに付与する**

ここで、データへのアクセス権をコンシューマーアカウントに付与します。そのためには、LF タグ式を指定し、この式に一致するテーブルまたはデータベースへのアクセス権をコンシューマーアカウントに付与します。

1. ナビゲーションペインで、**[Permissions]** (許可)、**[Data lake permissions]** (データレイクの許可) の順に移動し、**[Grant]** (付与) を選択します。

1. **プリンシパル で**、**外部アカウント**を選択し、ターゲット AWS アカウント ID を入力します。

1. **[LF タグまたはカタログリソース]** で、コンシューマーアカウントと共有されている **[LF タグ]** の **[キー]** および **[値]** (**[キー]** `Confidentiality` および **[値]** `public`) を選択します。

1. **[許可]** で、**[LF タグに一致するリソース (推奨)]** の **[LF タグを追加]** を選択します。

1. コンシューマーアカウントと共有するタグの **キー**および**値** (キー `Confidentiality` および値 `public`) を選択します。

1. **[Database permissions]** (データベースの許可) で、**[Database permissions]** (データベースの許可) の **[Describe]** (記述) を選択して、データベースレベルでアクセス許可を付与します。

1. コンシューマーデータレイク管理者は、コンシューマーアカウントで共有しているポリシータグを、Lake Formation コンソールで確認できるはずです ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で **[許可]**、**[管理ロールおよびタスク]**、**[LF タグ]** の順に移動します)。

1. **[Grantable permissions]** (付与可能な許可) で **[Describe]** (記述) を選択し、コンシューマーアカウントがそのユーザーに対してデータベースレベルの許可を付与できるようにします。

1. **[Table and column permissions]** (テーブルと列の許可) で **[Select]** (選択) を選択し、**[Table permissions]** (テーブルの許可) の **[Describe]** (記述) を選択します。

1. **[Select]** (選択) を選択し、**[Grantable permissions]** (付与可能な許可) で **[Describe]** (記述) を選択します。

1. **[付与]** を選択します。

**(オプション) データベース、テーブル、列に対する許可を `IAMAllowedPrincipals` から取り消す**

このチュートリアルの最初に、Lake Formation の Data Catalog 設定を変更しました。その部分をスキップした場合は、このステップが必要です。Lake Formation の Data Catalog 設定を変更している場合は、このステップをスキップできます。

このステップでは、データベースまたはテーブルに対するデフォルトの **Super** 許可を `IAMAllowedPrincipals` から取り消す必要があります。詳細については、「[ステップ 4: データストアを Lake Formation 許可モデルに切り替える](upgrade-glue-lake-formation.md#upgrade-glue-lake-formation-step4)」を参照してください。

`IAMAllowedPrincipals` の許可を取り消す前に、Lake Formation で既存の IAM プリンシパルに必要な許可を付与していることを確認します。これには、以下の 3 つのステップを使用します。

1. Lake Formation の `GetDataAccess` アクションを使用して IAM 許可をターゲットの IAM ユーザーまたはロールに追加します (IAM ポリシーを使用)。

1.  ターゲットの IAM ユーザーまたはロールに対して Lake Formation データの許可 (変更、選択など) を付与します。

1. 次に、`IAMAllowedPrincipals` の許可を取り消します。上記のステップに従わない場合、`IAMAllowedPrincipals` の許可を取り消した後では、既存の IAM プリンシパルからターゲットデータベースまたは Data Catalog にアクセスできなくなる可能性があります。

   `IAMAllowedPrincipals` の **Super** 許可の取り消すが必要になるのは、Lake Formation 許可モデルを (IAM ポリシーモデルの代わりに) 適用して、単一のアカウント内または複数のアカウント間でユーザーアクセスを管理する場合です。従来の IAM ポリシーモデルを維持する他のテーブルの場合。`IAMAllowedPrincipals` の許可を取り消す必要はありません。

   この時点で、コンシューマーアカウントのデータレイク管理者は、コンシューマーアカウントで共有しているデータベースとテーブルを Lake Formation コンソールで確認できるはずです ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で **[Data Catalog] (データカタログ)、[databases] (データベース)** の順に移動します)。確認できない場合は、以下が適切に設定されているかどうかをチェックします。

   1. 正しいポリシータグおよび値がターゲットデータベースおよびテーブルに割り当てられている。

   1. 正しいタグの許可およびデータの許可がコンシューマーアカウントに割り当てられている。

   1. データベースまたはテーブルに対するデフォルトの Super 許可を `IAMAllowedPrincipals` から取り消している。

**共有テーブルへのリソースリンクを作成する**

リソースをアカウント間で共有すると、共有リソースはコンシューマーアカウントの Data Catalog に配置されません。これらをアクセス可能にして、共有テーブルの基になるデータに対して Athena などのサービスでクエリを実行するには、共有テーブルへのリソースリンクを作成する必要があります。リソースリンクは、ローカルまたは共有のデータベースやテーブルへのリンクである Data Catalog オブジェクトです。詳細については、「[リソースリンクの作成](creating-resource-links.md)」を参照してください。リソースリンクを作成することで、以下のことができます。
+ Data Catalog のリソース命名ポリシーに適合した別の名前をデータベースまたはテーブルに割り当てる。
+ Athena や Redshift Spectrum などのサービスを使用して、共有データベースやテーブルに対してクエリを実行する。

リソースリンクを作成するには、以下のステップを実行します。

1. コンシューマーアカウントにサインインしている場合は、サインアウトします。

1. コンシューマーアカウントのデータレイク管理者としてサインインします。 CloudFormation スタックの作成時に指定したコンシューマーアカウント ID、IAM ユーザー名 (デフォルト DatalakeAdminConsumer)、パスワードを使用します。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) のナビゲーションペインで、**[Data Catalog]、[Databases]** (データベース)の順に移動し、共有データベース `lakeformation_tutorial_cross_account_database_tbac` を選択します。

   データベースが表示されない場合は、上記の手順に戻り、すべてが正しく設定されているかどうかを確認します。

1. **[View details]** (詳細の表示) を選択します。

1. 共有テーブル `amazon_reviews_table_tbac` を選択します。

1. **[Actions]** (アクション) メニューで、**[Create resource link]** (リソースリンクの作成) を選択します。

1. **[Resource link name]** (リソースリンク名) に名前 (このチュートリアルでは `amazon_reviews_table_tbac_resource_link`) を入力します。

1. **データベース**で、リソースリンクが作成されるデータベースを選択します (この投稿では、n CloudFormationスタックによってデータベース が作成されました`lakeformation_tutorial_cross_account_database_consumer`)。

1. **[作成]** を選択します。

   リソースリンクが **[Data Catalog]** の **[Tables]** (テーブル) の下に表示されます。

**LF タグを作成してターゲットデータベースに割り当てる**

Lake Formation のタグは、リソースと同じ Data Catalog 内に存在します。つまり、プロデューサーアカウントで作成したタグは、コンシューマーアカウントでリソースリンクへのアクセスを許可しても利用できません。コンシューマーアカウントでリソースリンクを共有する場合、LF タグベースのアクセスコントロールを使用するには、コンシューマアカウントで別個の LF タグのセットを作成する必要があります。

1. コンシューマアカウントで LF タグを定義します。このチュートリアルでは、キーとして `Division` を使用し、値として `sales`、`marketing`、`analyst` を使用します。

1. LF タグのキー `Division` および値 `analyst` を、リソースリンクを作成したデータベース `lakeformation_tutorial_cross_account_database_consumer` に割り当てます。

**LF タグのデータ許可をコンシューマーに付与する**

最後のステップとして、LF タグのデータ許可をコンシューマーに付与します。

1. ナビゲーションペインで、**[Permissions]** (許可)、**[Data lake permissions]** (データレイクの許可) の順に移動し、**[Grant]**(付与) を選択します。

1. **[Principals]** (プリンシパル) で、**[IAM users and roles]** (IAM ユーザーおよびロール)を選択し、ユーザー `DataAnalyst` を選択します。

1.  **[LF タグまたはカタログリソース]** で、**[LF タグに一致するリソース]** (推奨) を選択します。

1. **キー**として Divison、**値**として analyst を選択します。

1. **[Database permissions]** (データベースの許可) で、**[Database permissions]** (データベースの許可) の **[Describe]** (記述) を選択します。

1. **[Table and column permissions]** (テーブルと列の許可) で、**[Select]** (選択) を選択し、**[Table permissions]** (テーブルの許可) の **[Describe]** (記述) を選択します。

1. **[付与]** を選択します。

1. ユーザー `DataAnalyst` に対してこれらのステップを繰り返します。ここで、LF タグのキーは `Confidentiality`、値は `public` です。

   この時点で、コンシューマアカウントのデータアナリストユーザーは、データベースとリソースリンクを見つけて、Athena コンソール ([https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)) を介して共有テーブルにクエリを実行できるはずです。見つからない場合は、以下が適切に設定されているかどうかを確認します。
   + 共有テーブルへのリソースリンクが作成されている
   + プロデューサーアカウントが共有する LF タグへのアクセスをユーザーに許可している
   + リソースリンク、およびリソースリンクを作成したデータベースに関連付けられた LF タグへのアクセスをユーザーに許可している
   + リソースリンク、およびリソースリンクを作成したデータベースに正しい LF タグが割り当てられているかどうかを確認する

## ステップ 4: 名前付きリソース方式を実装する
<a name="tut-named-resource-method"></a>

名前付きリソース方式を使用するには、以下の大まかなステップに従います。

1. (オプション) データベース、テーブル、列に対する許可を `IAMAllowedPrincipals` から取り消す

1. データの許可をコンシューマーアカウントに付与する

1. リソース共有を受け入れます AWS Resource Access Manager。

1. 共有テーブルへのリソースリンクを作成する

1. 共有テーブルへのデータ許可をコンシューマーに付与する

1. リソースリンクへのデータ許可をコンシューマーに付与する

**(オプション) データベース、テーブル、列に対する許可を `IAMAllowedPrincipals` から取り消す**
+ このチュートリアルの最初で、Lake Formation の Data Catalog 設定を変更しました。その部分をスキップした場合は、このステップが必要です。手順については、前のセクションのオプションのステップを参照してください。

**データの許可をコンシューマーアカウントに付与する**

1. 
**注記**  
プロデューサーアカウントに別のユーザーとしてサインインしている場合は、まずサインアウトします。

   ID、IAM ユーザー名 (デフォルトは `DatalakeAdminProducer`)、 CloudFormation およびスタックの作成時に指定されたパスワードを使用して AWS アカウント 、プロデューサーアカウントのデータレイク管理者を使用して、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールにサインインします。

1. **[Permissions]** (許可) ページの **[Data lake Permissions]** (データレイクの許可) で、**[Grant]** (付与) を選択します。

1. **プリンシパル**で外部**アカウント**を選択し、1 つ以上の AWS アカウント IDsまたは AWS 組織 IDsを入力します。詳細については、「[AWS Organizations](https://aws.amazon.com/organizations/)」を参照してください。

   プロデューサーアカウントが属し、同じ組織 AWS アカウント 内の組織が自動的に表示されます。表示されない場合は、アカウント ID または組織 ID を手動で入力します。

1. **[LF タグまたはカタログリソース]** で、`Named data catalog resources` を選択します。

1. **[Databases]** (データベース) で、データベース `lakeformation_tutorial_cross_account_database_named_resource` を選択します。

1. **[Add LF-Tag]** (LF タグを追加) を選択します。

1. **[Tables]** (テーブル) で、**[All tables]** (すべてのテーブル) を選択します。

1. **[Table column permissions]** (テーブル列の許可) で、**[Select]** (選択) を選択し、**[Table permissions]** (テーブルの許可) の **[Describe]** (記述) を選択します。

1. **[Select]** (選択) を選択し、**[Grantable permissions]** (付与可能な許可) の **[Describe]** (記述) を選択します。

1. (オプション) **[Data permissions]** (データの許可) で、列レベルの許可の管理が必要な場合は、**[Simple column-based access]** (シンプルな列ベースのアクセス) を選択します。

1. **[付与]** を選択します。

`IAMAllowedPrincipals` の許可を取り消していない場合は、**Grant permissions** (許可の付与) 失敗エラーが表示されます。この時点で、ターゲットテーブルが 経由でコンシューマーアカウント AWS RAM と **Permissions, Data permissions** で共有されていることがわかります。

**からリソース共有を受け入れる AWS RAM**
**注記**  
このステップは、組織 AWS アカウントベースの共有ではなく、ベースの共有にのみ必要です。

1.  CloudFormation スタックの作成時に指定された IAM ユーザー名 (デフォルトは DatalakeAdminConsumer) とパスワードを使用して、コンシューマーアカウントデータレイク管理者を使用して [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/) で AWS コンソールにサインインします。

1.  AWS RAM コンソールのナビゲーションペインの**「自分と共有」の「リソース共有**」で、共有された Lake Formation リソースを選択します。**[Status]** (ステータス) は **[Pending]** (保留) になっているはずです。

1. **[Actions]** (アクション)、**[Grant]** (付与) の順に選択します。

1. リソースの詳細を確認し、**[Accept resource share]** (リソース共有を承認) を選択します。

   この時点で、コンシューマーアカウントのデータレイク管理者は、共有しているリソースを Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) で確認できるはずです (**[Data Catalog]** (データカタログ)、**[Databases]** (データベース) の順に移動します)。

**共有テーブルへのリソースリンクを作成する**
+ 「[ステップ 3: タグベースのアクセスコントロール方式を使用してクロスアカウント共有を実装する](#tut-share-tbac-method)」 (ステップ 6) の手順に従って、共有テーブルへのリソースリンクを作成します。リソースリンク名を `amazon_reviews_table_named_resource_resource_link` とします。リソースリンクをデータベース `lakeformation_tutorial_cross_account_database_consumer` 内に作成します。

**共有テーブルへのデータ許可をコンシューマーに付与する**

共有テーブルへのデータ許可をコンシューマーに付与するには、以下のステップを実行します。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) で、**[Permissions]** (許可)、**[Data lake permissions]** (データレイクの許可) の順に移動し、**[Grant]** (付与) を選択します。

1. **[Principals]** (プリンシパル) で、**[IAM users and roles]** (IAM ユーザーおよびロール)を選択し、ユーザー `DataAnalyst` を選択します。

1. **[LF タグまたはカタログリソース]** で、**[名前付きの Data Catalog リソース]** を選択します。

1. **[Databases]** (データベース) で、データベース `lakeformation_tutorial_cross_account_database_named_resource` を選択します。データベースがドロップダウンリストに表示されない場合は、**[Load more]** (さらにロード) を選択します。

1.  **[Tables]** (テーブル) で、テーブル `amazon_reviews_table_named_resource` を選択します。

1. **[Table and column permissions]** (テーブルと列の許可) で、**[Select]** (選択) を選択し、**[Table permissions]** (テーブルの許可) の **[Describe]** (記述) を選択します。

1. **[付与]** を選択します。

**リソースリンクへのデータ許可をコンシューマーに付与する**

データレイクユーザーに対しては、共有テーブルへのアクセス許可だけでなく、リソースリンクへのアクセス許可も付与する必要があります。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) で、**[Permissions]** (許可)、**[Data lake permissions]** (データレイクの許可) の順に移動し、**[Grant]** (付与) を選択します。

1. **[Principals]** (プリンシパル) で、**[IAM users and roles]** (IAM ユーザーおよびロール)を選択し、ユーザー `DataAnalyst` を選択します。

1. **[LF タグまたはカタログリソース]** で、**[名前付きの Data Catalog リソース]** を選択します。

1. **[Databases]** (データベース) で、データベース `lakeformation_tutorial_cross_account_database_consumer` を選択します。データベースがドロップダウンリストに表示されない場合は、**[Load more]** (さらにロード) を選択します。

1.  **[Tables]** (テーブル) で、テーブル `amazon_reviews_table_named_resource_resource_link` を選択します。

1. **[Resource link permissions]** (リソースリンクの許可) で、**[Resource link permissions]** (リソースリンクの許可) の **[Describe]** (記述) を選択します。

1. **[付与]** を選択します。

   この時点で、コンシューマアカウントのデータアナリストユーザーは、データベースとリソースリンクを見つけて、Athena コンソールを介して共有テーブルにクエリを実行できるはずです。

   見つからない場合は、以下が適切に設定されているかどうかを確認します。
   + 共有テーブルへのリソースリンクが作成されている
   + プロデューサーアカウントが共有するテーブルへのアクセスをユーザーに許可している
   + リソースリンク、およびリソースリンクを作成したデータベースへのアクセスをユーザーに許可している

## ステップ 5: AWS リソースをクリーンアップする
<a name="share-tbac-clean-up-db"></a>

への不要な請求を防ぐために AWS アカウント、このチュートリアルで使用した AWS リソースを削除できます。

1. プロデューサーアカウントを使用して Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にサインインし、以下を削除または変更します。
   + AWS Resource Access Manager リソース共有
   + Lake Formation タグ
   + CloudFormation スタック
   + Lake Formation 設定
   + AWS Glue Data Catalog

1. コンシューマーアカウントを使用して Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にサインインし、以下を削除または変更します。
   + Lake Formation タグ
   + CloudFormation スタック