0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redshift の動的データマスキング(DDM)を試してみる

Posted at

やりたいこと

プレビュー中の Amazon Redshift 動的データマスキング(DDM)を試してみる。

Amazon Redshift が動的データマスキングのサポートを開始 (プレビュー)
Dynamic data masking (preview)

何者か

PII 等の機密情報を、クエリー実行時に動的にマスキングするポリシーを定義する機能。

なお PII 検知とマスキングの機能は AWS Glue にもあるが、実装は異なる。

機能 Redshift DDM Glue PII Detection
PIIの検知方法 手動。DDMポリシーに基づき列を明示指定 自動。機械学習とパターンマッチングで自動検知
PIIのマスキング方法 指定したルールに基づく 指定したルールに基づく
マスキングのタイミング クエリー時 ETL時
結果の永続性 表示のみ 変換して永続化
ユーザーごとの可視性制御 DDMポリシーで制御可 この機能では不可(Lake FormationのCLSで制御)

このように、DDM は永続的な変換ではなく、あくまでクエリー時のオンザフライでのマスキングを意図している。
PII 対応というと、分析環境に持ち込まないよう発生元でコントロールするとか、ETL で変換を行ってから格納するなどとかく手がかかりがちだが、データ発生元の処理や ETL、業務クエリーに手を加えることなく(あるいは専用のツールやサービスを購入することなく)、ポリシーをかぶせるだけで PII を含む機密データ対応ができる点が DDM の魅力と言えそうだ。

ステップバイステップ

1. preivew クラスターの作成

今回は Redshift Serverless を使う。

  • サーバーレスのコンソールに移動し、サーバーレスダッシュボードの画面を表示する。

  • バナーから preview ワークグループを作成する。
    スクリーンショット 2022-12-20 8.48.44.png

  • workgroup-previewという名称でワークグループを作成(VPCその他はデフォルト)。

  • namespace-previewという名称で名前空間を作成(同上)。

  • クエリエディタv2と IAM 認証(Federated User)を用いてクラスターに接続する。

2. データの準備

公式の例を参考に、クレジットカード番号を sha2 でハッシュする DDM を作成する。
まずはデータとユーザーの準備。

  • クレジットカード番号テーブルを作る。
/* テーブル作成 */
CREATE TABLE credit_cards (
  customer_id INT,
  credit_card TEXT
);

/* データ挿入 */
INSERT INTO credit_cards
VALUES
  (100, '4532993817514842'),
  (100, '4716002041425888'),
  (102, '5243112427642649'),
  (102, '6011720771834675'),
  (102, '6011378662059710'),
  (103, '373611968625635')
;

/* SELECT 権限付与 */
GRANT SELECT ON credit_cards TO PUBLIC;
  • 検証用ユーザーとロールを作る。

このユーザーには DDM ポリシーを適用し、マスクされた状態のデータのみを読める状態にする想定。
また、DDM をユーザーに紐付けるためのロールを作成する。

/* ユーザー作成 */
CREATE USER ddm_test_user WITH PASSWORD 'Password12358!';

/* ロール作成 */
CREATE ROLE ddm_test_role;

/* ロール付与 */
GRANT ROLE ddm_test_role TO ddm_test_user;

3. DDM の設定

DDM ポリシーを書き、ユーザーに紐付ける。

  • DDM ポリシーを作成する。
CREATE MASKING POLICY ddm_credit_card_sha2
WITH (credit_card varchar(256)) 
USING (sha2(credit_card + 'testSalt', 256));
  • DDM をロール経由で検証用ユーザーに紐付ける。
ATTACH MASKING POLICY ddm_credit_card_sha2
ON credit_cards(credit_card)
TO ROLE ddm_test_role
PRIORITY 10;

4. テスト

  • まず、管理者ユーザーで検索。
SELECT * FROM credit_cards;

スクリーンショット 2022-12-20 16.13.48.png

  • 接続をいったん解除し、検証用ユーザー(ddm_test_user)に切り替えてから再度検索。

スクリーンショット 2022-12-20 16.11.25.png

SELECT * FROM credit_cards;

スクリーンショット 2022-12-20 16.12.14.png

無事マスキングされていることがわかる。

制約

2023年1月現在、プレビューであり、以下の制約がある。

  • リージョンに制限がある(バージニア北部、オハイオ、オレゴン、アイルランド、ストックホルム、東京
  • preview モードで Redshift クラスターを作成する必要がある
    • DDM を使うには、preview_2022を選択する
    • 本番利用は不可

また、以下のシステムテーブルが用意されているが、Redshift Serverless ではサポートされていない。

/* DDM の一覧 */
SELECT * FROM svv_masking_policy;

/* DDM のアタッチ状況一覧 */
SELECT * FROM svv_attached_masking_policy; 

念のため Serverless でサポートされているシステムテーブル/ビューの一覧をチェックしてみたが、確かに載ってなかった。

他にも、公式ドキュメントにいくつか留意点がまとめられている。

まとめ

ETL なしで動的にマスキングができる点、ユーザーごとに可視性をコントロールできる点は便利だと思う。
あとは日本語データの処理の可否が気になるところだが、以下のようなサンプルデータで同じ手順を試してみたところ、一応問題なく通った。

CREATE TABLE name_jp (
  customer_id INT,
  customer_name TEXT
);
INSERT INTO name_jp
VALUES
  (001, '山田太郎'),
  (002, '下村花'),
  (003, '植村幸三')
;

スクリーンショット 2022-12-20 16.36.16.png

スクリーンショット 2022-12-20 16.34.13.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?