AWS Lake Formationのチュートリアルをやってみた!

2020.04.17

前回のブログでAWS Lake Formationを少し触ってみましたが、イマイチ概念がつかめなかったのでこちらのチュートリアルもやってみようと思います。

チュートリアルは2つ用意されているのですが、今回は

  • Tutorial: Creating a Data Lake from an AWS CloudTrail Source

をやっていきます。

※個人的にわかりやすい手順にまとめているので、実際のステップと異なる部分がありますが、ご了承ください。

Lakeformationとは?

個人的に押さえておきたいポイントは次の3つです。

  1. IAMを拡張した独自のアクセスコントロールモデルによるきめ細かなアクセス制御が可能
  2. AWS Glueの拡張機能(データカタログ、ジョブ、クローラー、ワークフローなどの実態はGlueのそれ)
  3. AWS Lake Formation自体は無料だが、配下のサービス利用費が発生

Black Beltの資料がとても参考になりました。さらっと目を通しておくと良いでしょう。

事前準備

※ これ以降の作業はAdministratorAccess権限を持つ管理者としてログインし、実施していきます。

Lake Fromationの設定

Lake Formationを利用する上での基本設定です。

長くなるので今回のブログでは割愛しますが、ドキュメントを参考に設定を済ませておいてください。

CloudTrailの有効化

CloudTrailは、指定されたS3バケットに証跡のログファイルを配信します。

こちらも今回割愛しますが、ドキュメントCloudTrailを有効化してS3へログを吐き出すように設定しておいてください。

IAM Userの作成

Lake Formationを利用するユーザーを作成します。

アクセス権限には最低限のポリシーとして、

  • AWS管理ポリシー: AmazonAthenaFullAccess
  • インラインポリシー: DatalakeUserBasic
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess",
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartitions"
            ],
            "Resource": "*"
        }
    ]
}

をアタッチします。

User name/Passwordは後ほど利用するので保管しておいてください。

LakeFormationWorkflowRoleへCloudTrailへのアクセス権限を付与

事前設定で作成済みのLakeFormationWorkflowRoleにCloudTrailへのアクセス権限を付与します。

  • ポリシードキュメント
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": ["arn:aws:s3:::<your-s3-cloudtrail-bucket>/*"]
        }
    ]
}

この時点で、LakeFormationWorkflowRoleには

  • AWSGlueServiceRole
  • DatalakeGetCloudTrail
  • LakeFormationWorkflow

の3つのポリシーがアタッチされているはずです。

データレイク用のS3バケットを作成

Lake Formation内で扱えるデータレイク(S3バケット)は事前に登録する必要があります。 逆に言うと、登録をしないとLake Formation経由でのデータアクセスはできません。

今回はデータレイク用のバケットを新しく作成します。

Lake Formation側にData lake locationsを登録

先ほど作成したS3バケットをLake Formationのデータレイクとして登録します。

コンソールの「Register and ingest」→「Data lake locations」→「Register location」から設定できます。

LakeFormationWorkflowRoleにデータレイクへのアクセス権限を付与

ワークフローのロールLakeFormationWorkflowRoleに、先ほど登録したデータレイクへのアクセス権限を付与します。

コンソールの「Permissions」→「Data locations」→「Grant」から設定できます。

データカタログにデータベースを登録

ここでのデータカタログとデータベースは、実態としてAWS Glueの機能を呼び出しているだけです。

コンソールの「Data catalog」→「Databases」→「Create Database」から設定できます。

データベース名だけ入力して作成を完了します。

LakeFormationWorkflowRoleにデータベースへの操作権限を付与

ややこしくなってきまいしたが、これから作成するワークフローにはデータカタログにメタデータを作成するという処理があります。

そのため、ここではの権限をLakeFormationWorkflowRoleに付与します。

コンソールの「Permissions」→「Data permissions」→「Grant」から設定できます。

Blueprintからワークフローを作成

ようやくワークフローを作成です。

ここで作成するワークフローの実態はAWS Glue Workflowです。

コンソールの「Register and ingest」→「Blueprints」→「Use blueprints」から設定できます。

設定内容は下記を参考にしてください。

  • Blueprint type
    • AWS CloudTrail
  • Import source
    • CloudTrail name: 対象のCloudTrail
    • Start date: 任意
  • Import target
    • Target database: lakeformation_cloudtrail
    • Target storage location: s3://<yourName>-datalake-cloudtrail
    • Data format: Parquet
  • Import frequency
    • Run on demand
  • Import options
    • Workflow name: lakeformationcloudtrailtest
    • IAM role: LakeFormationWorkflowRole
    • Table prefix: cloudtrailtest

ワークフローの作成には数分かかります。

ワークフローの実行

ワークフローの作成が完了したら実行してみます。

ワークフローがCompleteになったら、データレイクとして登録したS3バケットをみてみましょう。CloudTrailのログが登録されているかと思います。

ユーザーにSelect権限を付与

序盤で作成したdatalake_userユーザーにデータベースlakeformation_cloudtrailへのSelect権限を付与します。

コンソールの「Permissions」→「Data permissions」→「Grant」から設定できます。

Amazon AthenaからLake Formation経由でクエリを実行

実際にクエリを実行していきます。

datalake_userユーザーでログインし直し、Amazon Athenaのベージに遷移してください。

データベースを選択後、該当のテーブルのポップアップメニューからPreviewを選択すると、自動でクエリが作成されます。 こちらを実行して、Select文が実行できることを確認します。

また、Select文以外の操作は権限を付与していないので、エラーになることを確認します。

まとめ

いかがだったでしょうか。

AWS Lake Formationではきめ細かなアクセスコントロールが可能なのですが、そのための権限項目が多く初見ではわかりづらいです。

一度チュートリアルを試してみるとスッキリするかと思います。

以上どなたかの役に立てば幸いです。