概要
ハイブリッドアクセスモードとは、既存のデータカタログに対する制御を保持しつつ、特定のリソースとプリンシパルに対して Lake Formation によるアクセス制御を適用する機能です。
ハイブリッドアクセスモードを利用した場合の認証フローは、以下がとても分かりやすいのですが、今回は実際に動作を確認してみようと思います。
やること
以下を行って、ハイブリッドアクセスモード有効時の動作を確認します。
- 2 パターンのユーザーを作成する
- Lake Formation を使わずにデータカタログを使用している既存ユーザー (user1)
- Lake Formation によるアクセス制御を適用する新規ユーザー (user2)
- Lake Formation にハイブリッドアクセスモードで S3 を登録し、新規ユーザーをオプトインする
- 各ユーザーにて Athena で S3 へクエリを発行し、共存可能なことを確認する
正確ではありませんが、以下のような構成を想定しています。
準備
サンプルファイル用意
Athena でクエリする S3 バケットを用意し、テスト用のファイルを配置します。
$ aws s3 ls --recursive s3://k-log-athena-bucket
2024-09-18 09:40:21 6 test_a/test_a.csv
2024-09-18 09:40:06 6 test_b/test_b.csv
ユーザー作成
動作確認用に以下の権限をもった IAM User を作成します。
- user1
- AmazonAthenaFullAccess
- インラインポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Put*",
"s3:Get*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::k-log-athena-bucket",
"arn:aws:s3:::k-log-athena-bucket/*"
]
}
]
}
- user2
- AmazonAthenaFullAccess
データカタログ作成
データレイク管理者でデータベースを作成し、各テストファイル用にテーブルを作成します。
$ aws glue get-tables --database-name test_db --query 'TableList[].[DatabaseName, Name, StorageDescriptor.Location]'
[
[
"test_db",
"table_a",
"s3://k-log-athena-bucket/test_a/"
],
[
"test_db",
"table_b",
"s3://k-log-athena-bucket/test_b/"
]
]
この時点では、両テーブルのアクセスモードは Other となっています。
付与されている権限を確認すると IAMAllowedPrincipals
に対して、All
権限が付与されています。
この状態では既存のアクセス制御設定が有効となっています。
k-log-athena-bucket
へのアクセス許可を付与された user1 は Athena で両テーブルにクエリを実行できますが、アクセス許可を持たない user2 でクエリを実行すると AccessDenied
が返却されます。
設定
user2 に対してハイブリッドアクセスモードを設定していきます。設定はデータレイク管理者で行います。
ロケーションの登録
k-log-athena-bucket
を Lake Formation に登録します。
[Data lake locations] メニューにて、”Register location” ボタンをクリックします。
- 「Amazon S3 path」に
k-log-athena-bucket
(Athena のアクセス先 S3 バケット) を選択します。 - 今回は IAM role にサービスロールを指定します。
- 「Permission mode」では “Hybrid access mode” を選択します。
ハイブリッドアクセスモードの設定は、そのロケーションに紐づくすべてのリソースで有効となります。
When registering an Amazon S3 location with Lake Formation, you have the option to either enforce Lake Formation permissions for all resources at this location or use hybrid access mode.
https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-access-mode.html
そのため、この時点で両テーブルのアクセスモードは Hybrid access
に変わります。
権限付与
user2 に対して Lake Formation 権限を付与します。今回は LF タグを利用して user2 に SELECT
権限を付与します。
LF タグ作成
[LF-Tags and permissions] メニューで “Add LF-Tag” をクリックします。
- Key: HybridModeAccess
- Values: user2
LF タグ付与
[Tables] メニューで “table_a” をクリックし、[LF-Tags] タブにて “Edit LF-Tags” ボタンをクリックします。
- “Assign new LF-Tag” ボタンをクリックして、作成した LF タグを設定します。
Lake Formation 権限付与
[Data lake permissions] メニューで “Grant” ボタンをクリックします。
- 「Principals」で user2 を選択します。
- 「LF-Tags or catalog resources」で作成していた LF タグを指定します。
- 「Table permissions」で
Select
を選択します。
ユーザーのオプトイン
Lake Formation 権限を使用するように user2 をオプトインします。
[Hybrid access mode] メニューにて “Add” ボタンをクリックします。
- 対象のデータベースとテーブルを選択します。
- プリンシパルには user2 を選択します。
確認
ハイブリッドアクセスモードの設定が完了したので、user2 で AWS にサインインして Athena でクエリしてみます。
table_a
table_a
へのクエリが成功するようになりました。
table_b
table_b
へのクエリは引き続き AccessDenied
で失敗します。
user1 の場合は、IAMAllowedPrincipals
グループの設定により、ハイブリッドアクセスモードの設定前と変わらずクエリが成功します。
user1 で AWS にサインインして Athena でクエリしてみます。
まとめ
ここまで Lake Formation のハイブリッドアクセスモードの動作をみてきました。
ハイブリッドアクセスモードがあることで、既存のアクセス制御から Lake Formation のアクセス制御へ段階的に移行できることを理解いただけたかと思います。
この記事が、どなたかの役に立てば幸いです。