AWS GlueとLake Formationを試してみた(Vol.3)

Glue and Lake Formation

前回のハンズオンの続きです。

データガバナンスにどんなサービスを使い、どのようなことが出来るのか。

以下のYoutubeを参考にさせていただき学習します。

以下の流れで構成されており、今回は「データアクセス制御」です。

  • Glue Data Catalog
  • Data Access Control
  • Glue Crawler
  • Glue Data Catalog Revisited
  • Glue Job and Glue Studio
  • Glue workflow
  • Advanced Topics
目次

クローラーやGlueジョブの前に、なぜデータアクセス制御?

Youtubeの冒頭でこう問いかけます。

「クローラーやGlueジョブの前に、なぜデータアクセス制御?」

回答は以下でした。

「クローラーやGlueジョブ、ワークフローを利用するには、データへのアクセス許可が必要。そのためにもデータアクセス制御を理解することはとても重要です。」

データアクセス制御のシナリオ

Glueのクローラーまたはジョブ、ジョブワークフローを使用するには、データに対する特定の権限が必要です。
これらのクローラーまたはジョブに権限がない限り、割り当てられたタスクを実行することはできません。
事前にデータアクセス制御を行うことでタスクを実行することが出来ます。

【例1】カタログ化したS3のデータに対してユーザがクエリを実行

ユーザーは、データに対するSelectアクセス許可を必要とします。

カタログ化したS3データにユーザがクエリを実行

【例2】カタログ化したJDBCエンドポイントからGlueジョブが参照しS3へ書込

Glueジョブは、ソースへのSelectアクセス許可とターゲットへのInsertアクセス許可を必要とします。

カタログ化したJDBCエンドポイントからGlueジョブが参照しS3へ書込

【例3】GlueデータベースにGlueクローラーがテーブルを作成

Glueクローラーは、Glueデータベースへのテーブル作成許可が必要

GlueデータベースにGlueクローラーがテーブルを作成

上記のようなアクセス許可は、AWS Lake Formationを用いて付与します。
データアクセス制御がどのように機能するかを理解しておく必要があります。

Glueデータカタログのデータベースに対する権限タイプ

データベースレベルのパーミッションには以下が存在します。

Create tableテーブルを作成できるか
Alterデータベースを変更できるか
Dropデータベースを削除できるか
Describeデータベースの情報を記述または取得できるか
Super上記すべての許可を持つ

Glueデータカタログのテーブルに対する権限タイプ

テーブルレベルのパーミッションには以下が存在します。

Selectデータを取得できるか
Insertデータを登録できるか
Deleteデータを削除できるか
Describeテーブルの情報を記述または取得できるか
Alterテーブル定義を変更できるか
Dropテーブルを削除できるか
Super上記すべての許可を持つ

Glueデータカタログのテーブルに対するデータフィルター

列レベルまたは行レベルで許可を与えることもできます。
これらは以下のように呼ばれ、データフィルターを介して提供されます。

  • 列レベルのアクセス(特定の列を含めたり除外したりできる)
  • 行レベルのアクセス(特定の行を含めたり除外したりできる)

ハンズオン

今回は以下がポイントです。

  • データフィルターを用いて、テーブルデータへの列アクセスおよび行アクセスを制御
  • Athenaでクエリを発行して上記アクセス制御を確認

前提

前回作成したデータベースにcustomersテーブルがあり、クエリを発行するとS3の格納したデータを参照することができる状態から始めます。

特に制御をかけていない状態で下記のSELECTクエリを実行すると、customerid、customername、customeremail、territoryを出力します。

前回行ったAthenaでのクエリ結果

これから、2人のユーザー異なるデータフィルタ―を割り当て、それぞれが異なる列レベルと行レベルでアクセス制御できることを検証していきます。

IAMユーザ作成

IAMを開き、2人のユーザーを作成します。

nauser

1人目のユーザー「nauser」を作成

1つ目のユーザを作成

シンプルにするため管理者権限を付与します。

1つ目のユーザに管理者権限付与

emeauser

もう1人「emeauser」を同様に作成します。

2人目のIAMユーザ作成
2人目のIAMユーザにも管理者権限付与

2人のIAMユーザーを作成完了しました。

2人のIAMユーザを作成完了

[Lake Formation] データフィルタ―作成

Lake Formationを表示します。

前回のハンズオンで作成したデータベースとテーブルが存在することがわかります。

Lake Formationに既存データベースが存在する
Lake Formationに既存テーブルが存在する

2つの異なるデータフィルタ―を作成します。

データフィルタ―作成開始

nafilter

1つ目のデータフィルタ―「nafilter」を作成します。

