

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

# Lake Formation 許可の概要
<a name="lf-permissions-overview"></a>

 AWS Lake Formationには、2 つの主な許可タイプがあります。
+ メタデータアクセス – データカタログリソースに対する許可 (*データカタログ許可*)。

  これらの許可は、プリンシパルが Data Catalog 内のメタデータデータベースとテーブルの作成、読み取り、更新、および削除を実行できるようにします。
+ 基盤となるデータアクセス – Amazon Simple Storage Service (Amazon S3) 内のロケーションに対するアクセス許可 (*データアクセス許可*と*データロケーション許可*)。
  + データレイクのアクセス許可により、プリンシパルが*基盤*となる Amazon S3 ロケーション (データカタログリソースがポイントするデータ) に対するデータの読み取りと書き込みが実行できるようになります。
  + データロケーション許可は、プリンシパルが特定の Amazon S3 ロケーションをポイントするメタデータデータベースとテーブルの作成と変更を実行できるようにします。

どちらの領域でも、Lake Formation は Lake Formation アクセス許可と AWS Identity and Access Management (IAM) アクセス許可の組み合わせを使用します。IAM 許可モデルは、IAM ポリシーで構成されます。Lake Formation 許可モデルは、`Grant SELECT on tableName to userName` のような、DBMS 形式の GRANT/REVOKE コマンドとして実装されます。

プリンシパルが Data Catalog リソース、または基盤となるデータへのアクセスをリクエストするときにリクエストが成功するには、そのリクエストが IAM と Lake Formation の両方による許可チェックに合格する必要があります。

![\[リクエスト元からのリクエストは、リソースに到達するために Lake Formation 許可と IAM 許可の 2 つの「ドア」を通過する必要があります。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/permissions_doors.png)


Lake Formation 許可は Data Catalog リソース、Amazon S3 ロケーション、およびこれらのロケーションにある基盤となるデータへのアクセスを制御します。IAM 許可は、Lake Formation、および AWS Glue の API とリソースへのアクセスを制御します。このため、Data Catalog にメタデータテーブルを作成するための Lake Formation 許可 (`CREATE_TABLE`) を持っていても、`glue:CreateTable` API に対する IAM の許可を持っていなければ、操作が失敗します。(`glue:` 許可である理由は、Lake Formation が AWS Glue Data Catalog を使用するからです。)

**注記**  
Lake Formation 許可は、それらが付与されたリージョンのみで適用されます。

AWS Lake Formation では、各プリンシパル (ユーザーまたはロール) に Lake Formation が管理するリソースでアクションを実行する権限が必要です。プリンシパルは、データレイク管理者、または Lake Formation 許可を付与する許可を持つ別のプリンシパルから必要な認可を付与されます。

Lake Formation 許可をプリンシパルに付与するときは、その許可を別のプリンシパルに渡す能力をオプションで付与できます。

Lake Formation API、 AWS Command Line Interface (AWS CLI)、または Lake Formation コンソール**のデータアクセス許可**と**データロケーション**ページを使用して、Lake Formation アクセス許可を付与および取り消すことができます。

# 細粒度のアクセスコントロールのための方式
<a name="access-control-fine-grained"></a>

データレイクでは、データに対する細粒度のアクセスコントロールを持つことが目標になります。これは、Lake Formation では Data Catalog リソースと Amazon S3 ロケーションに対する細粒度のアクセスコントロールを意味します。細粒度のアクセスコントロールは、以下の方式のいずれかを使用して達成することができます。


| 方式 | Lake Formation 許可 | IAM 許可 | コメント | 
| --- | --- | --- | --- | 
| 方式 1 | オープン | 細粒度 |  AWS Glue との後方互換性のための**デフォルト方式**です。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/access-control-fine-grained.html) Lake Formation コンソールでは、この方式が **[Use only IAM access control]** (IAM アクセスコントロールのみを使用する) として表示されます。  | 
| 方式 2 | 細粒度 | 粗粒度 |  **これは、推奨される方法です。** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/access-control-fine-grained.html)  | 

**重要**  
以下の点に注意してください。  
Lake Formation では、既存の AWS Glue Data Catalog 動作との互換性のために、**[Use only IAM access control]** (IAM アクセスコントロールのみを使用する) がデフォルトで有効になっています。これらの設定は、Lake Formation 許可の使用への移行後に無効化することをお勧めします。詳細については、「[データレイクのデフォルト設定の変更](change-settings.md)」を参照してください。
データレイク管理者とデータベース作成者には、理解しておく必要がある黙示的な Lake Formation 許可があります。詳細については、「[黙示的な Lake Formation 許可](implicit-permissions.md)」を参照してください。

# メタデータのアクセスコントロール
<a name="access-control-metadata"></a>

