使用に関する注意事項
オブジェクトに対する権限を付与するには、次の条件のうち 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 権限または UPDATE 権限がある状態で列を追加した場合、テーブルまたはビューに対するすべての列、したがってそのすべての列に対する権限がまだあります。
テーブルの所有者またはスーパーユーザーのみが、列レベルの権限を付与できます。
WITH GRANT OPTION 句は、列レベルの権限をサポートしていません。
テーブルレベルと列レベルの両方で同じ権限を保持することはできません。たとえば、ユーザー data_scientist
は、テーブル employee
に対する SELECT 権限と、列 employee.department
に対する SELECT 権限の両方を保持することはできません。テーブルとテーブル内の列に同じ権限を付与する場合は、次の結果を考慮してください。
-
ユーザーがテーブルでテーブルレベルの権限を持っている場合、列レベルで同じ権限を付与しても効果はありません。
-
ユーザーがテーブルでテーブルレベルの権限を持っている場合に、テーブルの 1 つ以上の列に対して同じ権限を取り消すと、エラーが返されます。代わりに、テーブルレベルで権限を取り消します。
-
ユーザーが列レベルの権限を持っている場合、テーブルレベルで同じ権限を付与するとエラーが返されます。
-
ユーザーが列レベルの権限を持っている場合に、テーブルレベルで同じ権限を取り消すと、テーブルのすべての列に対する列の権限とテーブルの権限の両方が取り消されます。
遅延バインディングビューで列レベルの権限を付与することはできません。
マテリアライズドビューを作成するには、ベーステーブルに対するテーブルレベルの SELECT 権限が必要です。特定の列に対する列レベルの権限がある場合でも、それらの列にのみマテリアライズドビューを作成することはできません。ただし、通常のビューと同様に、マテリアライズドビューの列に SELECT 権限を付与できます。
列レベルの権限の付与を検索するには、PG_ATTRIBUTE_INFO ビューを使用します。
ASSUMEROLE 権限を付与するための使用上の注意事項
以下の使用上の注意は、Amazon Redshift での ASSUMEROLE 権限の付与に適用されます。
COPY、UNLOAD、EXTERNAL FUNCTION、CREATE MODEL などのコマンドにより、データベースユーザーおよびグループでの IAM ロールのアクセス権限を制御するには、ASSUMEROLE 権限を使用します。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」を参照してください。