Amazon Web Services ブログ

Amazon Redshift データ共有のアクセスと権限を AWS Lake Formation で一元管理

この記事は Centrally manage access and permissions for Amazon Redshift data sharing with AWS Lake Formation の翻訳記事です。

現代のグローバルなデータドリブン組織は、データを資産として扱い、さまざまな事業部門 (LOB) で使用して、タイムリーな洞察とより適切なビジネス上の意思決定を推進しています。 Amazon Redshift データ共有を使用すると、あるクラスターから別のクラスターにデータをコピーしたり移動したりすることなく、ある Amazon Redshift データウェアハウス内のトランザクションの一貫性を保ったライブデータを別の Amazon Redshift データウェアハウスと安全に共有できます。同じ AWS アカウント内、アカウント間、リージョン間でデータ共有が使用可能です。

一部のお客様は、異なるアカウントの 50 ~ 100 のデータウェアハウスとデータを共有し、相互に共有を行っているため、誰がどのデータにアクセスしているかを追跡することが困難になっています。アクセス情報を取得するには、個々のアカウントの Amazon Redshift コンソールで確認しなければいけません。また、多くのお客様は、Amazon Simple Storage Service (Amazon S3) 上にデータレイクを持っており、さまざまなビジネスユニット内およびビジネスユニット間で共有されています。組織が成長し、データが民主化されるにつれて、管理者はガバナンスと監査のためにデータ共有を一元管理し、きめ細かいアクセス制御を適用できる機能を必要としています。

お客様からの要望から逆算して、次の新機能を発表します。Amazon Redshift データ共有と AWS Lake Formation の統合により、Amazon Redshift のお客様は AWS Lake Formation を使用して Amazon Redshift データ共有へのアクセスを一元管理できるようになります。

AWS Lake Formation は、Amazon S3 を活用したデータレイクを一元管理するための一般的な選択肢です。今回、AWS Lake Formation による Amazon Redshift データ共有のサポートにより、新しい設計パターンが増え、データウェアハウス全体のガバナンスとセキュリティ体制を広げます。この統合により、AWS Lake Formation を使用して、フェデレーテッド AWS Identity and Access Management (IAM) ユーザーおよび IAM ロールに Amazon Redshift データ共有で共有されているテーブルおよびビューに対するきめ細かいアクセス制御を定義できます。

お客様は、ビジネスユニット間でデータを共有するメカニズムを提供するデータメッシュのアプローチを用いています。また、お客様はモダンデータアーキテクチャを使用して、データレイクストアや Amazon Redshift のマネージドストレージからのデータをビジネスユニット間で共有しています。 AWS Lake Formation は、ビジネスユニット内およびビジネスユニット全体にデータガバナンスを適用する機能を提供します。これにより、安全なデータアクセスと共有、簡単なデータ検出、およびデータアクセスの集中監査が可能になります。

ユナイテッド航空は人々をつなぎ、世界を一つにする事業を行っています。

「データ駆動型企業として、ユナイテッド航空は、革新的なモダンデータ駆動型アプリケーションを構築する分析コミュニティ向けに統合されたデータと分析エクスペリエンスを生み出そうとしています。 我々は、Athena、Aurora、Amazon Redshift、AWS Lake Formation などのさまざまな AWS サービスを使用して Purpose Built なデータメッシュ アーキテクチャを構築し、きめ細かいデータアクセスとコラボレーションに関する管理とガバナンスを簡素化することで、これを達成できると考えています。」

-Ashok Srinivas, Director of ML Engineering and Sarang Bapat, Director of Data Engineering.

この投稿では、AWS Lake Formation を使って Amazon Redshift データ共有のアクセスと権限を一元管理する方法を示します。

ソリューション概要

このソリューションでは、データガバナンスのために Amazon Redshift データ共有と AWS Lake Formation を統合することがデータドメインの構築にどのように役立つか、またデータメッシュアプローチを使用してデータドメインを統合し、ビジネスユニット全体でのデータ共有とフェデレーションを可能にする方法を示します。次の図は、ソリューションのアーキテクチャを示しています。