Data Catalog リソースのアクセスコントロールに関する以下の説明は、Lake Formation 許可を使用した細粒度のアクセスコントロールと、IAM ポリシーを使用した粗粒度のアクセスコントロールを前提としています。

Data Catalog リソースに対する Lake Formation 許可を付与するには、以下の 2 つの異なる方式があります。
+ **名前付きリソースでのアクセスコントロール** – この方式では、データベース名またはテーブル名を指定することで、特定のデータベースまたはテーブルに対する許可を付与します。付与はこのような形式になります。

  Grant *(アクセス許可)* to *(プリンシパル)* on *(リソース)* [with grant option]

  grant オプションは、付与対象者が他のプリンシパルに許可を付与することを可能にします。
+ **タグベースのアクセスコントロール** – この方式では、Data Catalog のデータベース、テーブル、および列に 1 つまたは複数の LF タグを割り当てて、1 つまたは複数の LF タグに対するアクセス許可をプリンシパルに付与します。各 LF タグは、`department=sales` のようなキーと値のペアです。Data Catalog リソースの LF タグと一致する LF タグを持つプリンシパルが、そのリソースにアクセスできます。この方式は、多数のデータベースとテーブルを持つデータレイクに推奨されます。これは、「[Lake Formation のタグベースのアクセス制御](tag-based-access-control.md)」で詳しく説明されています。

プリンシパルがリソースに対して持っている許可は、両方の方式によって付与された許可を結合したものです。

以下の表は、Data Catalog リソースに対して利用できる Lake Formation 許可の要約です。列の見出しは、許可が付与されるリソースを示しています。


| カタログ | データベース | テーブル | 
| --- | --- | --- | 
| CREATE\$1DATABASE | CREATE\$1TABLE | ALTER | 
|  | ALTER | DROP | 
|  | DROP | DESCRIBE | 
|  | DESCRIBE | SELECT\$1 | 
|  |  | INSERT\$1 | 
|  |  | DELETE\$1 | 

例えば、データベースに対する `CREATE_TABLE` 許可が付与されるとします。これは、プリンシパルがそのデータベース内にテーブルを作成できることを意味します。

アスタリスク (\$1) が付いた許可は Data Catalog リソースについて付与されますが、基盤となるデータに適用されます。例えば、メタデータテーブルに対する `DROP` 許可は、Data Catalog からテーブルをドロップできるようにします。一方で、同じテーブルについて付与された `DELETE` 許可は、Amazon S3 内にあるテーブルの基盤となるデータを、SQL `DELETE` 文などを使用して削除できるようにします。これらの許可があれば、Lake Formation コンソールでテーブルを表示したり、AWS Glue API を使用してテーブルに関する情報を取得したりすることもできます。したがって、`SELECT`、`INSERT`、および `DELETE` は、Data Catalog 許可とデータアクセス許可の両方になります。

テーブルに対する `SELECT` を付与するときは、1 つ、または複数の列を包含する、または除外するフィルターを追加できます。これは、メタデータテーブル列に対する細粒度のアクセスコントロールを可能にして、統合されたサービスのユーザーがクエリを実行するときに表示される列を制限します。この機能は、IAM ポリシーのみを使用して利用することはできません。

`Super` という名前の特別な許可もあります。この `Super` 許可は、プリンシパルが、許可の対象であるデータベースまたはテーブルで、サポートされているすべての Lake Formation 操作を実行できるようにします。この許可は、他の Lake Formation 許可と共存できます。例えば、メタデータテーブルに対する `Super`、`SELECT`、および `INSERT` を付与することができます。プリンシパルは、サポートされているすべてのアクションをテーブルで実行でき、`Super` 許可を取り消しても、`SELECT` と `INSERT` 許可は残ります。

各許可の詳細については、「[Lake Formation 許可のリファレンス](lf-permissions-reference.md)」を参照してください。

**重要**  
別のユーザーが作成した Data Catalog テーブルを表示するには、そのテーブルに対する Lake Formation 許可が、少なくとも 1 つ付与されている必要があります。テーブルに対する許可が少なくとも 1 つ付与されている場合は、テーブルが含まれているデータベースも表示することができます。

Data Catalog 許可は、Lake Formation コンソール、API、または AWS Command Line Interface (AWS CLI) を使用して付与または取り消すことができます。以下は、`retail`データベースにテーブルを作成するアクセス`datalake_user1`許可をユーザーに付与する AWS CLI コマンドの例です。

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 
 --permissions "CREATE_TABLE" --resource '{ "Database": {"Name":"retail"}}'
