翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
行レベルのアクセスコントロールによるデータレイクの保護
AWS Lake Formation の行レベルのアクセスコントロールを使用すると、データコンプライアンスおよびガバナンスポリシーに基づいて、テーブル内の特定の行へのアクセスを提供できます。数十億のレコードを格納する大きなテーブルがある場合、さまざまなユーザーやチームがアクセスして表示できるデータを、許可した範囲に限定する方法が必要です。行レベルのアクセスコントロールは、データを保護するとともに、ジョブの実行に必要なデータへのアクセス許可をユーザーに付与するシンプルでパフォーマンスの高い方法です。Lake Formation は、一元的な監査とコンプライアンスレポートを通じて、どのプリンシパルが、どのデータに、いつ、どのサービスを通じてアクセスしたかを特定します。
このチュートリアルでは、Lake Formation での行レベルのアクセスコントロールの仕組みと設定方法について説明します。
このチュートリアルには、必要なリソースをすばやく設定するための AWS CloudFormation テンプレートが含まれています。このテンプレートを参照し、ニーズに合わせてカスタマイズできます。
トピック
対象者
このチュートリアルは、データスチュワード、データエンジニア、データアナリストを対象としています。次の表は、データ所有者とデータコンシューマーのロールと責任を示しています。
| ロール | 説明 |
|---|---|
| IAM 管理者 | ユーザーおよびロール、Amazon Simple Storage Service (Amazon S3) バケットを作成できるユーザー。AWS マネージドポリシーとして AdministratorAccess を持っています。 |
| データレイク管理者 | データレイクの設定、データフィルターの作成、およびデータアナリストへの許可の付与を担当するユーザー。 |
| データアナリスト | データレイクに対してクエリを実行できるユーザー。複数の異なる国 (このユースケースの場合は日本と米国) に居住するデータアナリストは、自国の顧客の製品レビューのみを分析でき、コンプライアンス上の理由から、他国の顧客のデータを表示することはできません。 |
前提条件
このチュートリアルを開始する前に、適切なアクセス許可を持つ管理ユーザーとしてサインインするために使用できる AWS アカウント が必要です。詳細については、「初期設定 AWS タスクを完了する」を参照してください。
このチュートリアルでは、ユーザーが IAM に精通していることを前提としています。IAM については、「IAM ユーザーガイド」を参照してください。
Lake Formation 設定を変更する
重要
CloudFormation テンプレートを起動する前に、以下のステップに従って、Lake Formation でオプション [Use only IAM access control for new databases/tables] (新しいデータベース/テーブルには IAM アクセスコントロールのみを使用する) を無効にします。
米国東部 (バージニア北部) リージョンまたは米国西部 (オレゴン) リージョンで、Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/
) にサインインします。 [Data Catalog] で、[Settings] (設定) を選択します。
[Use only IAM access control for new databases] (新しいデータベースには IAM アクセスコントロールのみを使用する) と [Use only IAM access control for new tables in new databases] (新しいデータベース内の新しいテーブルには IAM アクセスコントロールのみを使用する) を選択解除します。
[Save] (保存) を選択します。
ステップ 1: リソースをプロビジョニングする
このチュートリアルには、クイックセットアップ用の CloudFormation テンプレートが含まれています。このテンプレートを参照し、ニーズに合わせてカスタマイズできます。CloudFormation テンプレートによって以下のリソースが生成されます。
ユーザーおよびポリシー (以下のロール向け):
DataLakeAdmin
DataAnalystUS
DataAnalystJP
Lake Formation データレイクの設定と許可
サンプルデータファイルをパブリックの Amazon S3 バケットからユーザーの Amazon S3 バケットにコピーするために使用する Lambda 関数 (Lambda を利用する CloudFormation カスタムリソース)
データレイクとして機能する Amazon S3 バケット
AWS Glue Data Catalog データベース、テーブル、パーティション
リソースを作成する
CloudFormation テンプレートを使用してリソースを作成するには、以下のステップに従います。
米国東部 (バージニア北部) リージョンで CloudFormation コンソール (https://console.aws.amazon.com/cloudformation
) にサインインします。 [スタックの起動]
を選択します。 [Create Stack] (スタックの作成) 画面で、[Next] (次へ) を選択します。
[Stack name] (スタック名) を入力します。
[DataLakeAdminUserName] と [DataLakeAdminUserPassword] に、データレイク管理者ユーザーとして自分の IAM ユーザーネームおよびパスワードを入力します。
[DataAnalystUsUserName] と [DataAnalystUsUserPassword] に、米国マーケットプレイスを担当するデータアナリストとして指定するユーザーのユーザーネームとパスワードを入力します。
[DataAnalystJpUserName] と [DataAnalystJpUserPassword] に、日本マーケットプレイスを担当するデータアナリストとして指定するユーザーのユーザーネームとパスワードを入力します。
[DataLakeBucketName] に、データバケットの名前を入力します。
[DatabaseName] と [TableName] は、デフォルトのままにします。
[Next] (次へ) を選択します。
次のページで、[Next] (次へ) を選択します。
最終ページで詳細を確認し、[I acknowledge that CloudFormation might create IAM resources] (CloudFormation によって IAM リソースが作成される場合があることを承認します) を選択します。
[Create] (作成) を選択します。
スタックの作成が完了するまでに 1 分かかる場合があります。
ステップ 2: データフィルターなしでクエリを実行する
環境の設定後に、製品レビューテーブルに対してクエリを実行できます。まず、行レベルのアクセスコントロールなしでテーブルにクエリを実行し、データが表示されることを確認します。Amazon Athena でクエリを初めて実行する場合は、クエリ結果の場所を設定する必要があります。
行レベルのアクセスコントロールなしでテーブルに対してクエリを実行する
-
DatalakeAdminユーザーとして Athena コンソール (https://console.aws.amazon.com/athena/) にサインインし、次のクエリを実行します。 SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10次のスクリーンショットは、クエリ結果を示しています。このテーブルのパーティションは 1 つ (
product_category=Video) のみであるため、各レコードは動画製品のレビューコメントを示します。
-
次に、集計クエリを実行して、
marketplaceあたりのレコードの総数を取得します。SELECT marketplace, count(*) as total_count FROM lakeformation_tutorial_row_security.amazon_reviews GROUP BY marketplace次のスクリーンショットは、クエリ結果を示しています。
marketplace列には 5 つの異なる値があります。以降のステップでは、marketplace列を使用して行ベースのフィルターをセットアップします。
ステップ 3: データフィルターを設定し、許可を付与する
このチュートリアルでは、2 人のデータアナリストを使用します。1 人は米国マーケットプレイス、もう 1 人は日本マーケットプレイスを担当しています。各アナリストは Athena を使用して、各担当マーケットプレイスのみのカスタマーレビューを分析します。2 つの異なるデータフィルターを作成します。1 つは米国マーケットプレイスを担当するアナリスト用、もう 1 つは日本マーケットプレイスを担当するアナリスト用です。次に、アナリストにそれぞれの許可を付与します。
データフィルターを作成して許可を付与する
USmarketplaceデータへのアクセスを制限するためのフィルターを作成します。米国東部 (バージニア北部) リージョンで
DatalakeAdminユーザーとして Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/) にサインインします。 [Data filters] (データフィルター) を選択します。
[Create new filter] (新しいフィルターの作成) を選択します。
[Data filter name] (データフィルター名) に、「
amazon_reviews_US」と入力します。[Target database] (ターゲットデータベース) で、データベース
lakeformation_tutorial_row_securityを選択します。[Target table] (ターゲットテーブル) で、テーブル
amazon_reviewsを選択します。[Column-level access] (列レベルのアクセス) は、デフォルトのままにします。
[Row filter expression] (行フィルター式) に「
marketplace='US'」と入力します。[フィルターを作成] をクリックします。
-
日本の
marketplaceデータへのアクセスを制限するフィルターを作成します。[Data filters] (データフィルター) ページで、[Create new filter] (新しいフィルターを作成) を選択します。
[Data filter name] (データフィルター名) に、「
amazon_reviews_JP」と入力します。[Target database] (ターゲットデータベース) で、データベース
lakeformation_tutorial_row_securityを選択します。[Target table] (ターゲットテーブル) で、
table amazon_reviewsを選択します。[Column-level access] (列レベルのアクセス) は、デフォルトのままにします。
[Row filter expression] (行フィルター式) に「」と入力します
marketplace='JP'[フィルターを作成] をクリックします。
次に、これらのデータフィルターを使用して、データアナリストに許可を付与します。米国のデータアナリスト (
DataAnalystUS) に許可を付与するには、以下のステップに従います。[Permissions] (許可) で [Data lake permissions] (データレイクの許可) を選択します。
[Data permission] (データの許可) で、[Grant] (付与) を選択します。
-
[Principals] (プリンシパル) で、[IAM users and roles] (IAM ユーザーおよびロール)を選択し、ロール
DataAnalystUSを選択します。 [LF-tags or catalog resources] (LF タグまたはカタログリソース) で、[Named data catalog resources] (名前付きの Data Catalog リソース) を選択します。
-
[Database] (データベース) で、
lakeformation_tutorial_row_securityを選択します。 [Tables-optional] (テーブル-オプション) で、
amazon_reviewsを選択します。[Data filters – optional] (データフィルター - オプション) で、
amazon_reviews_USを選択します。-
[Data filter permissions] (データフィルターの許可) で、[Select] (選択) を選択します。
[Grant] (付与) を選択します。
日本のデータアナリスト (
DataAnalystJP) に許可を付与するには、以下のステップに従います。[Permissions] (許可) で、[Data lake permissions] (データレイクの許可) を選択します。
[Data permission] (データの許可) で、[Grant] (付与) を選択します。
-
[Principals] (プリンシパル) で、[IAM users and roles] (IAM ユーザーおよびロール)を選択し、ロール
DataAnalystJPを選択します。 [LF-tags or catalog resources] (LF タグまたはカタログリソース) で、[Named data catalog resources] (名前付きの Data Catalog リソース) を選択します。
-
[Database] (データベース) で、
lakeformation_tutorial_row_securityを選択します。 [Tables-optional] (テーブル-オプション) で、
amazon_reviewsを選択します。[Data filters – optional] (データフィルター - オプション) で、
amazon_reviews_JPを選択します。-
[Data filter permissions] (データフィルターの許可) で、[Select] (選択) を選択します。
[Grant] (付与) を選択します。
ステップ 4: データフィルターを使用してクエリを実行する
製品レビューテーブルにデータフィルターをアタッチして、いくつかのクエリを実行し、Lake Formation で許可がどのように適用されるかを確認します。
-
Athena コンソール (https://console.aws.amazon.com/athena/
) に DataAnalystUSユーザーとしてサインインします。 -
次のクエリを実行し、定義した行レベルの許可に基づいてフィルタリングされたレコードをいくつか取得します。
SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10次のスクリーンショットは、クエリ結果を示しています。
-
同様に、クエリを実行し、マーケットプレイスごとのレコードの総数をカウントします。
SELECT marketplace , count ( * ) as total_count FROM lakeformation_tutorial_row_security .amazon_reviews GROUP BY marketplaceこのクエリ結果には、結果内の
marketplaceUSのみが表示されます。これは、ユーザーに許可された表示は、marketplace列の値がUSと等しい行のみであるためです。 -
DataAnalystJPユーザーに切り替えて、同じクエリを実行します。SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10クエリ結果には、
JPmarketplaceに属するレコードのみが表示されます。 -
クエリを実行し、
marketplaceあたりのレコードの総数をカウントします。SELECT marketplace, count(*) as total_count FROM lakeformation_tutorial_row_security.amazon_reviews GROUP BY marketplaceクエリ結果には、
JPmarketplaceに属する行のみが表示されます。