「Redshiftの「データ共有」とAWS Lake Formationを利用して一元的にアクセスを制御してみた」シリーズの第3回目となります。
前回の「2.ガバナンスアカウント編」に引き続き、「3.コンシューマーアカウント編」を解説していきます。
ここでは、主にコンシューマーアカウントでの設定手順を紹介します。
また、コンシューマーアカウント設定手順の後に、追加設定と手順に利用していたリソースのクリーンアップも記載してますので、ぜひ最後まで読んでいただければ幸いです。
AWS Lake Formationで管理するRedshift「データ共有」機能の設定手順の流れ
1.データプロデューサーアカウントでデータ共有作成(「1.プロデューサーアカウント編」)
プロデューサーアカウントの管理者ユーザーは、Amazon Redshift「データ共有」を作成します。その後、ガバナンスアカウントのデータカタログにアクセスを許可します。
2.データガバナンスアカウントでDB作成及び権限設定(「2.ガバナンスアカウント編」)
ガバナンスアカウントの管理者ユーザーは、「データ共有」を受け入れます。「データ共有」に関連付けられたAmazon Redshiftデータベースを参照可能なAWS Glueデータベースを作成します。Lake Formationが管理できるようにAWS Glueデータベースおよびテーブル操作権限をコンシューマーアカウントに付与します。
3.データコンシューマーアカウントで権限設定(「3.コンシューマーアカウント編」※本記事)
コンシューマーアカウントの管理者ユーザーは、AWS RAMを経由してリソース共有の招待を受け入れ、Lake Formationでアカウント内のIAMユーザーにきめ細かい権限を付与します。コンシューマークラスター内にDB及びユーザーを作成し、ユーザーに権限を付与します。
4.データコンシューマーアカウントで動作確認(「3.コンシューマーアカウント編」※本記事)
IAMユーザーはコンシューマーアカウントにログインし、データセットにアクセスできることを確認します。
前提条件
コンシューマークラスターアカウントにおける前提条件
- 管理者ユーザーには、データレイク管理者権限とクラスター管理者権限を付与しています。
- テスト用のIAMユーザーには、Redshiftアクセス権限を付与しています。
設定手順
それでは、具体的な設定手順に入っていきます。
1. データコンシューマークラスターアカウント側の設定手順
- AWSマネジメントコンソールに管理者ユーザーでサインインします。
- Resource Access Managerでリソース共有を受け入れます。
- Resource Access Managerコンソール画面を開きます。
- ナビゲーションペイン「リソースの共有」をクリックし、「自分と共有:リソース共有」画面で、ステータスが「保留中」のリソース共有が2通あることを確認できます。
- それぞれの名前をクリックし、「リソース共有を承認」をクリックし、リソース共有を受け入れます。
- ステータスが「アクティブ」になっていることが確認できます。
- Lake FormationでIAMユーザー「consumer1」に権限を設定します。
- AWS Lake Formationコンソールを開きます。
- (オプション)Lake Formationコンソールに初めてログインする場合、設定画面が表示されます。「Add myself」を選択し、「Get started」をクリックします。
- ナビゲーションペイン「Data catalog」、「Databases」の順でクリックします。
- 「Databases」画面で、ガバナンスアカウントから共有されたDB「ticket_datashare」を選択し、「Actions」、「Grant」の順でクリックします。
- 「Grant data permissions」画面で、「Principals」に「IAM users and roles」を選択し、対象のIAMユーザー「consumer1」を選択します。
- 「LF-Tags or catalog resources」に「Named data catalog resources」を選択し、「Databases」にデータベース「ticket_datashare」を選択します。
- 「Database permissions」に「Describe」を選択し、「Grant」をクリックします。
- 再度ナビゲーションペイン「Data catalog」、「Databases」の順でクリックします。
- 「Databases」画面で、DB「ticket_datashare」を選択し、「アクション」、「Grant」の順でクリックします。
- 「Grant data permissions」画面で、「Principals」に「IAM users and roles」選択し、対象のIAMユーザー「consumer1」を選択します。
- 「LF-Tags or catalog resources」で「Named data catalog resources」を選択します。「Databases」にデータベース「ticket_datashare」を選択します。「Tables」にテーブル「public.category_test」選択します。
- 「Table permissions」に「Select」を選択します。
- 「Data permissions」に「All data access」を選択し、「Grant」をクリックします。
- Lake FormationでIAMユーザー「consumer2」に権限を設定します。
- ナビゲーションペイン「Data catalog」、「Databases」の順でクリックします。
- 「Databases」画面で、ガバナンスアカウントから共有されたDB「ticket_datashare」を選択し、「アクション」、「Grant」の順でクリックします。
- 「Grant data permissions」画面で、「Principals」に「IAM users and roles」を選択し、対象のIAMユーザー「consumer2」を選択します。
- 「LF-Tags or catalog resources」に「Named data catalog resources」を選択し、「Databases」にデータベース「ticket_datashare」を選択します。(※1.4~1.8までの手順は「consumer1」をご参照ください)
- 「Database permissions」に「Describe」を選択し、「Grant」をクリックします。
- 再度ナビゲーションペイン「Data catalog」、「Databases」の順でクリックします。
- 「Databases」画面で、DB「ticket_datashare」」を選択し、「アクション」、「Grant」の順でクリックします。
- 「Grant data permissions」画面で、「Principals」に「IAM users and roles」選択し、対象のIAMユーザー「consumer2」を選択します。
- 「LF-Tags or catalog resources」で「Named data catalog resources」を選択します。「Databases」にデータベース「ticket_datashare」を選択します。「Tables」にテーブル「public.sales_mv」選択します。
- 「Table permissions」に「Select」を選択します。
- 「Data permissions」に「Column-based access」、「Include columns」の順で選択します。「Select columns」に共有するカラム「eventname」、「starttime」、「caldate」、「saletime」を選択し、「Grant」をクリックします
- 「Permissions」画面で、それぞれ権限が付与されることを確認できます。
- RedshiftクラスターからDBを作成し対象ユーザーに権限を付与します。
- Amazon Redshiftコンソールを開き、ナビゲーションペイン「クエリエディタv2」をクリックします。
- 対象のコンシューマークラスター「lf-redshift-consumer」を右クリックし、「Create connection」または「Edit connection」を選択します。
- 「編集」ウインドウでは、「Authentication」に「Temporary credentials」を選択し、「Database」にデータベース「dev」、「User name」にユーザー名「awsuser」を入力し、「Create connection」をクリックします。
「クエリエディタ」ページでDB作成クエリを実行します。以下はサンプルクエリです。
CREATE DATABASE ticket_datashare FROM ARN 'arn:aws:glue:<ガバナンスクラスターリージョン>:<ガバナンスアカウントID>:database/ticket_datashare' WITH DATA CATALOG SCHEMA
クエリエディタの内容をクリアして、次にユーザー作成のクエリとユーザー許可のクエリを実行します。以下はサンプルクエリです。
CREATE USER IAM:consumer1 password disable; GRANT USAGE ON DATABASE ticket_datashare TO IAM:consumer1 CREATE USER IAM:consumer2 password disable; GRANT USAGE ON DATABASE ticket_datashare TO IAM:consumer2
「クエリエディタv2」ページの左下にある設定アイコンをクリックして、「Account settings」ウインドウを開き、「Authenticate with IAM credentials」にチェックを入れて、「Save」をクリックします。
IAMユーザー「consumer1」からデータを抽出します。
- AWSマネジメントコンソールにIAMユーザー「consumer1」でサインインします。
- Amazon Redshiftコンソールを開きます。
- ナビゲーションペインで[クエリエディター V2]を選択します。
- 対象のコンシューマークラスター名「lf-redshift-consumer」を右クリックし、「Create connection」または「Edit connection」を選択します。
- 「編集」ウインドウでは、「認証」で「Temporary credentials」を選択し、「Database」にデータベース名を入力し、「Save」をクリックします。
「クエリエディタ」ページでカレントユーザー確認クエリを実行し、結果に「IAM:consumer1」が表示されることを確認します。以下はサンプルクエリです。
SELECT * FROM current_user
IAMユーザーconsumer1に権限を付与したテーブル「category_test」に対して、データ抽出クエリを実行します。対象データが抽出されることを確認できます。以下はサンプルクエリです。
SELECT * FROM ticket_datashare.public.category_test
権限を付与していないビュー「sales_mv」に対して、データ抽出クエリを実行します。クエリ実行エラーが発生することを確認できます。
SELECT * FROM ticket_datashare.public.sales_mv
IAMユーザー「consumer2」からデータを抽出します。
- AWSマネジメントコンソールにIAMユーザー「consumer2」でサインインします。
- Amazon Redshiftコンソールを開きます。
- ナビゲーションペインで[クエリエディター V2]を選択します。
- 対象のコンシューマークラスター名「lf-redshift-consumer」に接続します。
- 「クエリエディタ」ページにカレントユーザー確認クエリを実行し、結果に「IAM:consumer2」が表示されることを確認します。
- IAMユーザーconsumer2に権限を付与したビュー「sales_mv」に対して、データ抽出クエリを実行します。対象データが抽出されることを確認できます。以下はサンプルクエリです。
- 権限を付与していないテーブル「category_test」に対して、データ抽出クエリを実行します。クエリ実行エラーが発生することを確認できます。
2. 追加設定(オプション)
プロデューサークラスターの対象テーブルにデータを追加し、コンシューマークラスターから新規追加されたデータが抽出されることを確認します。
プロデューサーアカウントの設定手順
コンシューマーアカウントの確認手順
番外編(オプション)
リソースのクリーンアップ
- コンシューマーアカウントのクリーンアップ
- Data lake permissionを削除(Revoke)します。
- 作成したユーザー「consumer1」と「consumer2」を削除します。
- Redshift「if-redshift-consumer」を削除します。
- Redshift用に作成されたIAMロールを削除します。
- Data lake permissionを削除(Revoke)します。
- ガバナンスアカウントのクリーンアップ
- Data lake permissionsを削除します。
- Databases→ticket_datashareを削除します。
- Data lake permissionsを削除します。
- プロデューサーアカウントのクリーンアップ
- データ共有を削除します。
- Redshift「If-redshift-producer」を削除します。
- Redshift用のIAMロールを削除します。
- データ共有を削除します。
最後に
最後までお読みいただきありがとうございます。
「1.プロデューサーアカウント編」、「2.ガバナンスアカウント編」、「3.コンシューマーアカウント編」3つのシリーズにわたってご説明いたしましたが、AWS Lake Formationによる一元管理のRedshiftデータ共有機能について、何となくイメージがつきましたか。
組織内でのデータ共有が必要な企業や複数のAWSアカウントでデータ共有を行う必要のある企業にとって、運用や管理が簡素化されるため重要な機能となります。今後、AWS Lake Formationによる一元管理のRedshiftデータ共有機能の需要が益々高まっていくと予想されます。
以上、「Redshiftの「データ共有」とAWS Lake Formationを利用して一元的にアクセスを制御してみた」でした!