Edited at

Lake Formation の使い方的な②(データカタログへの権限制御)


データカタログへの権限制御する

Lake Formationは、データカタログにきめ細かな権限制御ができます。

ユーザーごとに、データカタログのDatabaseへのテーブル追加を禁止したり、あるカラムを非表示にしたり、実行できるSQLを制限したりできます。やってみます。


S3パス

s3://test-lf01/in00


Database名

lf01


テーブル名

test1


テスト用IAMユーザー

test_user1


CSVファイルをS3にアップ

ファイル名:person.csv

s3://test-lf01/in00 に以下のCSVファイルをアップ

taro, 20190101, 101, 00001

jiro, 20190202, 102, 00001
ojiro, 20190303, 101, 00002
hanako, 20190404, 103, 00004

スクリーンショット 0001-08-09 10.06.07.png

スキーマは以下を想定

name(string)

date(string)

storeid(string)

accountnumber(string)


データカタログ作成


Database作成

Lake Formationの画面で左側メニューから"Database"をクリックし、右上の[Create database]をクリック

スクリーンショット 0001-08-09 10.07.34.png

Nameに"lf01"と入れて、"Grant All to Everyone for new tables in this database"のチェックを外し、右下の[Create database]をクリック

※"Everyone"はLake Formationのユーザーグループの要素です。パブリックなユーザーという意味ではなく、Lake FormationのIAMアクセス許可を持つ全員という意味です。

"Grant All to Everyone for new tables in this database"はこのデータベースで作成される新しいテーブルに"Everyone"に対して全権限を与えるという設定。デフォルトはチェックが入っている。

スクリーンショット 0001-08-10 8.27.51.png

Databaseできた

スクリーンショット 0001-08-09 10.10.35.png


テーブル作成

Lake Formationの画面で左側メニューから"Tables"をクリックし、右上の[Create table]をクリック(今回は手動でテーブル作成)

スクリーンショット 0001-08-09 10.11.22.png

以下を入力(あとに続く)

Name: "test1"

Database: "lf01"

スクリーンショット 0001-08-09 10.13.57.png

Include path に s3://lf01/in00/

※別リージョンのバケットは選択できないっぽい

CSVにチェック

スクリーンショット 0001-08-09 10.14.22.png

右上の[Add column]をクリック

スクリーンショット 0001-08-09 10.16.48.png

カラムを追加していく。追加するカラムは↓

name(string)

date(string)

storeid(string)

accountnumber(string)

スクリーンショット 0001-08-09 10.16.59.png

追加し終わったら右下の[Submit]をクリック

スクリーンショット 0001-08-09 10.17.45.png

テーブル出来た。

スクリーンショット 0001-08-09 10.18.11.png


権限確認

Databaseに対しては、管理者はフル権限、"Everyone"もフル権限(デフォルトではDatabase作成時に"Everyone"へのフル権限が付与される設定になってる)

スクリーンショット 0001-08-10 8.40.08.png

テーブルに対しては、管理者はフル権限、"Everyone"はいない(前述のように、今回Database作成時の設定で新規作成テーブルに"Everyone"へのフル権限を付与しない設定にした)。なので管理者以外は操作できない。

スクリーンショット 0001-08-10 8.41.02.png


Athenaで確認

まずは管理者で、Lake Formationで作ったデータカタログを使い、Athenaで閲覧出来ていることが確認できる。

スクリーンショット 0001-08-09 10.23.03.png


Lake Formationによる権限管理

Lake Formationの売りの1つであるカラムレベルでの権限制御を確認する

今回は、あるユーザーに対してはstoreid, accountnumberのカラムは表示させたくない。テーブルのdropもさせたくない。という制御を入れます。


IAMユーザー作成

手順は割愛しますが、こんな感じでAdministratorのポリシーを持つtest_user1を作りました。

正真正銘administratorです

スクリーンショット 0001-08-09 10.28.09.png

test_user1でAthenaにアクセスするとDatabaseのlf01は見えますが、まだテーブルへの権限がなにもないためテーブルは表示されません。もちろんクエリもはじかれます。

Lake Formationが登場する以前だったら見えてましたね。本機能はLake Formationのリソースベースポリシーと考えればいいと思います。

スクリーンショット 0001-08-10 8.36.15.png


Lake FormationのData Permissionsで設定。当初やりたかった特定カラムだけ非表示

test_user1ユーザーに対してはstoreid, accountnumberのカラムは表示させたくない。テーブルのdropもさせたくない。という制御を入れます。

LakeFormationの画面で左側メニューの"Data Permissions"をクリックし、右上の[Grant]をクリック

スクリーンショット 0001-08-09 10.56.00.png

以下を入力していきます(あとに続く)

IAM user add roles : test_user1

Database: lf01

Table: test1

スクリーンショット 0001-08-09 10.58.20.png

以下を入れ右下の[Grant]をクリック

Columnに"Include columns"を選択

Include columnsに"name"、"date"を選択

Table permissionsに"select"にチェック

スクリーンショット 0001-08-09 12.43.35.png

結果はこんな感じ

スクリーンショット 0001-08-09 12.45.32.png


Athenaで確認

test_user1の人には、nameとdateの列だけが見える状態になっている。

スクリーンショット 0001-08-10 8.48.50.png

ちゃんとDDLも拒否している

以下のようにパーミッションエラーな感じのメッセージが確認できる

MetaException(message:Insufficient Lake Formation permission(s):...

スクリーンショット 0001-08-10 8.50.55.png

Lake FormationのRecent Access Activity のログはこんな感じ

※CloudTrailのログなので、だいたい10分くらい遅れて出力される。あとこの画面ではフィルタが相当弱い・・

右上のView eventをクリックで詳細確認可能

スクリーンショット 0001-08-10 9.39.47.png


(補足)_DataCatalogのデフォルトセッティング

新しく作成されたデータベースとテーブルのデフォルトのパーミッションとして以下の2つを有効無効にできます(デフォルトは有効)


  • 新しく作成されたデータベースに"Everyone"へのAll許可を与える

  • 新しく作成されたテーブルに"Everyone"へのALL許可を与える

特に必要がなければチェックを外して右下の[Save]をクリックします。これにより新規で作成されたデータベースやテーブルに自動で"Everyone"への許可(IAMの権限があれば操作できる状態)されることはなくなり、Lake Formation上で明示的なきめ細かい許可を与える運用を行う事ができます。

"Everyone"はGlueDataCatalogからの移行のために存在するEntityで、この辺はまた今度記事にできればと

スクリーンショット 0001-08-10 16.35.02.png


こちらも是非

LakeFormationの使い方まとめ

https://qiita.com/pioho07/items/76554a7ac4252858b450

Glueの使い方まとめ

https://qiita.com/pioho07/items/32f76a16cbf49f9f712f