```

以下は、Lake Formation 許可による細粒度のアクセスコントロールを補完する粗粒度のアクセスコントロール IAM ポリシーの例です。これは、任意のメタデータデータベースまたはテーブルに対するすべての操作を許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:*Database*",
                "glue:*Table*",
                "glue:*Partition*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

次の例も粗粒度ですが、制限が多少厳しくなります。これは、指定されたアカウントとリージョン内の Data Catalog にある、すべてのメタデータデータベースおよびテーブルに対する読み取り専用操作を許可します。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": "arn:aws:glue:us-east-1:111122223333:*"
        } 
    ]   
}
```

------

これらのポリシーを、IAM ベースの細粒度のアクセスコントロールを実装する以下のポリシーと比較してください。これは、指定されたアカウントとリージョン内の顧客関係管理 (CRM) メタデータデータベースにあるテーブルのサブセットのみに対する許可を付与します。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/CRM",
                "arn:aws:glue:us-east-1:111122223333:table/CRM/P*"
            ]
        } 
    ]   
}
```

------

粗粒度のアクセスコントロールポリシーの追加例については、「[Lake Formation のペルソナと IAM 許可のリファレンス](permissions-reference.md)」を参照してください。

# 基盤となるデータのアクセスコントロール
<a name="access-control-underlying-data"></a>

統合された AWS サービスが、アクセスが制御されている Amazon S3 ロケーションのデータへのアクセスをリクエストすると AWS Lake Formation、Lake Formation はデータにアクセスするための一時的な認証情報を提供します。

Amazon S3 の場所にある基盤となるデータへのアクセスを Lake Formation が制御できるようにするには、Lake Formation にその場所を*登録*します。

Amazon S3 ロケーションを登録したら、以下の Lake Formation 許可の付与を開始できます。
+ そのロケーションをポイントする Data Catalog テーブルに対するデータアクセス許可 (`SELECT`、`INSERT`、および `DELETE)`)。
+ そのロケーションに対するデータロケーション許可。

Lake Formation のデータロケーション許可は、特定の Amazon S3 ロケーションをポイントする Data Catalog リソースを作成する機能を制御します。データロケーション許可は、データレイク内のロケーションのセキュリティをさらに強化します。プリンシパルに `CREATE_TABLE` または `ALTER` 許可を付与するときは、プリンシパルがメタデータテーブルの作成または変更を実行できるロケーションを制限するためのデータロケーション許可も付与します。

Amazon S3 ロケーションは、バケット、またはバケット下のプレフィックスで、個々の Amazon S3 オブジェクトではありません。

データロケーション許可は、Lake Formation コンソール、API、または AWS CLIを使用してプリンシパルに付与することができます。付与の一般的な形式は以下のとおりです。

```
grant DATA_LOCATION_ACCESS to principal on S3 location [with grant option]
```

`with grant option` を含めると、付与対象者は他のプリンシパルに許可を付与することができます。

Lake Formation のアクセス許可は常に、きめ細かなアクセスコントロールのための AWS Identity and Access Management (IAM) アクセス許可と組み合わせて機能することを覚えておいてください。基盤となる Amazon S3 データに対する読み取り/書き込み許可では、IAM 許可が以下のように付与されます。

ロケーションを登録するときは、そのロケーションに対する読み取り/書き込み許可を付与する IAM ロールを指定します。Lake Formation は、統合 AWS サービスに一時的な認証情報を提供するときに、そのロールを引き受けます。典型的なロールには、以下のようなポリシーがアタッチされている場合があります。このポリシーの登録済みロケーションはバケット `awsexamplebucket` です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```

------

Lake Formation は、このようなポリシーを自動的に作成するために登録時に使用できる、サービスリンクロールを提供します。詳細については、「[Lake Formation のサービスリンクロールの使用](service-linked-roles.md)」を参照してください。

このため、Amazon S3 ロケーションの登録によって、そのロケーションに対する必要な IAM `s3:` 許可が付与され、この許可は、ロケーションの登録に使用されたロールによって指定されます。

**重要**  
**[Requester pays]** (リクエスタ支払い) が有効になっている Amazon S3 バケットの登録は避けてください。Lake Formation に登録されたバケットの場合、バケットの登録に使用されるロールは常にリクエスト元であると見なされます。バケットが別の AWS アカウントからアクセスされた場合、ロールがバケット所有者と同じアカウントに属している場合、バケット所有者はデータアクセスに対して課金されます。