データフィルタ―:nafilter

  • 「customername」「territory」の列のみアクセス可(列レベルアクセス)
  • 「territoryが’NA’」の行のみアクセス可(行レベルアクセス)
1つ目のデータフィルタ―作成

emeafilter

2つ目のデータフィルタ―「emeafilter」を作成します。

データフィルタ―:emeafilter

  • 「customeremail」「territory」の列のみアクセス可(列レベルアクセス)
  • 「territoryが’EMEA’」の行のみアクセス可(行レベルアクセス)
2つ目のデータフィルタ―作成

2つのデータフィルターを作成しました。

2つのデータフィルタ―作成完了

[Lake Formation] ユーザーへのデータフィルタ割当て

2人のユーザーnauserとemeaユーザーにデータフィルタを割り当て、アクセスを許可します。

ユーザーへのデータフィルタ―割り当て開始

nauserへのデータフィルタ―割当て

nauserには、データフィルタ―nafilterをセットし、Selectを許可します。

nauserにnafilterの割り当てが完了しました。

nauserへのデータフィルタ―割当て完了

emeauserへのデータフィルタ―割当て

同様の手順で、emeauserにはデータフィルタ―emeafilterをセットし、Selectを許可します。

2人へのデータフィルタ―割当てを完了しました。

2人のIAMユーザーへのデータフィルタ―割り当て完了

[Athena] ワークグループの作成

ワークグループごとに、クエリ履歴やクエリのスキャン量を変更することができるようです。
例えば部署ごとに分けるといった使い方が出来ます。

Athenaを表示し「Create workgroup」ボタンを押下します。

Athenaワークグループ作成開始

ワークグループ名は「AmazonAthenaLakeFormation」

ワークグループ名はAmazonAthenaLakeFormation
ワークグループのクエリ結果保存先指定(S3)

クエリ結果格納先は、前回S3に作成したathenaフォルダをセットします。

クエリ結果保存先にathenaフォルダ指定
ワークグループ作成完了

作成完了しました。

ワークグループ作成完了しました

[Athena] nauserでクエリ結果を確認

nauserに対してデータフィルタ「nafilter」でアクセス許可が出来ているか確認します。

nauserでコンソールにログインしました。

nauserでコンソールにログイン

Athenaを開きます

nauserでAthena開く

ワークグループを先ほど作成した「AmazonAthenaLakeFormation]に切り替えます。

nauserのAthenaワークグループ切替
nauserのAthenaクエリ結果保存先設定開始

クエリ結果の保存先にS3のathenaフォルダを設定します。

nauserのAthenaクエリ結果保存先を設定

Athenaクエリ結果の保存先は2か所で設定が必要なようです。

・ワークグループ
・クエリエディタ

ようやく準備ができたので、nauserでクエリを実行します。

nauserのAthenaクエリ実行

データフィルター「nafilter」の内容でアクセス制御できていることを確認できました。

データフィルタ―:nafilter

  • 「customername」「territory」の列のみアクセス可(列レベルアクセス)
  • 「territoryが’NA’」の行のみアクセス可(行レベルアクセス)
nauserのAthenaクエリ結果出力

[Athena] emeauserでクエリ結果を確認

emeauserでログインしなおし、同様の手順でemeauserのアクセス制御ができているかを確認します。

emeauseでログイン

データフィルター「emeafilter」の内容でアクセス制御できていることを確認できました。

データフィルタ―:emeafilter

  • 「customeremail」「territory」の列のみアクセス可(列レベルアクセス)
  • 「territoryが’EMEA’」の行のみアクセス可(行レベルアクセス)
emeauserのAthenaクエリ結果出力

おわりに

今回は以下の手順で、LakeFormationのよるアクセス制御を学びました。

  • IAMユーザを2人追加
  • Lake Formationで異なるデータフィルタ(列アクセス+行アクセス)を2つ作成
  • Lake Formationで2人のユーザに異なるデータフィルタを割当て
  • 2人が同じクエリをAthenaで実行したにも関わらず、異なる結果を得たことを確認(想定どおり)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

個人ブログ「Tech Up Labo」を運営する、おーすけ と申します。

IT業界に携わるエンジニアとして、クラウドサービスを用いたデータ分析関連、Webサービス関連の開発において、私自身が学んだことや実際に経験したこと、あるいはその他の情報に基づき情報発信しております。

これらの情報が私自身の備忘録となる一方で、時には他の方が抱える問題に対する解決の一助になることを願っております。

■保有資格
AWS Certified Solutions Architect Associate
JDLA Deep Learning For GENERAL 2020#2
JDLA Deep Learning For ENGINEER 2022#2
PMP、Python3 エンジニア認定基礎、他

コメント

コメント一覧 (1件)

目次