この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回のブログでAWS Lake Formationを少し触ってみましたが、イマイチ概念がつかめなかったのでこちらのチュートリアルもやってみようと思います。
チュートリアルは2つ用意されているのですが、今回は
- Tutorial: Creating a Data Lake from an AWS CloudTrail Source
をやっていきます。
※個人的にわかりやすい手順にまとめているので、実際のステップと異なる部分がありますが、ご了承ください。
Lakeformationとは?
個人的に押さえておきたいポイントは次の3つです。
- IAMを拡張した独自のアクセスコントロールモデルによるきめ細かなアクセス制御が可能
- AWS Glueの拡張機能(データカタログ、ジョブ、クローラー、ワークフローなどの実態はGlueのそれ)
- 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://-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ではきめ細かなアクセスコントロールが可能なのですが、そのための権限項目が多く初見ではわかりづらいです。
一度チュートリアルを試してみるとスッキリするかと思います。
以上どなたかの役に立てば幸いです。