データ共有の作成 - Amazon Redshift

データ共有の作成

Amazon Redshift では、データ共有を使用して、Amazon Redshift クラスターまたは AWS アカウント間でライブデータを共有することができます。データ共有は、Amazon Redshift クラスターからのライブデータを他のクラスターまたは AWS アカウントと共有できるようにするコンシューマープロデューサーオブジェクトです。データ共有を作成すると、安全なデータ共有が可能になり、アクセスの制御を維持し、データが最新の状態であることを維持できます。以下のセクションでは、データ共有の作成と、ライブデータを安全に共有するためのスキーマ、テーブル、ビューなどのデータベースオブジェクトの追加について詳しく説明します。

データ共有を作成する

データ共有は、データベースオブジェクト、アクセス許可、コンシューマーの論理的なコンテナです。コンシューマーとは、ご利用のアカウントや他の AWS アカウントにある Amazon Redshift のプロビジョニング済みクラスターまたは Amazon Redshift Serverless の名前空間です。各データ共有は、そのデータ共有が作成されたデータベースに関連付けられており、追加できるのはそのデータベースのオブジェクトだけです。プロデューサーの管理者は、コンソールおよび SQL を使用して、次のいずれかの手順でデータ共有を作成できます。

Console

コンソールでは、クラスターまたは名前空間の詳細ページの [データ共有] タブからデータ共有を作成できます。データ共有が作成されたら、コンシューマーでコンシューマー管理者として、データ共有からデータベースを作成できます。

  1. AWS Management Consoleにサインインして、https://console.aws.amazon.com/redshiftv2/ で Amazon Redshift コンソールを開きます。

  2. ナビゲーションメニューで [Clusters] (クラスター) を選択してから、ご使用のクラスターを選択します。クラスターの詳細ページが表示されます。

  3. クラスターまたは名前空間の詳細ページで、[データ共有] タブの [データ共有] セクションで、データベースに接続していない場合は接続します。[アカウントで作成されたデータ共有] セクションで、[データ共有を作成] を選択します。[データ共有を作成] ページが表示されます。

  4. [データ共有を作成] を選択します。データ共有はローカルデータベースからのみ作成できます。データベースに接続していない場合は、[データベースに接続] ページが表示されます。データベースへの接続 の手順に従って、データベースに接続します。最近接続したことがある場合は、[データ共有を作成] ページが表示されます。

  5. [Datashare information] (データ共有情報) セクションで、以下のいずれかのオプションを選択します。

    • 異なる Amazon Redshift データウェアハウス (プロビジョニング済みクラスターまたは Serverless エンドポイント) 間、または同じ AWS アカウント 内や異なる AWS アカウント 内でデータを共有し、読み書きを行うためのデータ共有を作成する場合は、[データ共有] を選択します。

    • [AWS Data Exchange datashare] ( データ共有) を選択し、AWS Data Exchange経由でデータをライセンスするためのデータ共有を作成します。

  6. [Datashare name] (データ共有名)、[Database name] (データベース名)、および [Publicly accessible] (パブリックにアクセス可能) の値を指定します。データベース名を変更するときは、新しいデータベース接続を作成します。

  7. [範囲指定された許可] セクションまたは [直接アクセス許可] セクションを使用して、データ共有にオブジェクトを追加します。データ共有にオブジェクトを追加するには、「Amazon Redshift でデータ共有を作成する」を参照してください。

  8. [データコンシューマー] セクションでは、Amazon Redshift に公開するか、AWS Glue Data Catalog に公開するかを選択できます。後者に公開すると、Lake Formation を介してデータを共有するプロセスが始まります。データ共有を Amazon Redshift に公開した場合は、コンシューマーとして機能する別の名前空間や Amazon Redshift アカウントとデータが共有されることになります。

    注記

    データ共有が作成されると、設定を編集して他のオプションに公開することはできません。

  9. [データ共有を作成] を選択します。

SQL

次のコマンドでデータ共有が作成されます。

CREATE DATASHARE salesshare;

データ共有を作成した時点で、各データ共有にはデータベースが関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスターが作成できるデータ共有の数に制限はありません。Amazon Redshift コンソールを使用してデータ共有を作成することもできます。詳細については、「CREATE DATASHARE」を参照してください。

また、データ共有の作成中に、セキュリティ制限を管理することもできます。次の例では、パブリック IP アクセスを持つコンシューマーに、データ共有の読み取りを許可しています。

CREATE DATASHARE my_datashare [PUBLICACCESSIBLE = TRUE];

PUBLICACCESSIBLE = TRUE に設定すると、コンシューマーは、パブリックにアクセス可能なクラスターやプロビジョニングされたワークグループからデータ共有をクエリできます。許可しない場合は、これを除外するか、明示的に false に設定してください。

データ共有の作成後に、コンシューマーのタイプに関するプロパティを変更できます。例えば、特定のデータ共有からデータを使用するクラスターは、公開でアクセスできないように定義できます。データ共有で指定されたセキュリティ制限を満たさないコンシューマークラスターからのクエリは、クエリランタイムで拒否されます。詳細については、「ALTER DATASHARE」を参照してください。

データ共有にデータ共有オブジェクトを追加する

コンソールや SQL を使用して、次のいずれかの手順に従って、さまざまなタイプのデータベースオブジェクトを追加できます。

Console

[範囲指定された許可] セクションまたは [直接アクセス許可] セクションを使用して、データ共有にオブジェクトを追加できます。[範囲指定された許可を付与] または [直接アクセス許可を付与] を選択し、オブジェクトを追加します。[追加] ボタンを選択してオブジェクトを追加します。ダイアログが表示されます。以下のステップを実行します。

  1. [範囲指定された許可を付与] を選択した場合は、[範囲指定された許可を付与] ページが表示されます。このページで、データベースレベルまたはスキーマレベルで範囲指定されたアクセス許可を付与できます。アクセス許可の範囲が指定されたデータ共有では、該当するデータベースやスキーマ内の現在および将来のすべてのオブジェクトに対して、指定されたアクセス許可が認められます。詳細については、「スコープ設定アクセス許可」を参照してください。

    1. 次に、[データベースで範囲指定されたアクセス許可] を選択して、データベースレベルで範囲指定されたアクセス許可を付与します。範囲指定のアクセス許可を付与すると、データ共有の作成時に現在のデータベースに適用されます。これらのアクセス許可は、個々のオブジェクトに付与することはできません。また、既存のオブジェクトと新しいオブジェクト (スキーマ、テーブル、ビュー、UDF) の両方に適用されます。

    2. スキーマ、テーブルまたはビュー、またはユーザー定義関数に対する範囲指定のアクセス許可を選択します。つまり、データベース内のすべてのオブジェクトに対して、選択したアクセス許可がコンシューマーに付与されます。[付与] を選択すると、データベースで範囲指定されたアクセス許可が付与されます。

    3. 次に、[スキーマで範囲指定されたアクセス許可] を選択して、スキーマレベルで範囲指定されたアクセス許可を付与します。スキーマで範囲指定されたアクセス許可を付与すると、そのスキーマに追加されたすべてのオブジェクトに対して、指定されたデータ共有アクセス許可が認められます。

    4. データ共有に追加するスキーマをドロップダウンから選択します。一度に選択できるスキーマは 1 つだけです。次に、選択したスキーマに付与する直接アクセス許可を選択します。

    5. テーブル、ビュー、ユーザー定義関数などのスキーマオブジェクトに対する範囲指定のアクセス許可を選択します。スキーマ内のすべての該当するオブジェクトに対してアクセス許可が付与されます。既存のオブジェクトも、今後追加されるオブジェクトも対象です。適用されたら、範囲指定のアクセス許可を取り消さない限り、オブジェクトからアクセス許可を削除することはできません。

    6. [付与] を選択すると、スキーマで範囲指定されたアクセス許可が付与されます。

  2. [直接アクセス許可の付与] を選択した場合は、[直接アクセス許可の付与] ページが表示されます。このページで、スキーマ、テーブル、ビュー、ユーザー定義関数などの各オブジェクトレベルで直接アクセス許可を付与できます。直接アクセス許可を付与するには、まず、関連するスキーマをデータ共有に追加する必要があります。

    1. 次に、[直接アクセス許可を付与] を選択して、特定のスキーマに対する直接アクセス許可を適用します。その後、テーブル、ビュー、ユーザー定義関数などのスキーマオブジェクトに対するスキーマアクセス許可を選択し、データ共有に追加するスキーマを選択します。[付与] を選択すると、データ共有にスキーマが追加されます。

    2. データ共有にスキーマを追加したら、引き続き、スキーマオブジェクトに直接アクセス許可を追加できます。[直接アクセス許可の付与] をもう一度選択します。[直接アクセス許可の付与] ページが表示されます。次に、スキーマオブジェクトの直接アクセス許可のタブに移動します。

    3. [テーブルとビューに直接アクセス許可を付与] を選択して、これらのオブジェクトに対するオブジェクトレベルの直接アクセス許可を付与します。必要な直接アクセス許可と必要なオブジェクトをリストから選択します。検索フィールドを使用して、データ共有オブジェクトを検索します。[付与] を選択すると、テーブルとビューがデータ共有に追加されます。

    4. [ユーザー定義関数に直接アクセス許可を付与] を選択して、ユーザー定義関数に対するオブジェクトレベルの直接アクセス許可を付与します。必要な直接アクセス許可と必要なオブジェクトをリストから選択します。検索フィールドを使用して、データ共有オブジェクトを検索します。[付与] を選択すると、ユーザー定義関数がデータ共有に追加されます。

  3. [今後のオブジェクトを追加] するかどうかも選択できます。スキーマに追加されたデータ共有オブジェクトを含めることを選択すると、スキーマに追加されたオブジェクトが自動的にデータ共有に追加されます。

  4. [追加] を選択してセクションを完成させ、オブジェクトを追加します。これらは [データ共有オブジェクト] の下に一覧表示されます。

  5. オブジェクトを追加したら、個々のオブジェクトを選択し、そのアクセス許可を編集できます。スキーマを選択すると、スコープ設定アクセス許可を追加するかどうかを尋ねるダイアログが表示されます。これにより、既存の各オブジェクト、またはスキーマに追加された各オブジェクトに、オブジェクトタイプに適したアクセス許可のセットがあらかじめ選択されるようになります。例えば、管理者は、追加されたすべてのテーブルに SELECT アクセス許可と UPDATE アクセス許可を付与するように設定できます。

  6. すべてのデータ共有オブジェクトが、[範囲指定された許可] セクションまたは [直接アクセス許可] セクションのリストに表示されます。

  7. データコンシューマーセクションでは、名前空間を追加したり、データ共有のコンシューマーとして AWS アカウントを追加したりできます。

  8. [データ共有を作成] を選択して変更を保存します。

データ共有を作成すると、そのデータ共有は [名前空間で作成されたデータ共有] の下のリストに表示されます。リストからデータ共有を選択すると、そのコンシューマー、オブジェクト、その他のプロパティを表示できます。

SQL

SQL を使用する場合、データ共有の所有者が、データ共有に追加するスキーマに対する USAGE を付与する必要があります。GRANT を使用して、スキーマに対する各種アクション (CREATE、USAGE など) を許可します。スキーマには、以下の共有オブジェクトが含まれます。

CREATE SCHEMA myshared_schema1; CREATE SCHEMA myshared_schema2; GRANT USAGE ON SCHEMA myshared_schema1 TO DATASHARE my_datashare; GRANT CREATE, USAGE ON SCHEMA myshared_schema2 TO DATASHARE my_datashare;

または、管理者は引き続き ALTER コマンドを実行して、データ共有にスキーマを追加できます。この方法でスキーマを追加した場合、USAGE アクセス許可のみが付与されます。

ALTER DATASHARE my_datashare ADD SCHEMA myshared_schema1;

管理者がスキーマを追加すると、スキーマ内のオブジェクトに対するデータ共有のアクセス許可を付与できます。読み取りと書き込みの両方のアクセス許可が可能です。GRANT ALL サンプルは、すべてのアクセス許可を付与する方法を示しています。

GRANT SELECT, INSERT ON TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1 TO DATASHARE my_datashare; GRANT ALL ON TABLE myshared_schema1.table4 TO DATASHARE my_datashare;

ALTER DATASHARE などのコマンドを引き続き実行してテーブルを追加できます。実行すると、追加されたオブジェクトには SELECT アクセス許可のみが付与されます。

ALTER DATASHARE my_datashare ADD TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1;

データベースまたはスキーマ内の特定タイプのすべてのオブジェクトを対象とした範囲指定のアクセス許可を、データ共有に付与することができます。アクセス許可の範囲が指定されたデータ共有では、該当するデータベースやスキーマ内の現在および将来のすべてのオブジェクトに対して、指定されたアクセス許可が認められます。

データベースレベルのスコープ付きアクセス許可の範囲は、SVV_DATABASE_PRIVILEGES で確認できます。スキーマレベルのスコープ付きアクセス許可の範囲は、SVV_SCHEMA_PRIVILEGES で確認できます。

以下は、範囲指定のアクセス許可をデータ共有に付与するための構文です。スコープ設定アクセス許可の詳細については、「スコープ設定アクセス許可」を参照してください。

GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }FOR SCHEMAS IN DATABASE db_name TO DATASHARE { datashare_name} GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }FOR TABLES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO DATASHARE { datashare_name} GRANT { EXECUTE | ALL [ PRIVILEGES ] }FOR FUNCTIONS IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO DATASHARE { datashare_name}

データ共有にデータコンシューマーを追加する

1 つ以上のデータコンシューマーをデータ共有に追加できます。データコンシューマーには、Amazon Redshift クラスターまたは AWS アカウントを一意に識別する名前空間を使用できます。

公開アクセスが設定されているクラスターへのデータ共有は、無効にするか有効にするかを明示的に選択する必要があります。

  • [クラスター名前空間をデータ共有に追加] を選択します。名前空間は Amazon Redshift クラスターのグローバル一意識別子 (GUID) です。

  • [Add AWS アカウント] (追加) を選択して、データ共有します。指定された AWS アカウントには、データ共有へのアクセス許可がある必要があります。