Amazon Web Services ブログ

Amazon QuickSight と AWS Lake Formation で列レベルの承認を適用する

Amazon QuickSight は、インサイトの提供を容易にし、Amazon Simple Storage Service (Amazon S3) 上に構築したデータレイクとシームレスに統合する、高速でクラウド対応のビジネスインテリジェンスサービスです。組織内の QuickSight ユーザーは、大抵の場合、コンプライアンスとセキュリティ上の理由から、列のサブセットのみにアクセスする必要があります。列レベルのセキュリティを適用するための適切なソリューションがない場合、ビュー、データマスキング、暗号化など、追加のソリューションを開発して、セキュリティを適用する必要があります。

QuickSight アカウントでは、AWS Lake Formation の列レベルの承認を利用して、ユーザーにきめ細かいレベルのアクセス制御が適用できるようになりました。

ソリューションの概要

このソリューションでは、Lake Formation を使用してエンドツーエンドのデータパイプラインを構築し、Amazon Aurora MySQLデータベースから Amazon S3 データレイクにデータを取り込み、Lake Formation を使用して QuickSight ユーザーに列レベルのアクセス制御を適用します。

次の図は、本ソリューションのアーキテクチャを示しています。

チュートリアルの概要

このソリューションの詳細な手順には、Lake Formation を使ったデータレイクの構築が含まれています。構築には、ソースとして Aurora MySQL データベース、ターゲットデータレイクストレージとして Amazon S3 を使用します。ソースデータベースからデータレイクに単一のテーブルをインポートする Lake Formation のワークフローを作成します。次に、Lake Formation のセキュリティ機能を使用して、インポートしたテーブルで QuickSight サービスの列レベルのセキュリティを適用します。最後に、QuickSight を使用してこのデータレイクに接続し、Lake Formation が QuickSightユーザーにアクセス権を付与した列のみを可視化します。

このソリューションを実装するには、次の手順を実行してください。

  1. 前提条件
  2. ソースデータベースの作成
  3. ソースデータベースから単一のテーブルへのインポート
    • データソースへの接続の作成
    • S3バケットの作成と登録
    • データカタログでのデータベースの作成と権限の付与
    • ワークフローの作成と実行
    • データカタログ権限の付与
  4. Lake Formation での列レベルのセキュリティの適用
  5. QuickSight で可視化の作成

前提条件

このチュートリアルには、以下の前提条件が必要です。

ソースデータベースの作成

このステップでは、Aurora MySQL データベースクラスターを作成し、次の GitHub リポジトリで DDL を使用して、関連するテーブルとサンプルデータを含む HR スキーマを作成します。

その後、MySQL モニターまたは所望の SQL クライアントを使用して作成したスキーマが表示されます。この投稿では、SQL Workbench を使用しました。次のスクリーンショットに例を示します。

Aurora データベースの JDBC エンドポイント情報を記録します。後続のステップで必要になります。

ソースデータベースから単一のテーブルへのインポート

次のステップを完了する前に、Lake Formation を設定し、JDBC の前提条件を満たしていることを確認してください。

Lake Formation のセットアップでは、datalake_user IAM ユーザーが作成されます。QuickSight ユーザーと同じユーザーを追加する必要があります。手順については、「Amazon QuickSight 内でのユーザーアクセスの管理」をご参照ください。[Role] では、AUTHOR を選択します。

データソースへの接続の作成

IAM ユーザー datalake_admin および datalake_user の作成を含む、Lake Formation の前提条件を完了したら、Aurora データベースへの接続を作成します。手順については、「Create a Connection in AWS Glue (AWS Glueで接続を作成する)」をご参照ください。次の情報を指定します。

  • Connection name<プレフィックス>-blog-datasource
  • 接続タイプ – JDBC
  • データベース接続パラメーター – JDBC URL、ユーザー名、パスワード、VPC、サブネット、セキュリティグループ

S3バケットの作成と登録

このステップでは、<プレフィックス> -blog-datalake という名前の S3 バケットを作成します。これは、データレイクのルートロケーションとして使用します。パケットを作成したら、Amazon S3 パスを登録する必要があります。最後に、データロケーションの権限を付与します。

データカタログでのデータベースの作成と権限の付与

メタデータテーブルを格納する<プレフィックス>-blog-database という名前の Lake Formation データカタログにデータベースを作成します。手順については、「Create a Database in the Data Catalog (データカタログにデータベースを作成する)」をご参照ください。

データベースを作成したら、ワークフローの実行に使用する LakeFormationWorkflowRole ロールにメタデータテーブルへのデータ権限を付与します。

ワークフローの作成と実行

このステップでは、Lake Formation ブループリントを使用して、ソースデータベースから EMPLOYEES テーブルをコピーします。次の情報を指定します。

  • ブループリントタイプ – データベーススナップショット
  • データベース接続<プレフィックス>-blog-datasource
  • ソースデータパスHR/EMPLOYEES
  • ターゲットデータベース<プレフィックス>-blog-database
  • ターゲットストレージのロケーション<プレフィックス>-blog-datalake
  • ワークフロー名<プレフィックス>-datalake-quicksight
  • IAM ロールLakeFormationWorkflowRole
  • テーブルプレフィックスblog

手順については、「Use a Blueprint to Create a Workflow (ブループリントを使用してワークフローを作成する)」をご参照ください。