データメッシュは、分散型のドメイン指向のアーキテクチャです。一元管理されたフェデレーテッドデータカタログを介してデータプロデューサーとデータコンシューマーを分離することを重視しています。通常、プロデューサーとコンシューマーはそれぞれ独自のアカウント内で運用されます。これらのデータメッシュ特性の詳細は次のとおりです。

  • データプロデューサー – データプロデューサーはデータプロダクトを所有し、データの生成や正確性の維持、データプロダクトを最新の状態に保つ責任があります。データプロデューサーはどのデータセットを公開して利用できるかを決定し、セントラルガバナンスアカウントの一元管理されたデータカタログにデータセットを登録することでデータセットを共有します。セントラルのガバナンススチュワードまたは管理者チームとともにデータプロダクトを管理するためのプロデューサー側のスチュワードまたは管理者が存在する場合があります。
  • セントラルガバナンスアカウント – AWS Lake Formation により、共有データセットに対するきめ細かいアクセス管理が可能になります。一元化されたデータカタログにより、コンシューマーは共有データセットをすばやく検索できるようになり、管理者は共有データセットに対するアクセス許可を一元管理できるようになり、セキュリティチームはビジネスユニット全体でのデータプロダクトの使用状況を監査および追跡できるようになります。
  • データコンシューマー – データコンシューマーは、セントラルガバナンス アカウントから共有リソースへのアクセスを取得します。これらのリソースはコンシューマーの AWS Glue データカタログ内で利用できるため、コンシューマー側のデータスチュワードや管理者が管理できるデータベースやテーブルへのきめ細かいアクセスが可能になります。

次の手順では、データメッシュアーキテクチャのセントラルガバナンスパターンで、AWS Lake Formation によって Amazon Redshift データ共有をどのように統制管理できるかの概要を示します。

  1. プロデューサーアカウントでは、 Amazon Redshift プロデューサークラスター内にデータオブジェクトが作成および維持されます。データウェアハウス管理者は、Amazon Redshift データ共有を作成し、データセット (テーブル、ビュー) を共有に追加します。
  2. データウェアハウス管理者は、セントラルガバナンスアカウントのデータカタログへのデータ共有へのアクセスを許可します。
  3. セントラルガバナンスアカウントでは、データレイク管理者が AWS Lake Formation で管理できるようにAmazon Redshift データ共有を受け入れ、 そのデータ共有を指す AWS Glue データベースを作成します。
  4. データレイク管理者は、AWS Lake Formation のクロスアカウント共有を使用して、AWS Glue データベースとテーブルをコンシューマーアカウントと共有します。
  5. コンシューマーアカウントでは、データレイク管理者は AWS Resource Access Manager (AWS RAM) 経由でリソース共有の招待を受け入れるとデータベースがリストされているのが確認できます。
  6. データレイク管理者は、きめ細かいアクセス制御を定義し、アカウント内の IAM ユーザー (この投稿では consumer1consumer2) にデータベースとテーブルに対するアクセス許可を付与します。
  7. Amazon Redshift クラスターでは、データウェアハウス管理者が Glue データベースを指す Amazon Redshift データベースを作成し、作成された Amazon Redshift データベースの使用を IAM ユーザーに許可します。
  8. IAM ユーザーとしてのデータアナリストは、Amazon Redshift クエリエディタなどの好みのツールを使用して、AWS Lake Formation のきめ細かい権限に基づいてデータセットにアクセスできるようになります。

この投稿の例では、次のアカウント設定を使用します。

  • プロデューサーアカウント – 123456789012
  • セントラルアカウント – 112233445566
  • コンシューマーアカウント – 665544332211

前提条件

Amazon Redshift データ共有を作成し、データセットを追加する

プロデューサーアカウントで、暗号化を有効にした RA3 ノードタイプを使用して Amazon Redshift クラスターを作成します。次の手順を実行します。

  1. Amazon Redshift コンソールで、クラスターサブネットグループを作成します。

詳細については、「コンソールを使用したクラスター サブネット グループの管理」を参照してください。

  1. [Create cluster] を選択します。
  2. [Cluster identifier] には、選択したクラスター名を指定します。
  3. [Node type] で、RA3 ノードタイプのいずれかを選択します。

