行レベルのアクセスコントロールによるデータレイクの保護 - AWS Lake Formation

行レベルのアクセスコントロールによるデータレイクの保護

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 アクセスコントロールのみを使用する) を無効にします。

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

  2. [Data Catalog] で、[Settings] (設定) を選択します。

  3. [Use only IAM access control for new databases] (新しいデータベースには IAM アクセスコントロールのみを使用する) と [Use only IAM access control for new tables in new databases] (新しいデータベース内の新しいテーブルには IAM アクセスコントロールのみを使用する) を選択解除します。

  4. [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 テンプレートを使用してリソースを作成するには、以下のステップに従います。

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

  2. [スタックの起動] を選択します。

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

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

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

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

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

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

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

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

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

  12. 最終ページで詳細を確認し、[I acknowledge that AWS CloudFormation might create IAM resources] (CloudFormation によって IAM リソースが作成される場合があることを承認します) を選択します。

  13. [Create] (作成) を選択します。

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

ステップ 2: データフィルターなしでクエリを実行する

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

行レベルのアクセスコントロールなしでテーブルに対してクエリを実行する
  1. DatalakeAdmin ユーザーとして Athena コンソール (https://console.aws.amazon.com/athena/) にサインインし、次のクエリを実行します。

    SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10

    次のスクリーンショットは、クエリ結果を示しています。このテーブルのパーティションは 1 つ (product_category=Video) のみであるため、各レコードは動画製品のレビューコメントを示します。

    Query results showing 10 rows of Amazon product reviews for VHS tapes with various ratings.
  2. 次に、集計クエリを実行して、marketplace あたりのレコードの総数を取得します。

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

    次のスクリーンショットは、クエリ結果を示しています。marketplace 列には 5 つの異なる値があります。以降のステップでは、marketplace 列を使用して行ベースのフィルターをセットアップします。

    Query results showing marketplace data with total counts for FR, UK, JP, DE, and US.

ステップ 3: データフィルターを設定し、許可を付与する

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    9. [Grant] (付与) を選択します。

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

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

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

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

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

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

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

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

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

    9. [Grant] (付与) を選択します。

ステップ 4: データフィルターを使用してクエリを実行する

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

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

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

    SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10

    次のスクリーンショットは、クエリ結果を示しています。

    Query results showing 10 rows of Amazon product reviews data, including marketplace, ratings, and product titles.
  3. 同様に、クエリを実行し、マーケットプレイスごとのレコードの総数をカウントします。

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

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

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

    SELECT * FROM lakeformation_tutorial_row_security.amazon_reviews LIMIT 10

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

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

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

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

ステップ 5: AWS のリソースをクリーンアップする

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

AWS アカウントへの不要な請求が発生しないように、このチュートリアルで使用した AWS リソースを削除できます。