DEA / ドメイン4 データセキュリティとガバナンス

Redshift のアクセス制御とデータ共有

のデータには、 とは別に、データベースの中の権限 (ユーザー、ロール、GRANT) がかかります。さらに、とで「同じテーブルを見ても、人によって見える行と値が違う」状態を作れます。 DEA では、データベースのユーザー・グループ・ロールへの権限の付与、機密データの見せ分け、 による他のクラスター・アカウントへの提供が問われます。

Point
  • RBAC = Role-Based Access Control の略で、Redshift ではデータベースのロールに権限をまとめて付ける方式です。
  • RLS = Row-Level Security (行レベルセキュリティ) の略です。
  • DDM = Dynamic Data Masking (動的データマスキング) の略で、保存された値を変えずにクエリの結果だけを隠します。
  • Datashare は、データ共有で他のクラスターへ渡す「共有の単位」です。
  • 和訳

概要

へのアクセスは2段階で制御します。 1段目は で、クラスターやワークグループへの接続、Redshift Data の呼び出しを許可します。2段目はデータベースの中の権限で、スキーマ・テーブル・列・行への操作を許可します。

概要の図 IAM 認証一時的な認証情報 データ共有 利用者・アプリ Redshiftクラスター / Serverless データベースのロールGRANT 列レベルの GRANT 行レベルセキュリティ 動的データマスキング 他のクラスター・アカウント
見るポイント代表的な判断
職務ごとにまとめて権限を付けたいかデータベースのロール (RBAC) に権限を付け、ユーザーにロールを付与します。
見せる行を利用者で変えたいかのポリシーを使います。
列の値を隠したり一部だけ見せたりしたいかのポリシーを使います。
別のクラスターやアカウントへ最新のデータを渡したいかデータ共有を使い、コピーしません。

主要技術

①認証: データベースユーザーと IAM

方式内容判断ポイント
データベースユーザーとパスワードCREATE USER で作り、パスワードで接続します。パスワードは で管理し、ローテーションします。
によるIAM の権限で一時的なデータベースの認証情報を取得して接続します。パスワードを配布せずに済みます。ユーザーを自動作成し、グループに入れることもできます。 の ・ODBC ドライバーは IAM での接続に対応しており、既存の ツールのまま使えます。
との統合社員の ID でサインインし、ID プロバイダーのグループを Redshift のロールに対応させます。人のアクセスを一元管理し、Quick (旧 ) などからも同じ ID で接続できます。
Redshift Data の API で SQL を実行します。認証はシークレットの ARN か一時的な認証情報で行います。 や から、接続 (ドライバーや接続プール) を管理せずに SQL を実行できます。

②ユーザー・グループ・ロールと GRANT ⚠️ 頻出

単位内容
ユーザー接続する主体です。
グループユーザーの集まりです。グループに権限を付けると、所属するユーザー全員に効きます (従来からの方式)。
ロール (RBAC)権限の集まりです。ユーザーや他のロールに付与でき、入れ子にできます。オブジェクトへの権限に加え、システムの権限 (ユーザーの作成、テーブルの所有権の変更など) も含められます。
システム定義のロールsys:dba、sys:secadmin、sys:operator、sys:monitor などがあり、職務ごとの管理権限をスーパーユーザーなしで渡せます。
CREATE ROLE sales_analyst;
GRANT USAGE ON SCHEMA sales TO ROLE sales_analyst;
GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_analyst;
-- 列レベルの権限: 指定した列だけ読める
GRANT SELECT (order_id, amount, region) ON sales.orders TO ROLE sales_analyst;
GRANT ROLE sales_analyst TO alice;
-- 今後作られるテーブルにも同じ権限を付ける
ALTER DEFAULT PRIVILEGES IN SCHEMA sales GRANT SELECT ON TABLES TO ROLE sales_analyst;
押さえること内容
スキーマの USAGEテーブルへの SELECT があっても、スキーマの USAGE がないと参照できません。
既定の権限ALTER DEFAULT PRIVILEGES を設定しないと、新しく作ったテーブルには権限が付きません。既定の権限は「指定したユーザーがこれから作るオブジェクト」に効きます。FOR USER を省くと実行した本人が作るものだけが対象なので、 のユーザーが作るテーブルなら FOR USER etl_user を指定します (他のユーザーの分を指定できるのはスーパーユーザーなどです)。既存のテーブルには効きません。
スコープ付きの権限GRANT SELECT FOR TABLES IN SCHEMA sales TO ROLE sales_analyst のように書くと、作成者を問わず、スキーマの現在と今後のテーブルすべてに権限が付きます。付与先はユーザーかロールです。
列レベルの権限GRANT SELECT (列, ...) で、読める列を限定できます。
スーパーユーザーを日常の作業に使わず、職務ごとのロールとシステム定義のロールで分けます。

