ハイブリッドアクセスモード

Lake Formation

概要

ハイブリッドアクセスモードとは、既存のデータカタログに対する制御を保持しつつ、特定のリソースとプリンシパルに対して Lake Formation によるアクセス制御を適用する機能です。

ハイブリッドアクセスモードを利用した場合の認証フローは、以下がとても分かりやすいのですが、今回は実際に動作を確認してみようと思います。

引用: https://docs.aws.amazon.com/lake-formation/latest/dg/hybrid-access-workflow.html

やること

以下を行って、ハイブリッドアクセスモード有効時の動作を確認します。

  • 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 のアクセス制御へ段階的に移行できることを理解いただけたかと思います。

この記事が、どなたかの役に立てば幸いです。