使用に関する注意事項 - Amazon Redshift

使用に関する注意事項

オブジェクトに対する権限を付与するには、次の条件のうち 1 つを満たす必要があります。

  • オブジェクトの所有者であること。

  • スーパーユーザーであること。

  • そのオブジェクトと権限に関する付与権限があること。

例えば、次のコマンドは、employees テーブルに対する SELECT コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

grant select on table employees to HR with grant option;

HR は、SELECT 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を付与することはできません。

別の例として、次のコマンドは、employees テーブルに対する ALTER コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

grant ALTER on table employees to HR with grant option;

HR は、ALTER 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を付与することはできません。

ビューに対する権限が付与されていても、その基礎となるテーブルに対する権限を持っていることにはなりません。同様に、スキーマに対する権限が付与されていても、スキーマ内のテーブルに対する権限を持っていることにはなりません。または、基となるテーブルに対するアクセス権を明示的に付与します。

AWS Lake Formation テーブルに権限を付与するには、テーブルの外部スキーマに関連付けられた IAM ロールに、外部テーブルに権限を付与する権限が必要です。次の例では、IAM ロール myGrantor に関連付けられた外部スキーマを作成します。IAM ロール myGrantor には、他のユーザーにアクセス許可を付与するアクセス許可があります。GRANT コマンドは、外部スキーマに関連付けられている IAM ロール myGrantor のアクセス許可を使用して、IAM ロール myGrantee にアクセス許可を付与します。

create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

IAM ロールにすべての権限を付与すると、関連する Lake Formation が有効なデータカタログで個々の権限が付与されます。例えば、次の GRANT ALL を実行すると、付与された個々の権限 (SELECT、ALTER、DROP、DELETE、および INSERT) が Lake Formation コンソールに表示されます。

grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

スーパーユーザーは、オブジェクトの権限を設定する GRANT コマンドと REVOKE コマンドに関係なく、すべてのオブジェクトにアクセスできます。

列レベルのアクセスコントロールの使用上の注意

次の使用上の注意は、Amazon Redshift テーブルとビューに対する列レベルの権限に適用されます。これらの注意事項はテーブルに関して説明しています。例外を明示的に記述しない限り、ビューにも同じ注意事項が適用されます。

  • Amazon Redshift テーブルの場合、列レベルで SELECT 権限と UPDATE 権限のみを付与できます。Amazon Redshift ビューの場合、列レベルで SELECT 権限のみを付与できます。

  • ALL キーワードは、テーブルの列レベルの GRANT のコンテキストで使用される場合に組み合わされる SELECT 権限および UPDATE 権限のシノニムです。

  • テーブル内のすべての列に対する SELECT アクセス許可がない場合、SELECT * 操作を実行すると、アクセス権がある列のみが返されます。ビューを使用する場合、SELECT * オペレーションはビュー内のすべての列にアクセスしようとします。すべての列へのアクセス許可がない場合、これらのクエリはアクセス拒否エラーで失敗します。

  • 以下の場合、SELECT * はアクセス可能な列のみに展開されません。

    • SELECT * を使用してアクセス可能な列のみを含む通常のビューを作成することはできません。

    • SELECT * を使用してアクセス可能な列のみを含むマテリアライズドビューを作成することはできません。

  • テーブルまたはビューに対する SELECT 権限または UPDATE 権限がある状態で列を追加した場合、テーブルまたはビューに対するすべての列、したがってそのすべての列に対する権限がまだあります。

  • テーブルの所有者またはスーパーユーザーのみが、列レベルの権限を付与できます。

  • WITH GRANT OPTION 句は、列レベルの権限をサポートしていません。

  • テーブルレベルと列レベルの両方で同じ権限を保持することはできません。たとえば、ユーザー data_scientist は、テーブル employee に対する SELECT 権限と、列 employee.department に対する SELECT 権限の両方を保持することはできません。テーブルとテーブル内の列に同じ権限を付与する場合は、次の結果を考慮してください。

    • ユーザーがテーブルでテーブルレベルの権限を持っている場合、列レベルで同じ権限を付与しても効果はありません。

    • ユーザーがテーブルでテーブルレベルの権限を持っている場合に、テーブルの 1 つ以上の列に対して同じ権限を取り消すと、エラーが返されます。代わりに、テーブルレベルで権限を取り消します。

    • ユーザーが列レベルの権限を持っている場合、テーブルレベルで同じ権限を付与するとエラーが返されます。

    • ユーザーが列レベルの権限を持っている場合に、テーブルレベルで同じ権限を取り消すと、テーブルのすべての列に対する列の権限とテーブルの権限の両方が取り消されます。

  • 遅延バインディングビューで列レベルの権限を付与することはできません。

  • マテリアライズドビューを作成するには、ベーステーブルに対するテーブルレベルの SELECT 権限が必要です。特定の列に対する列レベルの権限がある場合でも、それらの列にのみマテリアライズドビューを作成することはできません。ただし、通常のビューと同様に、マテリアライズドビューの列に SELECT 権限を付与できます。

  • 列レベルの権限の付与を検索するには、PG_ATTRIBUTE_INFO ビューを使用します。