ワークフローの準備ができたら、ワークフローを開始し、[ View graph (グラフを表示) を選択してそのステータスを確認できます。ワークフローが完了すると、<プレフィックス> -blog-database の下にあるデータカタログの employee テーブルが表示されます。次のスクリーンショットに例を示します。

Lake Formation と統合されている Athena を使用して、インポートしたデータを表示することもできます。このためには、[Actions (アクション)] ドロップダウンメニューから [View Data (データの表示)] を選択する必要があります。次のスクリーンショットに例を示します。

データカタログ権限の付与

このステップでは、IAM ユーザー datalake_user への Lake Formation データカタログアクセスを提供します。これは、QuickSight でダッシュボードを作成するために追加したユーザーと同じです。この使用例では、[Database permissions (データベース権限)]で、[Create table (テーブルの作成)]と[Alter (変更)] を選択しますが、特定の要件に基づいて権限レベルを変更できます。手順については、「Granting Data Catalog Permissions (データカタログ権限の付与)」をご参照ください。

このステップが完了すると、データベース <プレフィックス>-blog-databaseの権限が表示されます。

Lake Formation での列レベルのセキュリティの適用

テーブルがデータレイクにインポートされたので、データセットに列レベルのセキュリティを適用します。この使用例では、ビジネスインテリジェンスの QuickSight ユーザーから Salary 列と Phone_Number 列を非表示にします。

  1. Lake Formation コンソールの [Data catalog] で、[Databases] を選択する。
  2. データベースのリストから <プレフィックス>-blog-database を選択する。
  3. [View tables (テーブルの表示)] を選択する。
  4. blog_hr_employees を選択する。
  5. [アクション] ドロップダウンメニューから、[Grant (付与)] を選択する。

  1. Active Directory および Amazon QuickSight ユーザーとグループの場合、QuickSight ユーザーの ARN を提供する。

AWS コマンドラインインターフェイス (AWS CLI) に aws quicksight list-users --aws-account-id < AWS アカウント ID> --namespace default --region us-east-1 のコードを入力して ARN を見つけることができます。

  1. [Database] では、[<プレフィックス>-blog-database] を選択する。
  2. [Table] では、[blog_hr_employees] を選択する。
  3. [Columns] では、[Exclude columns] を選択する。
  4. [Exclude columns] では、[salary] と [phone_number] を選択する。
  5. [Table permissions] では、 [Select] をオンにする。

コンソールに、Permission granted for: datalake_user to Exclude: <プレフィックス>-blog-database.blog_hr_employees.[salary, phone_number] という確認の表示があります。

また、[Permissions (権限)] タブに移動してデータベースとテーブルをフィルタリングすることにより、Lake Formation コンソールで QuickSight ユーザーに適切な権限が反映されていることを確認できます。

次のコードを使用して、AWS CLI で列レベルのアクセス権限を指定することもできます。

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=<QuickSight User ARN> --permissions "SELECT" --resource '{ "TableWithColumns": {"DatabaseName":"<yourPrefix>-blog-database", "Name":"blog_hr_employees", "ColumnWildcard": {"ExcludedColumnNames": ["salary", "phone_number"]}}}'  --region us-west-2 --profile datalake_admin

QuickSight で可視化の作成

このステップでは、QuickSight を使用して、データレイクの blog_hr_employees テーブルにアクセスします。QuickSight からこのデータセットにアクセスすると、前のステップでソーステーブルから除外した salary 列と phone_number 列が QuickSight に表示されません。

  1. datalake_user IAMユーザーを使用して QuickSight にログインする。
  2. [New analysis] を選択する。
  3. [新しいデータセット] を選択する。
  4. データソースとして [Athena] を選択する。

  1. データソース名として、Athena-HRDB を入力する。
  2. [Database] では、[<プレフィックス>-blog-database] を選択する。
  3. [Tables] では、[blog_hr_employees] を選択する。
  4. [Select] をクリックする。

  1. [Import to SPICE for quicker analysis (迅速な分析のためにSPICEにインポート)] を選択するか、データを直接クエリする。

このユースケースには、[Import to SPICE] を選択します。これにより、本番環境のセットアップで可視化が速くなり、スケジュールされた更新を実行して、ダッシュボードが現在のデータを参照していることを確認できます。詳細については、「Scheduled Refresh for SPICE Data Sets on Amazon QuickSight (QuickSight で SPICE データセットのスケジュールされた更新)」 をご参照ください。

前の手順を完了すると、データが SPICE マシンにインポートされ、QuickSight 可視化ダッシュボードが表示されます。SPICE が[salary]フィールド および [phone_number] フィールドをテーブルから除外したことがわかります。次のスクリーンショットは、円グラフの可視化を作成して、各部門の従業員数を表示したものです。

クリーンアップ

今後の請求が発生しないようにするには、S3 バケット、Aurora クラスター、その他の関連リソースなど、このウォークスルーで作成したリソースを削除します。

まとめ

データレイク内で、機密データへのアクセスをさまざまなユーザーに制限することは、非常に重要な課題です。この投稿では、Lake Formation を使用して、QuickSightダッシュボードユーザーに列レベルのアクセスを適用する方法を示しました。Athenaワークグループを使用すると、セキュリティをさらに強化できます。詳細については、「Amazon Athena データを使用したデータセットの作成」と「ワークグループを使用するメリット」をご参照ください。

 


著者について

Avijit Goswami は シニアエンジニアで、AWS の スタートアップソリューションアーキテクトを担当し、スタートアップのお客様が明日の企業になれるよう支援しています。Avijit は余暇に料理、旅行、スポーツ観戦、音楽鑑賞を楽しんでいます。