行レベルのアクセスコントロールによるデータレイクの保護
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 設定を変更する
重要
AWS 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: リソースをプロビジョニングする
このチュートリアルには、クイックセットアップ用の AWS CloudFormation テンプレートが含まれています。このテンプレートを参照し、ニーズに合わせてカスタマイズできます。AWS CloudFormation テンプレートによって以下のリソースが生成されます。
ユーザーおよびポリシー (以下のロール向け):
DataLakeAdmin
DataAnalystUS
DataAnalystJP
Lake Formation データレイクの設定と許可
サンプルデータファイルをパブリックの Amazon S3 バケットからユーザーの Amazon S3 バケットにコピーするために使用する Lambda 関数 (Lambda を利用する AWS CloudFormation カスタムリソース)
データレイクとして機能する Amazon S3 バケット
AWS Glue Data Catalog データベース、テーブル、パーティション
リソースを作成する
AWS CloudFormation テンプレートを使用してリソースを作成するには、以下のステップに従います。
米国東部 (バージニア北部) リージョンで AWS 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 AWS 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 つは日本マーケットプレイスを担当するアナリスト用です。次に、アナリストにそれぞれの許可を付与します。
データフィルターを作成して許可を付与する
US
marketplace
データへのアクセスを制限するためのフィルターを作成します。米国東部 (バージニア北部) リージョンで
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
このクエリ結果には、結果内の
marketplace
US
のみが表示されます。これは、ユーザーに許可された表示は、marketplace
列の値がUS
と等しい行のみであるためです。 -
DataAnalystJP
ユーザーに切り替えて、同じクエリを実行します。SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10
クエリ結果には、
JP
marketplace
に属するレコードのみが表示されます。 -
クエリを実行し、
marketplace
あたりのレコードの総数をカウントします。SELECT marketplace, count(*) as total_count FROM lakeformation_tutorial_row_security.amazon_reviews GROUP BY marketplace
クエリ結果には、
JP
marketplace
に属する行のみが表示されます。