0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS LakeFormationを使ってテーブルとビューで別々のアクセス制御を可能にする方法

Posted at

背景

S3にデータを置いてGlue/Athenaで分析する際、既存のテーブルには機密情報が含まれていて誰でもアクセスできる状態だったため問題がありました。
まず機密情報をマスクしたビューを作成しました。
それからLakeFormationを使って機密情報を含むテーブルにはアクセス制限をかけて、新しく作成したビューは誰でも見れるような状態を作ることで解決しました。

LakeFormationとは

以下の特徴があります。

  • Data Catalog(Glue)と統合して「列単位・行単位・テーブル単位」で制御できる
  • IAMのポリシー制御だけだと「S3バケット単位」でしか制御できない → 粒度が荒い
  • Lake Formationを使うと「分析基盤に必要なきめ細かい制御」が可能

LakeFormationによるアクセス制御手順

Data lake administratorsの設定

管理者になるとData Catalogに対するアクセス制御を設定できるようになります。
image.png

Data lake locationsの設定

LakeFormationで管理したいデータを格納しているS3のパスを登録します。
image.png

IAMでの制御を無効にする

LakeFormationで細かい制御を可能にするためにはデータベースとテーブルのIAMでの制御を無効化する必要があります。

データベースのIAM制御を無効化

  1. メニューからDatabasesに移動して該当のテーブルを選択して編集画面に移動します
  2. デフォルトでは「Use only IAM access control for new tables in this database」の項目にチェックがついているのでチェックを外します
  3. これでこのデータベースから新しく作成されるテーブルやビューはIAMによる制御が無効になります

テーブルのIAM制御を無効化

デフォルトではテーブルのパーミッションにIAMAllowedPrincipalsがついているので削除します。
IAMAllowedPrincipalsがついている状態だとLakeFormationによる制御が無効になります。
image.png

ビューの作成

機密情報をマスクしたビューを作成していきます。
まず前提としてこのビューはAthenaビューではなく、データカタログビューである必要があります。1
データカタログビューは以下の構文で作成可能です。

CREATE PROTECTED MULTI DIALECT VIEW ビュー名 
SECURITY DEFINER 
AS 機密情報をマスクしたビューのSQL

ただしこれをAthenaで実行するにはIAMロールでないとエラーになります。
IAMロールを作成したらLakeFormationでビューの作成元となるテーブルにパーミッションを付与します。
image.png
作成したIAMロールにassumeしてAthenaで実行するとデータカタログビューの作成に成功します。

テーブルとビューそれぞれにアクセス制御設定

あとはLakeFormationの画面からテーブルとビューそれぞれにパーミッションを付与して別々でアクセス制御可能になります。

  1. https://docs.aws.amazon.com/ja_jp/athena/latest/ug/views.html#when-to-use-views-gdc

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?