③行レベルセキュリティ (RLS)

RLS ポリシーは、「この利用者にはどの行を返すか」を条件式で決めます。クエリを書く側が WHERE 句を足さなくても、ポリシーが自動で効きます。

CREATE RLS POLICY policy_own_rows
WITH (sales_rep VARCHAR(64))
USING (sales_rep = current_user);   -- 自分が担当する行だけ返す
ATTACH RLS POLICY policy_own_rows ON sales.orders TO ROLE sales_analyst;
ALTER TABLE sales.orders ROW LEVEL SECURITY ON;
押さえること内容
有効化テーブルで ROW LEVEL SECURITY ON にしてから効きます。
付け先ポリシーはロールやユーザーに付けます。
性能ポリシーが別の表 (対応表) を参照すると、その表も読むため遅くなります。単純な条件にします。
列の権限との関係列レベルの GRANT で見える列を絞り、RLS で見える行を絞る、という組み合わせにします。

地域の担当者に地域の行だけを見せる場合は、利用者と地域の対応表を参照する条件を書きます。ただし対応表の参照は性能に影響します。


④動的データマスキング (DDM) ⚠️ 頻出

DDM は、保存されている値は変えずに、クエリの結果に出る値を利用者ごとに隠します。

機能内容
マスキングポリシー列の値をどう変えるか (全部を伏せる、末尾4桁だけ残す、ハッシュ化する) を式で定義します。・ の UDF でも書けます。
付け先と優先度ポリシーをテーブルの列に、ロール・ユーザー・PUBLIC 向けに付けます。複数のポリシーが当たる場合は優先度 (PRIORITY) で決まります。
条件付きマスキング他の列の値に応じてマスクするか決めます (セルの単位の制御)。
ハッシュ化ハッシュ化した値なら、元の値を見せずに結合や集計のキーとして使えます。
CREATE MASKING POLICY mask_card
WITH (card_no VARCHAR(16))
USING ('XXXXXXXXXXXX' || SUBSTRING(card_no, 13, 4));
ATTACH MASKING POLICY mask_card ON payments(card_no) TO PUBLIC;
ATTACH MASKING POLICY unmask_card ON payments(card_no) TO ROLE fraud_team PRIORITY 10;

unmask_card は値をそのまま返すポリシーの例です。一般の利用者には末尾4桁だけ、不正対策チームには元の値を見せます。

手段元データ見せ分け向いている場面
列レベルの GRANT変えない列ごと見える・見えない列そのものを見せなくてよい場合
変えない同じ列で、人により値の見え方が違う一部の値 (末尾4桁など) は見せたい場合
ロード前のマスキング ( で変換)変える全員が同じマスク済みの値元の値を に置くこと自体を避けたい場合

⑤データ共有 (data sharing) ⚠️ 頻出

データ共有は、提供側 (プロデューサー) のクラスターのデータを、利用側 (コンシューマー) のクラスターやワークグループからコピーせずに読めるようにする機能です。提供側がデータを更新すると、利用側はすぐに最新のデータをトランザクションの一貫性を保って読めます。