基盤となるデータへの読み取り/書き込みアクセスの場合、プリンシパルには、Lake Formation アクセス許可に加えて以下の `lakeformation:GetDataAccess` IAM アクセス許可も必要になります。この許可があると、Lake Formation がデータにアクセスするための一時的な認証情報のリクエストを承諾します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
```

------

 上記のポリシーでは、リソースパラメータを「\$1」(すべて) に設定する必要があります。このアクセス許可に他のリソースを指定することはサポートされていません。この設定により、Lake Formation はデータレイク環境全体のデータアクセスを効率的に管理できます。

**注記**  
Amazon Athena では、ユーザーに `lakeformation:GetDataAccess` アクセス許可が必要です。他の統合サービスでは、基盤となる実行ロールに `lakeformation:GetDataAccess` アクセス許可が必要です。

この許可は、「[Lake Formation のペルソナと IAM 許可のリファレンス](permissions-reference.md)」で提案されているポリシーに含まれています。

要約すると、Lake Formation プリンシパルが Lake Formation 許可でアクセス制御されている基盤となるデータに対する読み取りと書き込みを実行できるようにするには、以下が必要になります。
+ データが含まれる Amazon S3 ロケーションを Lake Formation に登録します。
+ 基盤となるデータのロケーションをポイントする Data Catalog テーブルを作成するプリンシパルにデータロケーション許可があること。
+ 基盤となるデータに対する読み取りと書き込みを実行するプリンシパルに、基盤となるデータのロケーションをポイントする Data Catalog テーブルに対する Lake Formation データアクセス許可があること。
+ 基礎となるデータロケーションが Lake Formation に登録されているとき、基礎となるデータを読み書きするプリンシパルには `lakeformation:GetDataAccess` IAM アクセス許可が必要です。

**注記**  
ユーザーが IAM または Amazon S3 ポリシーを通して Amazon S3 ロケーションへのアクセス権を得ている場合、Lake Formation 許可モデルは、Amazon S3 API またはコンソール経由でのそれらのロケーションへのアクセスを阻止しません。IAM ポリシーをプリンシパルにアタッチして、このアクセスをブロックすることができます。

**データロケーションアクセス許可の詳細**  
データロケーション許可は、Data Catalog データベースとテーブルに対する作成および更新操作の結果を制御します。ルールは以下のとおりです。
+ プリンシパルが Amazon S3 ロケーションを指定するデータベースまたはテーブルを作成または更新するには、そのロケーションに対する明示的または黙示的なデータロケーション許可を持っている必要があります。
+ 明示的なアクセス許可`DATA_LOCATION_ACCESS`は、 コンソール、API、または を使用して付与されます AWS CLI。
+ 黙示的な許可は、登録されたロケーションをポイントするロケーションプロパティがデータベースにあり、プリンシパルがそのデータベースに対する `CREATE_TABLE` 許可を持っていて、プリンシパルがそのロケーションまたは子ロケーションでテーブルを作成しようとするときに付与されます。
+ そのロケーションに対するデータロケーション許可がプリンシパルに付与されている場合、プリンシパルはすべての子ロケーションに対するデータロケーション許可を持っています。
+ プリンシパルに、基盤となるデータに対する読み取り/書き込み操作を実行するためのデータロケーション許可は必要ありません。`SELECT` または `INSERT` データアクセス許可があれば十分です。データロケーション許可は、そのロケーションをポイントする Data Catalog リソースの作成のみに適用されます。

以下の図にあるシナリオを考えてみましょう。

![\[フォルダ階層と、データベース A と B の 2 つのデータベースがあり、データベース B が Customer service (カスタマーサービス) フォルダをポイントしています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/location-permissions-example.png)


この図では、以下のようになっています。
+ Amazon S3 バケット `Products`、`Finance`、および `Customer Service` が Lake Formation に登録されている。
+ `Database A` にはロケーションプロパティがなく、`Database B` には `Customer Service` バケットをポイントするロケーションプロパティがある。
+ ユーザー `datalake_user` が両方のデータベースに対する `CREATE_TABLE` を持っている。
+ ユーザー `datalake_user` には、`Products` バケットのみに対するデータロケーション許可が付与されている。

以下は、ユーザー `datalake_user` が特定のロケーションで特定のデータベース内にカタログテーブルを作成しようとする場合の結果です。


**`datalake_user` がテーブルを作成しようとするロケーション**  

| データベースとロケーション | 成功または失敗 | 理由 | 
| --- | --- | --- | 
| Finance/Sales でのデータベース A | 失敗 | データロケーション許可がない | 
| Products でのデータベース A | 成功 | データロケーション許可がある | 
| HR/Plans でのデータベース A | 成功 | ロケーションが登録されていない | 
| Customer Service/Incidents でのデータベース B | 成功 | データベースに Customer Service のロケーションプロパティがある | 

詳細については、次を参照してください。
+ [データレイクへの Amazon S3 ロケーションの追加](register-data-lake.md)
+ [Lake Formation 許可のリファレンス](lf-permissions-reference.md)
+ [Lake Formation のペルソナと IAM 許可のリファレンス](permissions-reference.md)