

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

# Lake Formation のタグベースのアクセス制御
<a name="tag-based-access-control"></a>

Lake Formation のタグベースのアクセス制御 (LF-TBAC) は、属性に基づいて許可を定義する認可戦略です。これらの属性は、Lake Formation で LF タグ**と呼ばれています。データカタログリソースに LF タグをアタッチし、それらの LF タグを使用して、リソースに対するアクセス許可を Lake Formation プリンシパルに付与できます。Lake Formation は、プリンシパルでリソースのタグ値と一致するタグ値にアクセス許可が付与されたときに、それらのリソースに対するオペレーションを許可します。

LF-TBAC は、急成長する環境や、ポリシー管理が煩雑になる状況で役に立ちます。

LF-TBAC は、データカタログオブジェクト (フェデレーティッドカタログ、データベース、テーブル、ビューなど) が多数ある場合に Lake Formation 許可を付与するために使用することが推奨される方式です。Lake Formation は、Amazon S3 テーブル、 Amazon Redshift データウェアハウス、SQL Server Amazon DynamoDB、Snowflake などのフェデレーティッドデータソースのフェデレーティッドカタログのタグベースのアクセスコントロールをサポートしています。

**注記**  
IAM タグと LF タグは同じではありません。これらのタグは置き換え可能ではありません。LF タグは Lake Formation アクセス許可を付与するために使用され、IAM タグは IAM ポリシーを定義するために使用されます。

## Lake Formation のタグベースのアクセス制御の仕組み
<a name="how-TBAC-works"></a>

各 LF タグは、`department=sales` や `classification=restricted` などのキーと値のペアです。キーは、`department=sales,marketing,engineering,finance` など複数の定義された値を持つことができます。

LF-TBAC 方式を使用するには、データレイク管理者とデータエンジニアが以下のタスクを実行します。


| タスク | タスクの詳細 | 
| --- | --- | 
|  1. LF タグのプロパティと関係を定義します。  | - | 
|  2. Lake Formation で LF タグ作成者を作成します。  | [LF タグ作成者の追加](TBAC-adding-tag-creator.md) | 
|  3. Lake Formation で LF タグを作成します。  | [LF タグの作成](TBAC-creating-tags.md) | 
|  4. LF タグを Data Catalog リソースに割り当てます。  | [Data Catalog リソースへの LF タグの割り当て](TBAC-assigning-tags.md) | 
|  5. LF タグをリソースに割り当てる許可 (オプションで付与オプションを使用) を他のプリンシパルに付与します。  | [LF タグ値のアクセス許可の管理](TBAC-granting-tags.md) | 
|  6. LF タグ式 (オプションで付与オプションを使用) をプリンシパルに付与します。  | [LF-TBAC 方式を使用したデータレイク許可の付与](granting-catalog-perms-TBAC.md) | 
|  7. (推奨) プリンシパルが LF-TBAC 方式を使用して正しいリソースにアクセスできることを確認した後、名前付きリソース方式を使用して付与された許可を取り消します。  | - | 

3 つのデータベースと 7 つのテーブルに対するアクセス許可を 3 人のプリンシパルに付与する必要がある場合を考えてみましょう。

![\[左側に 3 人のユーザーが垂直に配置されています。右側には、A、B、および C のラベルが付けられた 3 個のデータベースが垂直に配置されています。データベース A には A.1 および A.2 のラベルが付けられた 2 個のテーブルがあり、データベース B には B.1 および B.2 のラベルが付けられたテーブル、データベース C には C.1、C.2、および C.3 のラベルが付けられた 3 個のテーブルがあります。17 本の矢印は、ユーザーをデータベースとテーブルに結び付けており、データベースおよびテーブルに対する許可のユーザーへの付与を示しています。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/TBAC_example_discreet.png)


上の図に示されているアクセス許可を名前付きリソース方法を使用して実現するには、以下のように、17 の付与を行う必要があります (擬似コードを使用)。

```
GRANT CREATE_TABLE ON Database A TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table A.1 TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 1
GRANT SELECT, INSERT ON Table B.2 TO PRINCIPAL 1
...
GRANT SELECT, INSERT ON Table A.2 TO PRINCIPAL 2
GRANT CREATE_TABLE ON Database B TO PRINCIPAL 2
...
GRANT SELECT, INSERT ON Table C.3 TO PRINCIPAL 3
```

今度は、LF-TBAC を使用してアクセス許可を付与する方法を考えてみます。次の図は、LF タグをデータベースとテーブルに割り当てて、LF タグに対するアクセス許可をプリンシパルに付与したことを示しています。

この例では、LF タグが、エンタープライズリソースプランニング (ERP) アプリケーションスイートの異なるモジュールの分析が含まれるデータレイクの領域を表しています。さまざまなモジュールの分析データへのアクセスを制御するために使用できます。すべての LF タグは、`module` というキーと、`Sales`、`Orders`、および `Customers` の可能な値を持っています。LF タグの例は以下のようになります。

```
module=Sales
```

この図は LF タグの値のみを示しています。

![\[前の図と同様に、左側に 3 人のユーザーが垂直に配置されており、右側には A、B、および C のラベルが付けられた 3 個のデータベースが垂直に配置されています。データベース A には A.1 および A.2 のラベルが付けられた 2 個のテーブルがあり、データベース B には B.1 および B.2 のラベルが付けられたテーブル、データベース C には C.1、C.2、および C.3 のラベルが付けられた 3 個のテーブルがあります。ユーザーと、データベースとテーブルの間に矢印はありません。その代わりに、ユーザーの横にあるラベル付けされた「フラグ」が、ユーザー 1 に Sales (売上) および Customers (顧客) の LF タグが付与され、ユーザー 2 には Orders (注文) の LF タグ、ユーザー 3 には Customers (顧客) の LF タグが付与されていることを示しています。データベースとテーブルの横にあるフラグは、データベースとテーブルへの次のような LF タグの割り当てを示しています。データベース A: Sales (売上)。テーブル A.1: 淡色表示のフラグによって、Sales (売上) がデータベース A から継承されたことが示されています。テーブル A.2: Orders (注文)。ただし、淡色表示のフラグによって、Sales (売上) がデータベース A から継承されたことが示されています。データベース B: Orders (注文)。テーブル B.1 と B.2 は Orders (注文) を継承しており、テーブル B.2 には Customers (顧客) があります。データベース C には Customers (顧客) があり、テーブル C.1、C.2、および C.3 は Customers (顧客) を継承しています。C のテーブルに他の割り当てはありません。\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/TBAC_example_tags.png)


**Data Catalog リソースへのタグ割り当てと継承**  
テーブルはデータベースから LF タグを継承し、列はテーブルから LF タグを継承します。継承された値は上書きすることができます。上記の図では、淡色表示の LF タグが継承されています。

継承が行われるため、データレイク管理者は、リソースに対して以下の 5 つの LF タグの割り当てを行うだけで済みます (擬似コードを使用)。

```
ASSIGN TAGS module=Sales TO database A
ASSIGN TAGS module=Orders TO table A.2
ASSIGN TAGS module=Orders TO database B
ASSIGN TAGS module=Customers TO table B.2
ASSIGN TAGS module=Customers TO database C
```

**プリンシパルへのタグの付与**  
データベースとテーブルに LF タグを割り当てた後、データレイク管理者は、以下のようにプリンシパルに対して LF タグを 4 回付与するだけで済みます (擬似コードを使用)。

```
GRANT TAGS module=Sales TO Principal 1
GRANT TAGS module=Customers TO Principal 1
GRANT TAGS module=Orders TO Principal 2
GRANT TAGS module=Customers TO Principal 3
```

これで、LF タグ `module=Sales` を持つプリンシパルは LF タグ `module=Sales` を持つ Data Catalog リソース (例えば、データベース A) にアクセスでき、LF タグ `module=Customers` を持つプリンシパルは LF タグ `module=Customers` を持つリソースにアクセスできる、というようになります。

上記の grant コマンドは不完全です。これらは、プリンシパルが許可を持つ Data Catalog リソースを LF タグで示してはいるものの、プリンシパルがそれらのリソースに対してどの Lake Formation 許可 (`SELECT`、`ALTER` など) を持っているかを正確に示していないためです。したがって、以下の擬似コードのコマンドが、LF タグを使用して Data Catalog リソースに対する Lake Formation 許可を付与する方法のより正確な表現になります。

```
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Sales TO Principal 1
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Sales TO Principal 1
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 1
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Customers TO Principal 1
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Orders TO Principal 2
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Orders TO Principal 2
GRANT (CREATE_TABLE ON DATABASES) ON TAGS module=Customers TO Principal 3
GRANT (SELECT, INSERT ON TABLES)  ON TAGS module=Customers TO Principal 3
```

**まとめ – 結果として得られたリソースに対するアクセス許可**  
以下の表は、上記の図のデータベースとテーブルに割り当てられた LF タグと、図の中でプリンシパルに付与された LF タグを前提とした、プリンシパルが持つデータベースとテーブルに対する Lake Formation 許可のリストです。


| プリンシパル | LF タグを通じて付与された許可 | 
| --- | --- | 
| プリンシパル 1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/tag-based-access-control.html)  | 
| プリンシパル 2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/tag-based-access-control.html)  | 
| プリンシパル 3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/tag-based-access-control.html)  | 

**結論**  
このシンプルな例では、5 つの割り当て操作と 8 つの付与操作を使用することで、データレイク管理者が 17 個の許可を指定できました。何十個ものデータベースと、数百個ものテーブルがあるときは、名前付きリソース方式に勝る LF-TBAC 方式の利点が明白になります。すべてのプリンシパルにすべてのリソースへのアクセス権を付与する必要があり、`n(P)` をプリンシパルの数、`n(R)` をリソースの数とする仮定上のケースでは、以下のようになります。
+ 名前付きリソース方式では、必要な付与数が `n(P)` × `n(R)` 個になります。
+ 単一の LF タグを使用する LF-TBAC 方式では、プリンシパルへの付与とリソースへの割り当ての合計数が `n(P)` \$1 `n(R)` 個になります。

**関連情報**  
[メタデータアクセスコントロールのための LF タグの管理](managing-tags.md)
[LF-TBAC 方式を使用したデータレイク許可の付与](granting-catalog-perms-TBAC.md)

**Topics**
+ [Lake Formation のタグベースのアクセス制御の仕組み](#how-TBAC-works)
+ [メタデータアクセスコントロールのための LF タグの管理](managing-tags.md)
+ [メタデータアクセスコントロールのための LF タグ式の管理](managing-tag-expressions.md)
+ [LF タグ値のアクセス許可の管理](TBAC-granting-tags.md)