ASSUMEROLE アクセス許可を付与するための使用上の注意事項

以下の使用上の注意は、Amazon Redshift での ASSUMEROLE アクセス許可の付与に適用されます。

ASSUMEROLE アクセス許可を使用して、COPY、UNLOAD、EXTERNAL FUNCTION、CREATE MODEL などのコマンドに対する、データベースユーザー、ロール、またはグループの IAM ロールのアクセス許可を制御します。IAM ロールについて、ユーザー、ロール、またはグループに ASSUMEROLE アクセス許可を付与すると、そのユーザー、ロール、またはグループは、そのロールを引き受けてコマンドを実行できます。ASSUMEROLE アクセス許可により、必要に応じて適切なコマンドへのアクセス権を付与することができます。

データベースのスーパーユーザーのみが、ユーザー、ロール、およびグループに対して ASSUMEROLE アクセス許可を付与したり取り消したりできます。スーパーユーザーは、常に ASSUMEROLE アクセス許可を保持します。

ユーザー、ロール、およびグループが ASSUMEROLE アクセス許可を使用できるようにするには、スーパーユーザーは次の 2 つのアクションを実行します。

  • クラスターで次のステートメントを 1 回実行します。

    revoke assumerole on all from public for all;
  • 適切なコマンドについて、ユーザー、ロール、およびグループに ASSUMEROLE アクセス許可を付与します。

ASSUMEROLE アクセス許可を付与するときに、ON 句でロールチェーンを指定できます。コンマを使用して、ロールチェーン内のロールを区切ります (例: Role1,Role2,Role3)。ASSUMEROLE アクセス許可を付与するときにロールチェーンが指定された場合、ASSUMEROLE アクセス許可によって付与された操作を実行するときにロールチェーンを指定する必要があります。ASSUMEROLE アクセス許可によって付与された操作を実行するときに、ロールチェーン内の個々のロールを指定することはできません。例えば、ユーザー、ロール、またはグループにロールチェーン Role1,Role2,Role3 が付与されている場合、Role1 のみを指定してオペレーションを実行することはできません。

ユーザーが COPY、UNLOAD、EXTERNAL FUNCTION、または CREATE MODEL 操作の実行を試みた場合、ASSUMEROLE アクセス許可が付与されていないと、次のようなメッセージが表示されます。

ERROR: User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY

ASSUMEROLE アクセス許可を通じて IAM ロールおよびコマンドへのアクセスが付与されたユーザーを一覧表示するには、「HAS_ASSUMEROLE_PRIVILEGE」を参照してください。指定したユーザーに付与された IAM ロールとコマンドのアクセス許可を一覧表示するには、「PG_GET_IAM_ROLE_BY_USER」を参照してください。指定した IAM ロールへのアクセスが許可されたユーザー、ロール、およびグループを一覧表示するには、「PG_GET_GRANTEE_BY_IAM_ROLE」を参照してください。

機械学習アクセス許可の付与に関する使用上の注意事項

ML 関数に関連するアクセス許可を直接付与または取り消すことはできません。ML 関数は ML モデルに属し、アクセス許可はモデルを通じて制御されます。代わりに、ML モデルに関連するアクセス許可を付与することができます。次の例は、モデル customer_churn に関連付けられた ML 関数を実行するアクセス許可をすべてのユーザーに付与する方法を示しています。

GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;

ML モデル customer_churn に対するすべてのアクセス許可をユーザーに付与することもできます。

GRANT ALL on MODEL customer_churn TO ml_user;

スキーマに ML 関数がある場合、その ML 関数が既に GRANT EXECUTE ON MODEL を通じて EXECUTE アクセス許可を持っている場合でも、ML 関数に関連する EXECUTE アクセス許可の付与は失敗します。CREATE MODEL コマンドを使用して ML 関数を個別のスキーマに保持するときには、個別のスキーマを使用することをお勧めします。次の例は、その方法を示しています。

CREATE MODEL ml_schema.customer_churn FROM customer_data TARGET churn FUNCTION ml_schema.customer_churn_prediction IAM_ROLE default SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket' );