案件でLakeFormationを使うようになりましたので、LakeFormation関連のTipsを紹介していきたいと思います。
随時更新予定です。
1. 別リージョンのバケットにテーブルデータを保存しているテーブルはLakeFormationで権限制御できない
例えば、GlueのデータカタログやLakeFormationは東京リージョンを利用しているが、一部のテーブルのデータはオレゴンリージョンのバケットに
保存されている場合、この一部のテーブルに対してLakeFormationで権限制御することができません。
これはLakeFormationと別リージョンのバケットはDataLakeLocationsに登録できないためだと思われます。
LakeFormationでテーブルの権限等を管理する場合、テーブルデータが存在するS3パスをDataLakeLocationsに登録する必要があります。
ただ、別リージョンのバケットはDataLakeとして登録できないため、別リージョンのバケットにデータを持つテーブルはLakeFormationの管轄外となってしまい、その恩恵を受けれられないようです。
現時点でこのような状況になった場合の影響としては以下の点が確認できました。
- LakeFomationコンソール上で別リージョンバケットにデータを持つテーブルはテーブル一覧に表示されません。
- Glueコンソール上で一覧を取得した場合のみテーブルが確認できます。
- LakeFormationの権限設定を付与できません。
- 該当テーブルにアクセスする際の権限判定はIAMポリシーのみで判定します。(LakeFormationローンチ以前と同様にGlueのAPI権限があればアクセス可能)
そのため、当たり前のことではあるかもしれませんが、LakeFormationを利用する場合、テーブルデータ等も同一リージョンで管理するようにしましょう。
2. 「Use only IAM access contro」設定はDB単位でも設定されている
LakeFormationは初期状態の場合、ローンチ前の状態と互換性を保つように設定されています。つまりデフォルトで全IAMが全データカタログに対するLakeFormationの権限が付与された状態(= IAMポリシーのみで制御されている状態)になっています。
そのため、LakeFormationの権限制御を利用したい場合、まずはこの互換性の設定を外す必要があります。
まずはLakeFormationコンソールの「Setting」画面から「Default permissions for newly created databases and tables」の項目にあるすべてのチェックボックスのチェックを外した状態にします。
この状態にすることで、今後作成されるDBやテーブルには互換性維持用の権限は付与されず、基本的にDB、テーブルを作成したIAMに対してのみアクセスできる(LakeFormationの権限制御が有効になっている)状態になります。
ただ、注意点としては、見出しにある通り、各DBに対しても「Use only IAM access contro」の設定つまり、互換性維持用の設定項目があります。
LakeFormationローンチ前にすでに作成されたDBにはこの設定が有効になっていると思うので、LakeFormationの権限制御を利用する場合、
このちらの設定も無効にする必要があります。