Redshiftの「データ共有」とAWS Lake Formationを利用して一元的にアクセスを制御してみた(2.ガバナンスアカウント編)

「Redshiftの「データ共有」とAWS Lake Formationを利用して一元的にアクセスを制御してみた」シリーズの第2回目となります。

前回の「1.プロデューサーアカウント編」に引き続き、「2.ガバナンスアカウント編」を説明していきます。

ここでは、主にガバナンスアカウントでの設定手順を紹介します。

AWS Lake Formationで管理するRedshift「データ共有」機能の設定手順の流れ

まず、3つの記事の全体感を示すために一連の設定手順の概要を記載します

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ユーザーはコンシューマーアカウントにログインし、データセットにアクセスできることを確認します。

本記事における前提条件

ガバナンスアカウントにおける前提条件
  • 管理者ユーザーには、データレイク管理者権限を付与しています。

本記事における設定手順

データガバナンスアカウント側の設定手順

それでは、具体的な設定手順に入っていきます。

  1. AWSマネジメントコンソールに管理者ユーザーでサインインします。
  2. AWS Lake Formationコンソールを開きます。
  3. Data catalog設定を確認します。
    1. (オプション)Lake Formationコンソールに初めてログインする場合、以下の設定画面が表示されます。「Add myself」を選択し、「Get started」をクリックします。
    2. ナビゲーションペインの「Data catalog」、「Settings」の順でクリックします。
    3. 「Data catalog settings」画面で、「Default permissions for newly created databases and tables」の以下2つのチェックを外し、「Current cross account version」で「Version 3」を選択します。その後「Save」をクリックします。
  4. ローカルリソースDBを作成します。
    1. ナビゲーションペインの「Data catalog」、「Data sharing」の順でクリックします。
    2. 「Data sharing」画面で「Configuration」タブの「Invitations」から「ticket_datashares」を選択し、「Review invitation」をクリックします。
    3. 「Accept or reject invitation」ウィンドウで「Accept」をクリックします。
    4. 「Set database details」画面で、「Database details」に「ticket_datashare」を記入し、「Skip to Review and create」をクリックします。
    5. 「Review and create」画面で、「Create database」をクリックします。
    6. ナビゲーションペイン「Data catalog」「Data sharing」の順でクリックします。「Data sharing」画面で「Shared databases」タブをクリックするとLocal resource「ticket_database」が表示されていることを確認できます。
  5. Data lake permissionsを設定します。
    1. ナビゲーションペインの「Permissions」、「Data lake permissions」、「Grant」の順でクリックします。
    2. 「Grant data permissions」画面で、「Principals」に「External accounts」を選択します。「AWS account, AWS organization, or IAM principal outside of this account」にコンシューマーアカウントIDを入力後に、Enterキーを2回押下します。(注意:仕様のためかEnterキーを1回だけ押下した場合、AccountIDとして認識されませんでした。)
      これで、AccountIDの下に「Account」が表示されることが確認できます。
    3. 「LF-Tags or catalog resources」に「Named data catalog resources」を選択します。
    4. 「Databases」から先ほど作成した「ticket_database」を選択します。
    5. 「Database permissions」に「Describe」を選択し、「Grantable permissions」に「Describe」を選択し、「Grant」をクリックします。
    6. 再度ナビゲーションペインの「Permissions」、「Data lake permissions」、「Grant」の順でクリックします。
    7. 「Grant data permissions」画面で、「External accounts」を選択します。「AWS account, AWS organization, or IAM principal outside of this account」にコンシューマーアカウントIDを入力後に、Enterキーを2回押下します。
    8. 「Database」から先ほど作成した「ticket_database」を選択します。
    9. 「Tables」から「All tables」を選択します。
    10. 「Table permissions」に「Select」と「Describe」を選択し、「Grantable permissions」に「Select」と「Describe」を選択します。
    11. 「Data permissions」に「All data access」を選択し、「Grant」をクリックします。
    12. 「Permissions」画面で、それぞれ権限が付与されることを確認できます。


ここまでが「データガバナンスアカウント側の設定手順」となります。

エラー例

以下は、設定中に発生したエラーです。対処は各手順をご参照ください。

  1. サンプルデータの「event」テーブルをデータ共有の対象にする場合、以下のエラーが発生しました。
  2. AccountIDを入力する時、Enterキーを2回押下しないと、AccountIDとして認識されず、「Grant」をクリックすると、以下のエラーが発生しました。

※上記は2023年6月の設定時に発生したエラーとなり、現在は変更されている可能性があります。


次は「データコンシューマークラスターアカウント側の設定手順」になります。

詳細に関しては「Redshiftの「データ共有」とAWS Lake Formationを利用して一元的にアクセスを制御してみた(3.コンシューマーアカウント編)」にてご確認ください。