この機能は、RA3 ノードタイプでのみサポートされます。

  1. [Number of nodes] に、クラスターに必要なノードの数を入力します。
  2. [Database configurations] で、管理者ユーザー名と管理者ユーザーのパスワードを選択します。
  3. [Cluster permissions] で、IAM ロールを選択し、それをデフォルトとして設定できます。

デフォルトの IAM ロールの詳細については、「Amazon Redshift 用にデフォルトの IAM ロールを作成する」を参照してください。

  1. デフォルト設定を変更するには、 [Additional configurations] の横にある [Use defaults] オプションをオンにします。
  2. [Network and security] で、次のように指定します。
    1. [Virtual private cloud (VPC)] では、クラスターをデプロイする VPC を選択します。
    2. [VPC security groups] では、デフォルトのままにするか、適切なセキュリティ グループを追加します。
    3. [Cluster subnet group] で、作成したクラスターサブネットグループを選択します。

  1. [Database configuration] の [Encryption] セクションで、[Use AWS Key Management Service (AWS KMS)] または [Use a hardware security module (HSM)] を選択します。

暗号化はデフォルトでは無効になっています。

  1. [Choose an AWS KMS key] では、既存の AWS Key Management Service (AWS KMS) キーを選択する、もしくは [Create an AWS KMS key] を選択して、新しいキーを作成することができます。

新しいキーを作成する場合には、「キーの作成」を参照してください。

  1. [Create cluster] を選択します。
  2. この投稿では、次の スクリプト を使用してテーブルを作成し、プロデューサーの Amazon Redshift クラスターにデータをロードします。

データ共有の承認

AWS Command Line Interface (AWS CLI) の最新バージョンをインストールまたは更新して、AWS CLI を実行してデータ共有を承認します。手順については、「AWS CLI の最新バージョンのインストールまたは更新」を参照してください。

AWS Lake Formation の権限を設定

AWS Lake Formation で AWS Glue データカタログを使用するには、セントラルガバナンスアカウントで次の手順を実行して、IAM ベースのアクセス制御ではなく、Lake Formation のアクセス許可を使用してカタログリソースを制御するようにデータカタログ設定を更新します。

  1. AWS Lake Formation コンソールに管理者としてサインインします。
  2. ナビゲーション ウィンドウの [Data catalog] で、 [Settings] を選択します。
  3. [Use only IAM access control for new databases] の選択を解除します。
  4. [Use only IAM access control for new tables in new databases] の選択を解除します。
  5. [Cross account version settings] で [Version 3] を選択します。
  6. [Save] を選択します。

IAM ユーザーをデータレイク管理者として設定する

既存のデータレイク管理者ユーザーまたはロールを使用している場合は、次の管理ポリシーを追加し、以下のセットアップ手順をスキップします。

AWSGlueServiceRole
AmazonRedshiftFullAccess

それ以外の場合、IAM ユーザーをデータレイク管理者として設定するには、次の手順を実行します。

  1. IAM コンソールのナビゲーションペインで [Users] を選択します。
  2. データレイク管理者として指定する IAM ユーザーを選択します。
  3. [Permissions] タブで [Add an inline policy] を選択します。
  4. <AccountID> を自分のアカウント ID に置き換え、次のポリシーを追加します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action":"iam:CreateServiceLinkedRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName":"lakeformation.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": ["iam:PutRolePolicy"],
            "Resource": "arn:aws:iam::<AccountID>:role/aws-service role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ram:AcceptResourceShareInvitation",
                "ram:RejectResourceShareInvitation",
                "ec2:DescribeAvailabilityZones",
                "ram:EnableSharingWithAwsOrganization"
            ],
            "Resource": "*"
        }
    ]
}
JSON
  1. ポリシー名を指定します。
  2. 設定を確認して保存します。
  3. [Add permissions] ボタンを選択し、[Attach existing policies directly] を選択します。
  4. 次のポリシーを追加します。
    1. AWSLakeFormationCrossAccountManager
    2. AWSGlueConsoleFullAccess
    3. AWSGlueServiceRole
    4. AWSLakeFormationDataAdmin
    5. AWSCloudShellFullAccess
    6. AmazonRedshiftFullAccess
  1. [Next: Review and add permissions] を選択します。

データコンシューマーアカウントの設定

コンシューマー アカウントでは、セントラルガバナンスアカウントで前述した手順に従って、AWS Lake Formation とデータレイク管理者をセットアップします。

  1. データコンシューマーアカウントで、暗号化付きの RA3 ノードタイプを使用して Amazon Redshift クラスターを作成します (プロデューサーアカウントで Amazon Redshift クラスターを作成する手順を参照してください)。
  2. [Launch Stack] を選択して AWS CloudFormation テンプレートをデプロイし、ポリシーを持つ 2 人の IAM ユーザーを作成します。

スタックは、データアナリストとして次のユーザーを作成します

  • consumer1
  • consumer2
    1. CloudFormation スタックが作成されたら、スタックの [Outputs] タブに移動します。
    2. ConsoleIAMLoginURLLFUsersCredentials の値を取得します。

    1. LFUsersCredentials の値を選択して、AWS Secrets Manager コンソールに移動します。
    2. [Secret value] セクションで、[Retrieve secret value] を選択します。

    1. パスワードのシークレット値を取得します。

    consumer1consumer2 はどちらも、AWSマネジメントコンソールにログインするために、これと同じパスワードを使用する必要があります。

    AWS Lake Formation を使用して Amazon Redshift データ共有を設定する

    プロデューサーアカウント

    コンソールを使用してデータ共有を作成

    プロデューサーアカウントで Amazon Redshift データ共有を作成し、セントラルアカウントの AWS Lake Formation と共有するには、次の手順を実行します。

    1. Amazon Redshift コンソールで、データ共有を作成するクラスターを選択します。
    2. クラスターの詳細ページで、 [Datashares] タブに移動します。
    3. [Datashares created in my namespace] で、[Connect to database] を選択します。

    1. [Create datashare] を選択します。

    1. [Datashare type]として、[Datashare] を選択します。
    2. [Datashare name] に名前を入力します (この投稿では、demotahoeds)。
    3. [Database name] で、データ共有オブジェクトを追加するデータベースを選択します (この投稿では dev) 。
    4. [Publicly accessible] で、[Turn off] を選択します (または、パブリックにアクセス可能なクラスターとデータ共有を共有するには [Turn on] を選択します)。

    1. [DataShare objects] で、[Add] を選択してスキーマをデータ共有に追加します (この投稿ではパブリック スキーマ) 。
    2. [Tables and views] で [Add] を選択し、テーブルとビューをデータ共有に追加します (この投稿では、テーブル customerとビュー customer_view を追加します)。

    1. [Data consumers] で、[Publish to AWS Data Catalog] を選択します。
    2. [Publish to the following accounts] で、[Other AWS accounts] を選択します。
    3. コンシューマーアカウントの AWS アカウント ID を指定します。この投稿では、Lake Formation 中央ガバナンス アカウントの AWS アカウント ID を提供します。
    4. 同じアカウント内で共有するには、[Local account] を選択します。
    5. [Create datashare] を選択します。

    1. データ共有が作成されたら、[Datashares] タブに戻り、 [Datashares created in my namespace] の下の検索バーにデータ共有名を入力して確認できます。
    2. データ共有名を選択すると、その詳細が表示されます。
    3. [Data consumers] の下に、コンシューマーアカウントのデータカタログのコンシューマーのステータスが [Pending Authorization] として表示されます。

    1. コンシューマーデータカタログのチェックボックスを選択すると、 [Authorize] ボタンが有効になります。

    1. [Authorize] をクリックして、コンシューマーアカウントのデータカタログへのデータ共有アクセスを承認すると、コンシューマーのステータスが [Authorized] に変わります。

    SQL コマンドを使用してデータ共有を作成する

    プロデューサーアカウントでデータ共有を作成し、セントラルアカウントの AWS Lake Formation と共有するには、次の手順を実行します。

    1. Amazon Redshift コンソールのナビゲーションペインで、[Query editor V2] を選択します。
    2. クラスター名を選択 (右クリック) し、[Edit connection] または [Create Connection] を選択します。
    3. [Authentication] で、[Temporary credentials] を選択します。

    さまざまな認証方法の詳細については、「Amazon Redshift データベースに接続する」を参照してください。

    1. [Database] にデータベース名を入力します (この投稿では dev) 。
    2. [User name] に、データベースへのアクセスを許可されたユーザーを入力します (この投稿では awsuser) 。
    3. [Save] を選択してデータベースに接続します。

    1. 次の SQL コマンドを実行してデータ共有を作成し、共有するデータオブジェクトを追加します。
    create datashare demotahoeds;
    ALTER DATASHARE demotahoeds ADD SCHEMA PUBLIC;
    ALTER DATASHARE demotahoeds ADD TABLE customer;
    ALTER DATASHARE demotahoeds ADD TABLE customer_view;
    Bash
    1. 次の SQL コマンドを実行して、プロデューサーのデータ共有をセントラルガバナンスアカウントと共有します。
    GRANT USAGE ON DATASHARE demotahoeds TO ACCOUNT '<central-aws-account-id>' via DATA CATALOG
    Bash

    1. 次の SQL コマンドを実行すると、作成されたデータ共有と共有されたオブジェクトを確認できます。
    DESC DATASHARE demotahoeds
    Bash

    1. AWS CLI を使用して次のコマンドを実行して、セントラルデータカタログに対するデータ共有を承認し、AWS Lake Formation がデータ共有を管理できるようにします。 AWS マネジメントコンソールを使用して承認する手順については、「データ共有の承認と承認の取り消し」を参照してください。
    aws redshift authorize-data-share \
    --data-share-arn 'arn:aws:redshift:<producer-region>:<producer-aws-account-id>:datashare:<producer-cluster-namespace>/demotahoeds' \
    --consumer-identifier DataCatalog/<central-aws-account-id>
    Code

    以下は出力例です。

     {
        "DataShareArn": "arn:aws:redshift:us-east-1:XXXXXXXXXX:datashare:cd8d91b5-0c17-4567-a52a-59f1bdda71cd/demotahoeds",
        "ProducerArn": "arn:aws:redshift:us-east-1:XXXXXXXXXX:namespace:cd8d91b5-0c17-4567-a52a-59f1bdda71cd",
        "AllowPubliclyAccessibleConsumers": false,
        "DataShareAssociations": [{
            "ConsumerIdentifier": "DataCatalog/XXXXXXXXXXXX",
            "Status": "AUTHORIZED",
            "CreatedDate": "2022-11-09T21:10:30.507000+00:00",
            "StatusChangeDate": "2022-11-09T21:10:50.932000+00:00"
        }]
    }
    
    JSON

    前のセクションで説明した手順に従って、コンソールでデータ共有のステータスを確認できます。

    セントラルカタログアカウント

    データレイク管理者は、セントラルガバナンスアカウントで AWS Lake Formation とのデータ共有を受け入れて登録し、同様にデータベースを作成します。次の手順を実行します。

    1. データレイク管理者の IAM ユーザーまたはロールとしてコンソールにサインインします。
    2. AWS Lake Formation コンソールに初めてログインする場合は、[Add myself] を選択し、[Get Started] を選択します。
    3. ナビゲーションペインの [Data catalog] で、 [Data sharing] を選択し、 [Configuration] タブで Amazon Redshift データ共有の Invitations を表示します。
    4. データ共有を選択し、[Review invitation] を選択します。

    invitation の詳細を示すウィンドウが表示されます。

    1. [Accept] を選択して、Amazon Redshift データ共有を AWS Glue データカタログに登録します。

    1. AWS Glue データベースの名前を入力し、[Skip to Review and create] を選択します。

    1. 内容を確認し、[Create database] を選択します。

    AWS Glue データベースが Amazon Redshift データ共有上に作成されると、それらのデータベースを [Shared databases] で表示できます。

    AWS CLI を使用してデータ共有を登録し、データベースを作成することもできます。次のコマンドを使用します。

    1. セントラルアカウントと共有される Amazon Redshift データ共有について確認します。
    aws redshift describe-data-shares
    Bash
    1. Amazon Redshift データ共有を受け入れて Data Catalog に関連付けます。
    aws redshift associate-data-share-consumer \
    --data-share-arn 'arn:aws:redshift:<producer-region>:<producer-aws-account-id>:datashare:<producer-cluster-namespace>/demotahoeds' \
    --consumer-arn arn:aws:glue:us-east-1:<central-aws-account-id>:catalog
    Bash

    以下は出力例です。

     {
        "DataShareArn": "arn:aws:redshift:us-east-1:123456789012:datashare:cd8d91b5-0c17-4567-a52a-59f1bdda71cd/demotahoeds",
        "ProducerArn": "arn:aws:redshift:us-east-1:123456789012:namespace:cd8d91b5-0c17-4567-a52a-59f1bdda71cd",
        "AllowPubliclyAccessibleConsumers": false,
        "DataShareAssociations": [
            {
                "ConsumerIdentifier": "arn:aws:glue:us-east-1:112233445566:catalog",
                "Status": "ACTIVE",
                "ConsumerRegion": "us-east-1",
                "CreatedDate": "2022-11-09T23:25:22.378000+00:00",
                "StatusChangeDate": "2022-11-09T23:25:22.378000+00:00"
            }
        ]
    }
    JSON
    1. AWS Lake Formation に Amazon Redshift データ共有を登録します。
    aws lakeformation register-resource \
    --resource-arn arn:aws:redshift:<producer-region>:<producer-aws-account-id>:datashare:<producer-cluster-namespace>/demotahoeds
    
    Bash
    1. 受け入れられた Amazon Redshift データ共有を指す AWS Glue データベースを作成します。
    aws glue create-database --region <central-catalog-region> --cli-input-json '{
        "CatalogId": "<central-aws-account-id>",
        "DatabaseInput": {
            "Name": "demotahoedb",
            "FederatedDatabase": {
                "Identifier": "arn:aws:redshift:<producer-region>:<producer-aws-account-id>:datashare:<producer-cluster-namespace>/demotahoeds",
                "ConnectionName": "aws:redshift"
            }
        }
    }'
    JSON

    これで、セントラルガバナンスアカウントのデータレイク管理者は、AWS Lake Formation のクロスアカウント共有機能を使用して、データベースとテーブルの両方に対するコンシューマーアカウントへのアクセスを表示および共有できるようになりました。

    データコンシューマーにデータ共有アクセスを許可する

    共有された AWS Glue データベースに対するコンシューマーアカウントへのアクセス許可を付与するには、次の手順を実行します。

    1. AWS Lake Formation コンソールのナビゲーションペインの [Permissions] で、 [Data lake permissions] を選択します。
    2. [Grant] を選択します。
    3. [Principals] で、 [External accounts] を選択します。
    4. コンシューマーアカウント ID を入力して Enter キーを押します (この投稿では 665544332211)。
    5. [LF-Tags or catalog resources] で、 [Named data catalog resources] を選択します。
    6. [Databases] では、データベース demotahoedb を選択します。
    7. [Database permissions] と [Grantable permissions] の両方に [Describe] を選択します。
    8. [Grant] を選択します。

    コンシューマーアカウントにテーブルに対するアクセス許可を付与するには、次の手順を実行します。

    1. AWS Lake Formation コンソールのナビゲーション ペインの [Permissions] で、[Data lake permissions] を選択します。
    2. [Grant] を選択します。
    3. [Principals] で、 [External accounts] を選択します。
    4. コンシューマーアカウントを指定します (この投稿では 665544332211 を使用します)。
    5. [LF-Tags or catalog resources] で、 [Named data catalog resources] を選択します。
    6. [Databases] では、データベース [demotahoedb] を選択します。
    7. [Tables] で、 [All tables] を選択します。
    8. [Table permissions] と [Grantable permissions] の両方で [Describe] と [Select] を選択します。
    9. [Grant] を選択して変更を適用します。

    コンシューマーアカウント

    コンシューマー管理者はセントラルガバナンスアカウントから共有リソースを受け取り、次の表に示すように、コンシューマーアカウント内の他のユーザーにアクセスを委任します。

    IAM User Object Access Object Type Access Level
    consumer1 public.customer Table All
    consumer2 public.customer_view View specific columns: c_customer_id, c_birth_country, cd_gender, cd_marital_status, cd_education_status

    データ コンシューマー アカウントで、次の手順に従って、アカウントと共有されているリソースを受け入れます。

    1. データレイク管理者の IAM ユーザーまたはロールとしてコンソールにサインインします。
    2. AWS Lake Formation コンソールに初めてログインする場合は、[Add myself] を選択し、[Get Started] を選択します。
    3. AWS RAM コンソールにサインインします。
    4. ナビゲーション ウィンドウの [Shared with me] で [Resource shares] を選択し、保留中の Invitation を表示します。2 つの Invitation を受け取ります。

    1. 保留中の Inviation を選択し、リソース共有を受け入れます。

    1. AWS Lake formation コンソールのナビゲーションペインの [Data catalog] で、[Databases] を選択して、クロスアカウント共有データベースを表示します。

    AWS Lake Formation を使用してデータアナリストと IAM ユーザーにアクセスを許可する

    これで、コンシューマーアカウントのデータレイク管理者は、共有データベースとテーブルに対するアクセス許可をコンシューマーアカウントのユーザーに委任できるようになりました。

    consumer1 と consumer2 にデータベース権限を付与する

    IAM ユーザー consumer1consumer2 にデータベース権限を付与するには、次の手順に従います。

    1. AWS Lake Formation コンソールのナビゲーション ペインの [Data catalog] で、 [Databases] を選択します。
    2. データベース demotahoedb を選択し、 [Actions] メニューから [Grant] を選択します。

    1. [Principals] で、 [IAM users and roles] を選択します。
    2. IAM ユーザー consumer1 と consumer2 を選択します。
    3. [LF-Tags or catalog resources] では、demotahoedb がデータベースとしてすでに選択されています。
    4. [Database permissions] で [Describe] を選択します。
    5. [Grant] を選択して権限を適用します。

    consumer1 にテーブル権限を付与する

    IAM ユーザー consumer1 にテーブル public.customer に対するアクセス許可を付与するには、次の手順に従います。

    1. ナビゲーション ペインの [Data catalog] で、 [Databases] を選択します。
    2. データベース demotahoedb を選択し、「Actions」メニューから「Grant」を選択します。
    3. [Principals] で、 [IAM users and roles] を選択します。
    4. IAM ユーザー consumer1 を選択します。
    5. [LF-Tags or catalog resources] では、demotahoedb がデータベースとしてすでに選択されています。
    6. [Tables] で、public.customer を選択します。
    7. [Table permissions] で [Describe] と [Select] を選択します。
    8. [Grant] を選択して権限を適用します。

    consumer2 に列権限を付与する

    IAM ユーザー consumer2public.customer_view の機密情報ではない列に対するアクセス許可を付与するには、次の手順に従います。

    1. ナビゲーション ペインの [Data catalog] で、 [Databases] を選択します。
    2. データベース demotahoedb を選択し、 [Actions] メニューから [Grant] を選択します。
    3. [Principals] で、 [IAM users and roles] を選択します。
    4. IAM ユーザー consumer2 を選択します。
    5. [LF-Tags or catalog resources] では、demotahoedb がデータベースとしてすでに選択されています。
    6. [Tables] で、public.customer_view を選択します。

    1. [Table permissions] で [Select] を選択します。
    2. [Data permissions] で、 [Column-based access] を選択します。
    3. [Include columns] を選択し、機密情報ではない列 (c_customer_idc_birth_countrycd_gendercd_marital_status、および cd_education_status) を選択します。
    4. [Grant] を選択して権限を適用します。

    コンシューマーアカウントの Amazon Redshift クラスターからデータ共有の利用設定を行う

    コンシューマー 用の Amazon Redshift データウェアハウスで、Query Editor V2 を使用して管理者ユーザーとしてログインし、次の手順を実行します。

    1. 次の SQL コマンドを使用して、共有されたカタログデータベースから Amazon Redshift データベースを作成します。
    CREATE DATABASE demotahoedb FROM ARN 'arn:aws:glue:<central-region>:<central-aws-account-id>:database/demotahoedb' WITH DATA CATALOG SCHEMA demotahoedb ;
    SQL
    1. 次の SQL コマンドを実行して、Amazon Redshift データベースを作成し、IAM ユーザー consumer1 と consumer2 に作成したデータベースに対して USAGE の許可を与えます。
    CREATE USER IAM:consumer1 password disable;
    CREATE USER IAM:consumer2  password disable;
    GRANT USAGE ON DATABASE demotahoedb TO IAM:consumer1;
    GRANT USAGE ON DATABASE demotahoedb TO IAM:consumer2;
    
    Bash

    AWS Lake Formation アクセス許可を強制するために IAM 認証を利用します。次の手順に従ってクエリエディタ v2 を設定します。

    1. クエリエディタ v2 の左下隅にある設定アイコンを選択し、[Account Settings] を選択します。

    1. [Connection settings] で、[Authenticate with IAM credentials] を選択します。
    2. [Save]を選択します。

    コンシューマーユーザーとして共有データセットをクエリする

    IAM ユーザー consumer1 が Amazon Redshift からデータ共有アクセス権があることを検証するには、次の手順を実行します。

    1. IAM ユーザー consumer1 としてコンソールにサインインします。
    2. Amazon Redshift コンソールのナビゲーションペインで [Query Editor V2] を選択します。
    3. コンシューマークラスタに接続するには、ツリー ビュー ペインでコンシューマークラスタを選択します。
    4. プロンプトが表示されたら、 [Authentication] で [Temporary credentials using your IAM identity] を選択します。
    5. [Database] にデータベース名を入力します (この投稿では dev ) 。
    6. ユーザー名は現在の IAM アイデンティティ にマッピングされます(この投稿では consumer1)。
    7. [Save] を選択します。

    1. データベースに接続したら、次の SQL コマンドを使用して、現在ログインしているユーザーを確認できます。
    select current_user;
    Bash

    1. コンシューマーアカウントで作成されたフェデレーションデータベースを検索するには、次の SQL コマンドを実行します。
    SHOW DATABASES FROM DATA CATALOG [ACCOUNT '<id1>', '<id2>'] [LIKE 'expression'];
    Bash

    1. consumer1 の権限を検証するには、次の SQL コマンドを実行します。
    select * from demotahoedb.public.customer limit 10;
    Bash

    次のスクリーンショットに示すように、consumer1 はデータ共有の customer オブジェクトに正常にアクセスできます。

    では、 consumer2 が同じコンシューマークラスタ上のデータ共有テーブル「public.customer」にアクセスできないことを検証してみましょう。

    1. コンソールからログアウトし、IAM ユーザー consumer2 としてサインインします。
    2. 同じ手順に従って、クエリエディタ v2 を使用してデータベースに接続します。
    3. 接続できたら、同じクエリを実行します。
    select * from demotahoedb.public.customer limit 10;
    Bash

    ユーザー consumer2 は、次のスクリーンショットに示すように、アクセスの拒否エラーを受け取るはずです。

    consumer2 に対する public.customer_view ビューの 列レベルのアクセス権限を検証してみましょう。

    1. consumer2 としてクエリエディタ v2 に接続し、次の SQL コマンドを実行します。
    select c_customer_id,c_birth_country,cd_gender,cd_marital_status from demotahoedb.public.customer_view limit 10;
    Bash

    次のスクリーンショットでは、consumer2 が AWS Lake Formation によって許可された列にのみアクセスできることがわかります。

    まとめ

    データメッシュアプローチは、組織がビジネスユニット間でデータを共有できる方法を提供します。各ドメインは、データの取り込み、データ処理、データの提供を担当します。ドメインの担当者は、データ所有者でありドメインの専門家であり、データの品質と正確性に対して責任を負います。データガバナンスのために AWS Lake Formation と Amazon Redshift データ共有を使用すると、データメッシュアーキテクチャの構築が容易になり、きめ細かいアクセス制御によるビジネスユニット間のデータ共有とフェデレーションが可能になります。

    AWS Lake Formation との Amazon Redshift データ共有の開始に貢献していただいた皆様に心より感謝いたします。

    Debu Panda, Michael Chess, Vlad Ponomarenko, Ting Yan, Erol Murtezaoglu, Sharda Khubchandani, Rui Bi

    参考情報

    翻訳はソリューションアーキテクトの池田 敬之が担当しました。