

# Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理
<a name="grant-permissions-tables"></a>

テーブルバケットが AWS 分析サービスと統合されると、Lake Formation はテーブルへのアクセスを管理し、各 IAM プリンシパル (ユーザーまたはロール) にアクションを実行する権限を付与する必要があります。Lake Formation は、データカタログリソースのきめ細かなアクセスコントロールを可能にする独自のアクセス許可モデル (Lake Formation 許可) を使用します。

詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Overview of Lake Formation permissions](https://docs.aws.amazon.com//lake-formation/latest/dg/lf-permissions-overview.html)」を参照してください。

AWS Lake Formation には、2 つの主な許可タイプがあります。

1. メタデータに対するアクセス許可は、データカタログ内でメタデータデータベースとテーブルを作成、読み取り、更新、削除できるかどうかを制御します。

1. 基になるデータに対するアクセス許可は、データカタログリソースの参照先となる Amazon S3 の場所にデータを読み書きできるかどうかを制御します。

Lake Formation では、独自のアクセス許可モデルと IAM アクセス許可モデルを組み合わせて使用して、データカタログリソースと基になるデータへのアクセスを制御します。
+ データカタログリソースまたは基になるデータへのアクセスリクエストが成功するには、そのリクエストが IAM と Lake Formation の両方によるアクセス許可のチェックに合格する必要があります。
+ IAM アクセス許可は Lake Formation へのアクセス、AWS Glue の API とリソースへのアクセスを制御し、Lake Formation 許可はデータカタログリソース、Amazon S3 ロケーション、基になるデータへのアクセスを制御します。

Lake Formation 許可は付与されたリージョン内でのみ適用されます。プリンシパルが Lake Formation 許可を付与されるには、データレイク管理者または必要なアクセス許可を持つ別のプリンシパルによって認可される必要があります。

**注記**  
テーブルバケット統合を実行したユーザーである場合は、テーブルに対する Lake Formation 許可が既に付与されています。テーブルにアクセスする唯一のプリンシパルである場合は、このステップをスキップできます。テーブルに対する Lake Formation 許可を他の IAM プリンシパルに付与するだけで済みます。これにより、クエリを実行するときに他のプリンシパルがテーブルにアクセスできるようになります。詳細については、「[テーブルまたはデータベースに対する Lake Formation アクセス許可の付与](#grant-lf-table)」を参照してください。

## テーブルまたはデータベースに対する Lake Formation アクセス許可の付与
<a name="grant-lf-table"></a>

Lake Formation コンソールまたは AWS CLI を通じて、テーブルバケット内のテーブルまたはデータベースに対する Lake Formation 許可をプリンシパルに付与できます。

**注記**  
データカタログリソースに対する Lake Formation のアクセス許可を外部アカウントに付与するか、または別のアカウントの IAM プリンシパルに直接付与する場合、Lake Formation は AWS Resource Access Manager (AWS RAM) サービスを使用してリソースを共有します。付与対象アカウントが付与する側のアカウントと同じ組織内にある場合、付与対象アカウントはその共有リソースをただちに使用できるようになります。付与対象アカウントが同じ組織内にない場合は、AWS RAM が付与対象アカウントに対して、リソース付与を受け入れる、または拒否するための招待を送信します。その後、共有リソースを利用可能にするために、付与対象アカウントのデータレイク管理者が AWS RAM コンソールまたは AWS CLI を使用して招待を承諾する必要があります。クロスアカウントデータ共有の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Lake Formation でのクロスアカウントデータ共有](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html)」を参照してください。

------
#### [ Console ]

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。

1. ナビゲーションペインで、**[データアクセス許可]**、**[付与]** の順に選択します。

1. **[アクセス許可の付与]** ページの **[プリンシパル]** で、次のいずれかを実行します。
   + Amazon Athena または Amazon Redshift の場合は、**[IAM ユーザーとロール]** を選択し、さらにクエリに使用する IAM プリンシパルを選択します。
   + Amazon Data Firehose の場合は、**[IAM ユーザーとロール]** を選択した後、テーブルへのストリーミング用に作成したサービスロールを選択します。
   + Quick の場合は、**[SAML ユーザーとグループ]** を選択し、Quick 管理者ユーザーの Amazon リソースネーム (ARN) を入力します。
   + AWS Glue Iceberg REST エンドポイントアクセスの場合は、**[IAM ユーザーおよびロール]** を選択し、クライアント用に作成した IAM ロールを選択します。詳細については、[クライアント用の IAM ロールを作成する](s3-tables-integrating-glue-endpoint.md#glue-endpoint-create-iam-role)を参照してください。

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

1. **[カタログ]** で、テーブルバケットを統合したときに作成したサブカタログ (`account-id:s3tablescatalog/amzn-s3-demo-bucket` など) を選択します。

1. **[データベース]** で、作成した S3 テーブルバケット名前空間を選択します。

1. (オプション) **[テーブル]** で、テーブルバケットに作成した S3 テーブルを選択します。
**注記**  
Athena クエリエディタで新しいテーブルを作成する場合は、テーブルを選択しないでください。

1. 次のいずれかを行います。
   + 前のステップでテーブルを指定した場合は、**[テーブルのアクセス許可]** で **[Super]** を選択します。
   + 前のステップでテーブルを指定しなかった場合は、**[データベースのアクセス許可]** に進みます。クロスアカウントデータ共有の場合は、**[Super]** を選択して、データベースに対するすべてのアクセス許可を他のプリンシパルに付与することはできません。代わりに、**[Describe]** などのよりきめ細かなアクセス許可を選択します。

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

------
#### [ CLI ]

1. 次の AWS CLI コマンドをデータレイク管理者として実行していることを確認してください。詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。

1. 次のコマンドを実行して、S3 テーブルバケットのテーブルに対する Lake Formation 許可を IAM プリンシパルに付与し、テーブルにアクセスします。この例を実行するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role"
       },
       "Resource": {
           "Table": {
               "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
               "DatabaseName": "S3 table bucket namespace, for example, test_namespace",
               "Name": "S3 table bucket table name, for example test_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

------