⑤データ共有 (data sharing) ⚠️ 頻出の図 datashare datashare承認と関連付け datashare Lake Formation が管理 ETL 用クラスタープロデューサー BI 用ワークグループ同じアカウント 別アカウントのクラスター AWS Data Exchange有償で提供 Lake Formation で権限を管理する共有
項目内容
共有の単位データベース、スキーマ、テーブル、ビュー (を含む)、 の UDF を datashare に追加します。
範囲同じアカウント、別アカウント、別へ共有できます。プロビジョンドクラスターと Serverless の間でも共有できます。
対応する種類RA3 ノードのプロビジョンドクラスターと Serverless が対象です。
別アカウントへの共有の手順提供側で datashare を作って相手のアカウントを追加し、提供側のアカウントで承認 (authorize) し、利用側のアカウントで関連付け (associate) します。
暗号化アカウントをまたぐ共有では、提供側と利用側の両方が暗号化されている必要があります (同じキーである必要はありません)。
費用利用側はクエリの計算と、リージョンをまたぐ場合のデータ転送の費用を払います。提供側はストレージの費用を払います。
書き込み提供側が INSERT や CREATE などの書き込み権限を datashare に付けた場合に限り、利用側から書き込めます (マルチウェアハウスの書き込み)。
利用側の権限利用側では datashare からデータベースを作り、自分のユーザーやロールに改めて権限を付与します。

の重い処理を提供側のクラスターで行い、 用のクラスターやワークグループへ共有すると、ワークロードを分離しつつデータの複製を避けられます。


⑥監査のためのログ

ログ内容出力先
接続ログ認証の試行、接続と切断 または Logs
ユーザーログユーザーの作成・変更・削除S3 または CloudWatch Logs
ユーザーアクティビティログ実行されたクエリ (有効化の設定が必要)S3 または CloudWatch Logs
クラスターの作成や設定変更などの 操作CloudTrail

「誰がどの を実行したか」は の監査ログ、「誰がクラスターの設定を変えたか」は CloudTrail で調べます。

監査ログは既定では無効です。有効にすると接続ログとユーザーログが出力されますが、ユーザーアクティビティログは、さらにパラメータグループの enable_user_activity_logging を true にしないと記録されません (既定は false)。 S3 に出力する場合、の暗号化は (AES-256) だけが使え、S3 Object Lock を有効にしたバケットには出力できません。Redshift Serverless の監査ログは CloudWatch Logs にだけ出力できます。


試験対策

のセキュリティの問題では、「接続できるか ()」と「何が見えるか (データベースの権限)」を分けて考えます。 次に、隠したいのが「行」か「列」か「値の一部」かで、RLS、列レベルの GRANT、DDM を選び分けます。

①判断マトリクス

問題文のキーワード選ぶもの理由
職務ごとに権限をまとめ、ユーザーへ付与したいCREATE ROLE と GRANT ROLE (RBAC)ロールは入れ子にでき、システムの権限も含められます。
スーパーユーザーを使わずに管理作業を分担したいシステム定義のロール (sys:dba など)必要な管理権限だけを渡せます。
新しく作るテーブルにも自動で権限を付けたいALTER DEFAULT PRIVILEGES既定の権限を設定します。
特定の列を一部のユーザーに見せない列レベルの GRANT読める列を限定します。
地域の担当者に自地域の行だけ見せる (RLS)クエリを変えずに行を絞ります。
カード番号の末尾4桁だけ見せたい (DDM)保存値を変えずに結果だけ隠します。
一部のチームだけ元の値を見るDDM のポリシーを複数付け、優先度で制御ロールごとに見え方を変えます。
と のワークロードを分け、データの複製を避けたいデータ共有 (同じアカウント)コピーせず最新のデータを読めます。
別アカウントの部署に最新のデータを使わせたいデータ共有 (、承認と関連付け)両方を暗号化しておく必要があります。
データを外部の顧客へ有償で提供したい の datashare購読した顧客が直接クエリできます。
共有データの権限を で一元管理したいLake Formation で管理する datashareと同じ方式で権限を管理します。
誰がどの を実行したか記録したい監査ログのユーザーアクティビティログクエリの履歴を残します。

②よくある誤答

  • のポリシーでテーブルの行や列を絞れると考えること。データベースの中の権限は GRANT、RLS、DDM で制御します。
  • DDM が保存された値を書き換えると考えること。クエリの結果だけを変えます。
  • データ共有をのコピーと考えること。コピーせず、最新のデータを読みます。
  • DC2 など古いノードでもデータ共有が使えると考えること。RA3 と Serverless が対象です。
  • データ共有の計算の費用を提供側が払うと考えること。クエリを実行する利用側が払います。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください