AWS アカウント 内のデータへの読み取りアクセスの共有 - Amazon Redshift

AWS アカウント 内のデータへの読み取りアクセスの共有

Amazon Redshift では、同じ AWS アカウント内の異なるデータベースユーザーまたはグループ間でデータへの読み取りアクセスを共有できます。この機能を使用すると、データへのアクセス許可をきめ細かなレベルで制御し、許可されたユーザーまたはグループのみが特定のデータセットを読み取ることができます。

プロデューサークラスターの管理者またはデータベース所有者として、読み取り目的でデータを共有するには
  1. クラスターにデータ共有を作成します。詳細については、「CREATE DATASHARE」を参照してください。

    CREATE DATASHARE salesshare;

    クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスターが作成できるデータ共有の数に制限はありません。

    Amazon Redshift コンソールを使用してデータ共有を作成することもできます。詳細については、「データ共有の作成」を参照してください。

  2. データ共有を操作するための権限を委任します。詳細については、「GRANT」または「REVOKE」を参照してください。

    次の例では、salesshare上の dbuser にアクセス許可を付与しています。

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    クラスターのスーパーユーザーとデータ共有の所有者は、追加のユーザーに対してデータ共有の変更許可の付与または取り消しを実行できます。

  3. データ共有にオブジェクトを追加したり、データ共有からオブジェクトを削除したりします。データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。これらは明示的に追加してください。詳細については、「ALTER DATASHARE」を参照してください。

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;

    データ共有にビューを追加することもできます。

    CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;

    ALTER DATASHARE を使用して、特定のスキーマ内のスキーマ、テーブル、ビュー、および関数を共有します。スーパーユーザー、データ共有の所有者、またはデータ共有に対する ALTER または ALL 許可を持つユーザーは、データ共有を変更して、それに対するオブジェクトの追加または削除を実行できます。ユーザーは、データ共有に対してオブジェクトの追加または削除を行う許可を持っている必要があります。ユーザーは、オブジェクトの所有者である、またはオブジェクトに対する SELECT、USAGE、もしくは ALL 許可を持っている必要もあります。

    また、GRANT を使用してデータ共有にオブジェクトを追加することもできます。次の例では、以下の方法を示します。

    GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;

    この構文は機能的には ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; と同等です。

    スキーマを指定して作成された新しいテーブル、ビュー、または SQL ユーザー定義関数 (UDF) をデータ共有に追加するには、INCLUDENEW 句を使用します。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;

    Amazon Redshift コンソールを使用して、データ共有でオブジェクトを追加または削除することもできます。詳細については、「データ共有へのデータ共有オブジェクトの追加」、「データ共有からのデータ共有オブジェクトの削除」、および「アカウントで作成されたデータ共有の編集」を参照してください。

  4. コンシューマーをデータ共有に追加するか、データ共有からコンシューマーを削除します。次の例では、コンシューマークラスター名前空間を salesshare に追加しています。この名前空間は、アカウント内にあるコンシューマークラスターの名前空間ための、グローバルにユニークな識別子 (GUID) です。詳細については、「GRANT」または「REVOKE」を参照してください。

    GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    GRANT ステートメントでは、1 つのデータ共有コンシューマーにしか許可を付与できません。

    クラスターのスーパーユーザーおよびデータ共有オブジェクトの所有者、またはデータ共有に対する SHARE アクセス許可を持つユーザーは、コンシューマーをデータ共有に追加したり、データ共有からコンシューマーを削除したりできます。そのために、GRANT USAGE または REVOKE USAGE を使用します。

    現在表示されているクラスターの名前空間を検索するには、SELECT CURRENT_NAMESPACE コマンドを使用できます。同じ AWS アカウント内の異なるクラスターの名前空間を検索するには、Amazon Redshift コンソールのクラスター詳細ページにアクセスします。そのページで、新しく追加された名前空間フィールドを見つけます。

    また、Amazon Redshift コンソールを使用して、データ共有に対しデータコンシューマーを追加したり削除したりできます。詳細については、データ共有へのデータコンシューマーの追加およびデータ共有からのデータコンシューマーの削除を参照してください。

  5. (オプション) データ共有にセキュリティ制限を追加します。次の例は、パブリック IP アクセスを持つコンシューマークラスターがデータ共有の読み取りを許可されていることを示しています。詳細については、「ALTER DATASHARE」を参照してください。

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

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

    Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「アカウントで作成されたデータ共有の編集」を参照してください。

  6. クラスターで作成されたデータ共有を一覧表示し、データ共有の内容を調べます。

    次の例は、salesshareという名前のデータ共有の情報を表示します。詳細については、DESC DATASHAREおよびSHOW DATASHARESを参照してください。

    DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |

    次の例は、プロデューサークラスター内のアウトバウンドデータ共有を表示します。

    SHOW DATASHARES LIKE 'sales%';

    出力は次の例のようになります。

    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d

    詳細については、「DESC DATASHARE」および「SHOW DATASHARES」を参照してください。

    SVV_DATASHARESSVV_DATASHARE_CONSUMERS、および SVV_DATASHARE_OBJECTS を使用して、データ共有、そのデータ共有内のオブジェクト、およびデータ共有のコンシューマーを表示することもできます。

  7. データ共有を削除します。詳細については、「DROP DATASHARE」を参照してください。

    DROP DATASHARE を使用して、いつでもデータ共有オブジェクトを削除できます。クラスターのスーパーユーザーとデータ共有の所有者は、データ共有を削除できます。

    次の例では、salesshareという名前のデータ共有を削除します。

    DROP DATASHARE salesshare;

    Amazon Redshift コンソールを使用してデータ共有を削除することもできます。詳細については、「アカウント内で作成された データ共有の削除」を参照してください。

  8. ALTER DATASHARE コマンドを使用すると、データ共有から任意の時点でオブジェクトを削除できます。REVOKE USAGE ON を使用すると、特定のコンシューマーについて、データ共有への許可を取り消すことができます。このコマンドは、データ共有内にあるオブジェクトの USAGE 許可を取り消し、すべてのコンシューマークラスターへのアクセスを即座に停止します。アクセス許可が取り消されたあとは、データベースやテーブルに関するものを含め、データ共有およびメタデータを一覧表示するためのクエリは、共有されたオブジェクトを返さなくなります。

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「アカウントで作成されたデータ共有の編集」を参照してください。

  9. コンシューマーとデータを共有する必要がなくなった場合は、名前空間からデータ共有へのアクセスを取り消します。

    REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「アカウントで作成されたデータ共有の編集」を参照してください。

コンシューマークラスターの管理者として読み取り目的でデータを共有するには
  1. 利用可能なデータ共有を一覧表示し、各データ共有のコンテンツを表示します。詳細については、「DESC DATASHARE」および「SHOW DATASHARES」を参照してください。

    次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。DESC DATASHARE をコンシューマークラスターの管理者として実行する場合、インバウンドデータ共有を表示するには、NAMESPACE オプションを指定する必要があります。

    DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    クラスターのスーパーユーザーのみがこれを行うことができます。SVV_DATASHARES を使用してデータ共有を表示し、SVV_DATASHARE_OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。

    次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  2. データベーススーパーユーザーとして、データ共有を参照するローカルデータベースを作成できます。詳細については、「CREATE DATABASE」を参照してください。

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    ローカルデータベース内のオブジェクトへのアクセスをより細かく制御する場合は、データベースの作成時に WITH PERMISSIONS 句を使用します。これにより、ステップ 4 でデータベース内のオブジェクトにオブジェクトレベルのアクセス許可を付与できます。

    CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    SVV_REDSHIFT_DATABASES ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有できます。

    Amazon Redshift コンソールを使用して、データ共有からデータベースを作成することもできます。詳細については、「データ共有からのデータベースの作成」を参照してください。

  3. (オプション) 外部スキーマを作成して、コンシューマークラスターにインポートされたコンシューマデータベース内の特定のスキーマを参照し、詳細なアクセス許可を割り当てます。詳細については、「CREATE EXTERNAL SCHEMA」を参照してください。

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  4. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーおよびロールに付与します。詳細については、「GRANT」または「REVOKE」を参照してください。

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

    WITH PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。その場合は、データ共有内の特定のスキーマを指す外部スキーマ参照を作成し (前出のステップを参照)、スキーマレベルの詳細なアクセス許可を提供できます。

    また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターで必要な粒度で追加のデータ共有を作成するよう検討することもできます。

    ステップ 2 で WITH PERMISSIONS を使用してデータベースを作成した場合は、共有データベース内のオブジェクトにオブジェクトレベルのアクセス許可を割り当てる必要があります。USAGE アクセス許可のみを持つユーザーは、追加のオブジェクトレベルのアクセス許可が付与されるまで、WITH PERMISSIONS を使用して作成されたデータベース内のオブジェクトにはアクセスできません。

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. データ共有内の共有オブジェクト内のデータをクエリします。

    コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SVV_ALL および SVV_REDSHIFT ビューを使用します。

    プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。

    引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。コンシューマークラスターは、データ共有から作成されたデータベースに接続できません。

    完全な資格を使用してデータにアクセスできます。詳細については、「クロスデータベースクエリの例」を参照してください。

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    SELECT ステートメントは、共有オブジェクトに対してのみ使用できます。ただし、別のローカルデータベース内の共有オブジェクトからデータをクエリすることで、コンシューマークラスターにテーブルを作成できます。

    クエリに加えて、コンシューマーは共有オブジェクトのビューを作成できます。遅延バインディングビューまたはマテリアライズドビューのみがサポートされます。Amazon Redshift は、共有データの通常のビューをサポートしていません。コンシューマーが作成するビューは、複数のローカルデータベースまたはデータ共有から作成されたデータベースにまたがることができます。詳細については、「CREATE VIEW」を参照してください。

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;