

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

# 行レベルのアクセスコントロールによるデータレイクの保護
<a name="cbac-tutorial"></a>

AWS Lake Formation 行レベルのアクセス許可を使用すると、データコンプライアンスとガバナンスポリシーに基づいて、テーブル内の特定の行へのアクセスを提供できます。数十億のレコードを格納する大きなテーブルがある場合、さまざまなユーザーやチームがアクセスして表示できるデータを、許可した範囲に限定する方法が必要です。行レベルのアクセスコントロールは、データを保護するとともに、ジョブの実行に必要なデータへのアクセス許可をユーザーに付与するシンプルでパフォーマンスの高い方法です。Lake Formation は、一元的な監査とコンプライアンスレポートを通じて、どのプリンシパルが、どのデータに、いつ、どのサービスを通じてアクセスしたかを特定します。

このチュートリアルでは、Lake Formation での行レベルのアクセスコントロールの仕組みと設定方法について説明します。

このチュートリアルには、必要なリソースをすばやくセットアップするための AWS CloudFormation テンプレートが含まれています。このテンプレートを参照し、ニーズに合わせてカスタマイズできます。

**Topics**
+ [対象者](#tut-cbac-roles-tutorial)
+ [前提条件](#tut-cbac-prereqs)
+ [ステップ 1: リソースをプロビジョニングする](#set-up-cbac-resources)
+ [ステップ 2: データフィルターなしでクエリを実行する](#query-without-filters)
+ [ステップ 3: データフィルターを設定し、許可を付与する](#setup-data-filters)
+ [ステップ 4: データフィルターを使用してクエリを実行する](#query-with-filters)
+ [ステップ 5: AWS リソースをクリーンアップする](#cbac-clean-up)

## 対象者
<a name="tut-cbac-roles-tutorial"></a>

このチュートリアルは、データスチュワード、データエンジニア、データアナリストを対象としています。次の表は、データ所有者とデータコンシューマーのロールと責任を示しています。


| ロール  | 説明 | 
| --- | --- | 
| IAM 管理者 | ユーザーおよびロール、Amazon Simple Storage Service (Amazon S3) バケットを作成できるユーザー。AdministratorAccess AWS 管理ポリシーがあります。 | 
| データレイク管理者 | データレイクの設定、データフィルターの作成、およびデータアナリストへの許可の付与を担当するユーザー。 | 
| データアナリスト | データレイクに対してクエリを実行できるユーザー。複数の異なる国 (このユースケースの場合は日本と米国) に居住するデータアナリストは、自国の顧客の製品レビューのみを分析でき、コンプライアンス上の理由から、他国の顧客のデータを表示することはできません。 | 

## 前提条件
<a name="tut-cbac-prereqs"></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 設定を変更する**
**重要**  
 CloudFormation テンプレートを起動する前に、以下の手順に従って、Lake Formation **の新しいデータベース/テーブルの IAM アクセスコントロールのみ**を使用する オプションを無効にします。

1. 米国東部 (バージニア北部) リージョンまたは米国西部 (オレゴン) リージョンで、Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にサインインします。

1. [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 アクセスコントロールのみを使用する) を選択解除します。

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

## ステップ 1: リソースをプロビジョニングする
<a name="set-up-cbac-resources"></a>

このチュートリアルには、クイックセットアップ用の CloudFormation テンプレートが含まれています。このテンプレートを参照し、ニーズに合わせてカスタマイズできます。 CloudFormation テンプレートは、次のリソースを生成します。
+ ユーザーおよびポリシー (以下のロール向け):
  + DataLakeAdmin
  + DataAnalystUS
  + DataAnalystJP
+ Lake Formation データレイクの設定と許可
+ サンプルデータファイルをパブリック Amazon S3 バケットから Amazon S3 バケットにコピーするために使用される Lambda 関数 (Lambda-backed CloudFormation カスタムリソース用)
+ データレイクとして機能する Amazon S3 バケット
+  AWS Glue Data Catalog データベース、テーブル、パーティション

**リソースを作成する**

 CloudFormation テンプレートを使用してリソースを作成するには、次の手順に従います。

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

1. [[スタックの起動]](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create?templateURL=https://aws-bigdata-blog.s3.amazonaws.com/artifacts/lakeformation_row_security/lakeformation_tutorial_row_security.yaml) を選択します。

1. **[Create Stack]** (スタックの作成) 画面で、**[Next]** (次へ) を選択します。

1. **[Stack name]** (スタック名) を入力します。

1. **[DataLakeAdminUserName]** と **[DataLakeAdminUserPassword]** に、データレイク管理者ユーザーとして自分の IAM ユーザーネームおよびパスワードを入力します。

1. **[DataAnalystUsUserName]** と **[DataAnalystUsUserPassword]** に、米国マーケットプレイスを担当するデータアナリストとして指定するユーザーのユーザーネームとパスワードを入力します。

1. **[DataAnalystJpUserName]** と **[DataAnalystJpUserPassword]** に、日本マーケットプレイスを担当するデータアナリストとして指定するユーザーのユーザーネームとパスワードを入力します。

1. **[DataLakeBucketName]** に、データバケットの名前を入力します。

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

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

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

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

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

   スタックの作成が完了するまでに 1 分かかる場合があります。

## ステップ 2: データフィルターなしでクエリを実行する
<a name="query-without-filters"></a>

環境の設定後に、製品レビューテーブルに対してクエリを実行できます。まず、行レベルのアクセスコントロールなしでテーブルにクエリを実行し、データが表示されることを確認します。Amazon Athena でクエリを初めて実行する場合は、クエリ結果の場所を設定する必要があります。

**行レベルのアクセスコントロールなしでテーブルに対してクエリを実行する**

1. `DatalakeAdmin` ユーザーとして Athena コンソール ([https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)) にサインインし、次のクエリを実行します。

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   次のスクリーンショットは、クエリ結果を示しています。このテーブルのパーティションは 1 つ (`product_category=Video`) のみであるため、各レコードは動画製品のレビューコメントを示します。  
![マーケットプレイス、顧客 ID、レビュー ID、製品の詳細、評価、投票の列を含む Amazon 製品レビューを示すクエリ結果テーブル。](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/cbac-tut-query-results1.jpg)

1. 次に、集計クエリを実行して、`marketplace` あたりのレコードの総数を取得します。

   ```
   SELECT marketplace, count(*) as total_count
   FROM lakeformation_tutorial_row_security.amazon_reviews
   GROUP BY marketplace
   ```

   次のスクリーンショットは、クエリ結果を示しています。`marketplace` 列には 5 つの異なる値があります。以降のステップでは、`marketplace` 列を使用して行ベースのフィルターをセットアップします。  
![FR、UK、JP、DE、US の 5 つの値を持つマーケットプレイス列とカウントを示すクエリ結果。](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/cbac-tut-query-results2.jpg)

## ステップ 3: データフィルターを設定し、許可を付与する
<a name="setup-data-filters"></a>

このチュートリアルでは、2 人のデータアナリストを使用します。1 人は米国マーケットプレイス、もう 1 人は日本マーケットプレイスを担当しています。各アナリストは Athena を使用して、各担当マーケットプレイスのみのカスタマーレビューを分析します。2 つの異なるデータフィルターを作成します。1 つは米国マーケットプレイスを担当するアナリスト用、もう 1 つは日本マーケットプレイスを担当するアナリスト用です。次に、アナリストにそれぞれの許可を付与します。

**データフィルターを作成して許可を付与する**

1. `US` `marketplace` データへのアクセスを制限するためのフィルターを作成します。

   1. 米国東部 (バージニア北部) リージョンで `DatalakeAdmin` ユーザーとして Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) にサインインします。

   1. **[Data filters]** (データフィルター) を選択します。

   1. **[Create new filter]** (新しいフィルターの作成) を選択します。

   1. **[Data filter name]** (データフィルター名) に、「`amazon_reviews_US`」と入力します。

   1. **[Target database]** (ターゲットデータベース) で、データベース `lakeformation_tutorial_row_security` を選択します。

   1. **[Target table]** (ターゲットテーブル) で、テーブル `amazon_reviews` を選択します。

   1.  **[Column-level access]** (列レベルのアクセス) は、デフォルトのままにします。

   1. **[Row filter expression]** (行フィルター式) に「`marketplace='US'`」と入力します。

   1.  **[フィルターを作成]** をクリックします。

1. 日本の `marketplace` データへのアクセスを制限するフィルターを作成します。

   1. **[Data filters]** (データフィルター) ページで、**[Create new filter]** (新しいフィルターを作成) を選択します。

   1. **[Data filter name]** (データフィルター名) に、「`amazon_reviews_JP`」と入力します。

   1. **[Target database]** (ターゲットデータベース) で、データベース `lakeformation_tutorial_row_security` を選択します。

   1.  **[Target table]** (ターゲットテーブル) で、`table amazon_reviews` を選択します。

   1. **[Column-level access]** (列レベルのアクセス) は、デフォルトのままにします。

   1. [Row filter expression] (行フィルター式) に「`marketplace='JP'`」と入力します。

   1.  **[フィルターを作成]** をクリックします。

1. 次に、これらのデータフィルターを使用して、データアナリストに許可を付与します。米国のデータアナリスト (`DataAnalystUS`) に許可を付与するには、以下のステップに従います。

   1. **[Permissions]** (許可) で **[Data lake permissions]** (データレイクの許可) を選択します。

   1. **[Data permission]** (データの許可) で、**[Grant]** (付与) を選択します。

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

   1.  **[LF-tags or catalog resources]** (LF タグまたはカタログリソース) で、**[Named data catalog resources]** (名前付きの Data Catalog リソース) を選択します。

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

   1.  **[Tables-optional]** (テーブル-オプション) で、`amazon_reviews` を選択します。

   1. **[Data filters – optional]** (データフィルター - オプション) で、`amazon_reviews_US` を選択します。

   1. **[Data filter permissions]** (データフィルターの許可) で、**[Select]** (選択) を選択します。

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

1. 日本のデータアナリスト (`DataAnalystJP`) に許可を付与するには、以下のステップに従います。

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

   1. **[Data permission]** (データの許可) で、**[Grant]** (付与) を選択します。

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

   1.  **[LF-tags or catalog resources]** (LF タグまたはカタログリソース) で、**[Named data catalog resources]** (名前付きの Data Catalog リソース) を選択します。

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

   1.  **[Tables-optional]** (テーブル-オプション) で、`amazon_reviews` を選択します。

   1. **[Data filters – optional]** (データフィルター - オプション) で、`amazon_reviews_JP` を選択します。

   1. **[Data filter permissions]** (データフィルターの許可) で、**[Select]** (選択) を選択します。

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

## ステップ 4: データフィルターを使用してクエリを実行する
<a name="query-with-filters"></a>

製品レビューテーブルにデータフィルターをアタッチして、いくつかのクエリを実行し、Lake Formation で許可がどのように適用されるかを確認します。

1. Athena コンソール ([https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home)) に `DataAnalystUS` ユーザーとしてサインインします。

1. 次のクエリを実行し、定義した行レベルの許可に基づいてフィルタリングされたレコードをいくつか取得します。

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   次のスクリーンショットは、クエリ結果を示しています。  
![マーケットプレイス、顧客 ID、レビュー ID、製品の詳細、評価の列を含む Amazon 製品レビューを示すクエリ結果テーブル。](http://docs.aws.amazon.com/ja_jp/lake-formation/latest/dg/images/cbac-tut-query-results3.png)

1. 同様に、クエリを実行し、マーケットプレイスごとのレコードの総数をカウントします。

   ```
   SELECT marketplace , count ( * ) as total_count
   FROM lakeformation_tutorial_row_security .amazon_reviews
   GROUP BY marketplace
   ```

   このクエリ結果には、結果内の `marketplace` `US` のみが表示されます。これは、ユーザーに許可された表示は、`marketplace` 列の値が `US` と等しい行のみであるためです。

1. `DataAnalystJP` ユーザーに切り替えて、同じクエリを実行します。

   ```
   SELECT * 
   FROM lakeformation_tutorial_row_security.amazon_reviews
   LIMIT 10
   ```

   クエリ結果には、`JP` `marketplace` に属するレコードのみが表示されます。

1. クエリを実行し、`marketplace` あたりのレコードの総数をカウントします。

   ```
   SELECT marketplace, count(*) as total_count
   FROM lakeformation_tutorial_row_security.amazon_reviews
   GROUP BY marketplace
   ```

   クエリ結果には、`JP` `marketplace` に属する行のみが表示されます。

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

**リソースをクリーンアップする**

に不要な料金が発生しないように AWS アカウント、このチュートリアルで使用した AWS リソースを削除できます。
+ [Cloud Formation スタックを削除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)します。