[アップデート]Amazon Redshift がマルチテナントアプリケーションの構築を簡素化するメタデータセキュリティに対応しました #AWSreinvent
概要
re:Invent2023期間中の2023/11/29にAmazon Redshift のメタデータセキュリティへのサポートがGAされたので、概要と詳細を以下にまとめます。
Amazon Redshift は管理者がユーザーの役割と権限に基づいてカタログデータの可視性を制限することを可能にするメタデータセキュリティをサポートするようになりました。ユーザーは自分がアクセスできるデータベース、スキーマ、テーブル/ビューのメタデータのみを閲覧することができます。これにより、Amazon Redshift ユーザーはプロビジョニングされたクラスタまたは Serverless ネームスペース上にマルチテナントアプリケーションを構築することが可能になります。
メタデータセキュリティは Amazon Redshift が利用可能なすべてのリージョンおよび US Gov Cloud リージョンで利用可能です。
AWS公式のリリースブログポストはこちら
メタデータセキュリティとは
Amazon Redshift の行レベルセキュリティのように、メタデータセキュリティはSVV_*システムビューなどのメタデータの閲覧権限をより細かく制御することが可能です。プロビジョニングされたクラスタまたはサーバレスワークグループでメタデータセキュリティが有効になっている場合、ユーザは閲覧アクセス権を持っているオブジェクトのメタデータのみを見ることができます。
メタデータのセキュリティによりニーズに応じて可視性を分けることができます。単一のデータウェアハウスを利用してユーザー毎に可視性を分けることですべてのデータを一元管理できます。
複数の部門のデータを一箇所に保存する場合権限の管理が面倒になる場合がありますが、メタデータセキュリティを有効にすることでユーザー別に閲覧権限を設定できます。例えばある部門のユーザーへはより広範囲のオブジェクトへのアクセス権を設定し、別の部門のユーザーには必要最小限の閲覧範囲の権限を設定するといったことが可能になります。
メタデータセキュリティは、スキーマ、テーブル、ビュー、マテリアライズド・ビュー、ストアドプロシージャ、ユーザー定義関数、機械学習モデルなど、すべてのオブジェクトタイプをサポートします。
ユーザーがオブジェクトのメタデータを見ることができるケース
以下のケースでユーザーはオブジェクトのメタデータを閲覧することができます。
- オブジェクトへのアクセスがユーザに許可されている場合
- オブジェクトアクセスがユーザー、ユーザが属するグループまたはロールに付与されている場合
- オブジェクトがパブリックである場合
- ユーザがデータベースまたはオブジェクトの所有者である場合
メタデータセキュリティの有効化
メタデータセキュリティ機能を有効にするには ALTER SYSTEM コマンドでデータベースの設定を更新します。
ALTER SYSTEM SET metadata_security=[true|t|on|false|f|off];
必要なユーザーにオブジェクトメタデータの閲覧権限を付与する
メタデータセキュリティ機能を有効にすると必要な権限を持つすべてのユーザーが該当オブジェクトに関連するメタデータを閲覧することができます。特定のユーザーにのみメタデータの閲覧権限を渡したい場合は、ロールに ACCESS CATALOG 権限を付与し、そのロールをユーザに割り当てます。
CREATE ROLE sample_metadata_viewer; GRANT ACCESS CATALOG TO ROLE sample_metadata_viewer; GRANT ROLE sample_metadata_viewer to salesadmin;
上のサンプルクエリはsample_metadata_viewer
という名称のロールを新規作成し、メタデータへのアクセス権限を付与します。そのロールをsalesadminグループ
に割り当てています。
システム定義のロールである operator、secadmin、dba、および superuser はすべて、オブジェクトメタデータを閲覧するのに必要な権限を持っており、スーパーユーザーはデフォルトで全てのメタデータ情報を見ることができます。
既存のロールを利用したい場合は以下のように既存のロールの割り当てをユーザーに対して行います。
GRANT ROLE operator to sample_user;
ユーザーの権限の確認
メタデータセキュリティの権限管理にロールを利用している場合、ロールベースのアクセス制御に関係するすべてのシステムビューと機能にアクセスすることができます。
SVV_ROLES
ビューを照会することで現在のユーザがアクセス可能なロールの確認ができます。ユーザがロールやグループのメンバーであるかどうかを調べるには、USER_IS_MEMBER_OF
関数が便利です。