Formationを利用して一元的にアクセスを制御してみた」シリーズの第3回目となります。前回の「2.ガバナンスアカウント編」に引き続き、「3.コンシューマーアカウント編」を解説していきます。ここでは、主にコンシューマーアカウントでの設定手順を紹介します。コンシューマーアカウント設定手順の後に、追加設定と手順に利用していたリソースのクリーンアップも記載してますので、ぜひ最後まで読んでいただければ幸いです。Redshift「データ共有」を作成します。その後、ガバナンスアカウントのデータカタログにアクセスを許可します。2.データガバナンスアカウントでDB作成及び権限設定(「2.ガバナンスアカウント編」)ガバナンスアカウントの管理者ユーザーは、「データ共有」を受け入れます。Glueデータベースを作成します。Glueデータベースおよびテーブル操作権限をコンシューマーアカウントに付与します。Formationでアカウント内のIAMユーザーにきめ細かい権限を付与します。コンシューマークラスター内にDB及びユーザーを作成し、ユーザーに権限を付与します。4.データコンシューマーアカウントで動作確認(「3.コンシューマーアカウント編」※本記事)IAMユーザーはコンシューマーアカウントにログインし、データセットにアクセスできることを確認します。管理者ユーザーには、データレイク管理者権限とクラスター管理者権限を付与しています。テスト用のIAMユーザーには、Redshiftアクセス権限を付与しています。設定手順それでは、具体的な設定手順に入っていきます。データコンシューマークラスターアカウント側の設定手順AWSマネジメントコンソールに管理者ユーザーでサインインします。Managerでリソース共有を受け入れます。Managerコンソール画面を開きます。ナビゲーションペイン「リソースの共有」をクリックし、「自分と共有:リソース共有」画面で、ステータスが「保留中」のリソース共有が2通あることを確認できます。それぞれの名前をクリックし、「リソース共有を承認」をクリックし、リソース共有を受け入れます。ステータスが「アクティブ」になっていることが確認できます。FormationでIAMユーザー「consumer1」に権限を設定します。Formationコンソールを開きます。Formationコンソールに初めてログインする場合、設定画面が表示されます。started」をクリックします。catalog」、「Databases」の順でクリックします。「Databases」画面で、ガバナンスアカウントから共有されたDB「ticket_datashare」を選択し、「Actions」、「Grant」の順でクリックします。roles」を選択し、対象のIAMユーザー「consumer1」を選択します。resources」を選択し、「Databases」にデータベース「ticket_datashare」を選択します。permissions」に「Describe」を選択し、「Grant」をクリックします。catalog」、「Databases」の順でクリックします。「Databases」画面で、DB「ticket_datashare」を選択し、「アクション」、「Grant」の順でクリックします。roles」選択し、対象のIAMユーザー「consumer1」を選択します。resources」を選択します。「Databases」にデータベース「ticket_datashare」を選択します。「Tables」にテーブル「public.category_test」選択します。permissions」に「Select」を選択します。access」を選択し、「Grant」をクリックします。FormationでIAMユーザー「consumer2」に権限を設定します。catalog」、「Databases」の順でクリックします。「Databases」画面で、ガバナンスアカウントから共有されたDB「ticket_datashare」を選択し、「アクション」、「Grant」の順でクリックします。roles」を選択し、対象のIAMユーザー「consumer2」を選択します。resources」を選択し、「Databases」にデータベース「ticket_datashare」を選択します。permissions」に「Describe」を選択し、「Grant」をクリックします。catalog」、「Databases」の順でクリックします。「Databases」画面で、DB「ticket_datashare」」を選択し、「アクション」、「Grant」の順でクリックします。roles」選択し、対象のIAMユーザー「consumer2」を選択します。resources」を選択します。「Databases」にデータベース「ticket_datashare」を選択します。「Tables」にテーブル「public.sales_mv」選択します。permissions」に「Select」を選択します。columns」の順で選択します。columns」に共有するカラム「eventname」、「starttime」、「caldate」、「saletime」を選択し、「Grant」をクリックします「Permissions」画面で、それぞれ権限が付与されることを確認できます。RedshiftクラスターからDBを作成し対象ユーザーに権限を付与します。Redshiftコンソールを開き、ナビゲーションペイン「クエリエディタv2」をクリックします。connection」を選択します。connection」をクリックします。「クエリエディタ」ページでDB作成クエリを実行します。以下はサンプルクエリです。クエリエディタの内容をクリアして、次にユーザー作成のクエリとユーザー許可のクエリを実行します。以下はサンプルクエリです。credentials」にチェックを入れて、「Save」をクリックします。IAMユーザー「consumer1」からデータを抽出します。AWSマネジメントコンソールにIAMユーザー「consumer1」でサインインします。Redshiftコンソールを開きます。connection」を選択します。credentials」を選択し、「Database」にデータベース名を入力し、「Save」をクリックします。「クエリエディタ」ページでカレントユーザー確認クエリを実行し、結果に「IAM:consumer1」が表示されることを確認します。以下はサンプルクエリです。current_userIAMユーザーconsumer1に権限を付与したテーブル「category_test」に対して、データ抽出クエリを実行します。対象データが抽出されることを確認できます。以下はサンプルクエリです。ticket_datashare.public.category_test権限を付与していないビュー「sales_mv」に対して、データ抽出クエリを実行します。クエリ実行エラーが発生することを確認できます。ticket_datashare.public.sales_mvIAMユーザー「consumer2」からデータを抽出します。AWSマネジメントコンソールにIAMユーザー「consumer2」でサインインします。Redshiftコンソールを開きます。対象のコンシューマークラスター名「lf-redshift-consumer」に接続します。「クエリエディタ」ページにカレントユーザー確認クエリを実行し、結果に「IAM:consumer2」が表示されることを確認します。IAMユーザーconsumer2に権限を付与したビュー「sales_mv」に対して、データ抽出クエリを実行します。対象データが抽出されることを確認できます。以下はサンプルクエリです。権限を付与していないテーブル「category_test」に対して、データ抽出クエリを実行します。クエリ実行エラーが発生することを確認できます。追加設定(オプション)プロデューサークラスターの対象テーブルにデータを追加し、コンシューマークラスターから新規追加されたデータが抽出されることを確認します。プロデューサーアカウントの設定手順AWSマネジメントコンソールに管理者ユーザーでサインインします。Redshiftコンソールを開きます。V2」をクリックします。redshift-producer」に接続します。データ新規追加SQLクエリを実行し、新規データが増えたことを確認できます。以下はサンプルクエリです。category_testコンシューマーアカウントの確認手順AWSマネジメントコンソールからIAMユーザー「consumer1」でサインインします。V2」をクリックします。redshift-consumer」に接続します。IAMユーザーconsumer1に権限を付与したテーブル「category_test」に対して、データ抽出クエリを実行します。追加された対象データが抽出されることを確認できます。permissionを削除(Revoke)します。作成したユーザー「consumer1」と「consumer2」を削除します。Redshift「if-redshift-consumer」を削除します。Redshift用に作成されたIAMロールを削除します。permissionsを削除します。Databases→ticket_datashareを削除します。プロデューサーアカウントのクリーンアップデータ共有を削除します。Redshift「If-redshift-producer」を削除します。Redshift用のIAMロールを削除します。最後に最後までお読みいただきありがとうございます。Formationによる一元管理のRedshiftデータ共有機能について、何となくイメージがつきましたか。組織内でのデータ共有が必要な企業や複数のAWSアカウントでデータ共有を行う必要のある企業にとって、運用や管理が簡素化されるため重要な機能となります。Formationによる一元管理のRedshiftデータ共有機能の需要が益々高まっていくと予想されます。現地レポートJTPで技官を務めている山田と申します。Sp...2023年に新卒入社でJTP株式会社へJoinしました、銭谷です。11リンクJTP株式会社コーポレートサイトはてなブログをはじめよう!JTP_TechBlogさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。