Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowflakeのマスキングポリシーを使ってみた

 Snowflakeのマスキングポリシーを使ってみた

2024/07/23に実施されたSnowVillage Unconference #2にて登壇した際の投影資料です。
現在関わっているSnowflakeを用いたDMP基盤構築案件で利用したマスキングポリシーについて、概要と、実際に自分もハマった注意点をまとめました。

tabata0208

July 28, 2024
Tweet

More Decks by tabata0208

Other Decks in Technology

Transcript

  1. CONFIDENTIAL ©2024 ARISE analytics 2 背景と目的 背景 ✓ 現在Snowflakeを用いた大規模 DMP基盤構築に関わっている。

    ✓ 本案件にて、個人情報をクエリ実行 時のロールに応じて選択的にデータを マスキングする要件を満たすため、マス キングポリシー機能を用いた。 本日の目的 ✓ マスキングポリシーの概要をご紹介する ✓ 実際にマスキングポリシーを利用する中 で知った注意点をご共有する
  2. CONFIDENTIAL ©2024 ARISE analytics 3 目次 2 自己紹介 1 3

    4 マスキングポリシーの概要紹介 マスキングポリシーの注意点 おわりに
  3. CONFIDENTIAL ©2024 ARISE analytics 4 目次 2 自己紹介 1 3

    4 マスキングポリシーの概要紹介 マスキングポリシーの注意点 おわりに
  4. CONFIDENTIAL ©2024 ARISE analytics 5 自己紹介 株式会社ARISE analytics Team Lead

    田畑 幹 経歴 ➢ 銀行 • 法人営業 ➢ Web企業 • Python x Django x AWSのWebアプリ開発をメインで担当。 • Reactを使用したSPA開発にも参画。 ➢ ARISE analytics プロジェクト • 店頭端末でのレコメンド機能PoC • 会員向け特典サービスの分析 • Terraform, Kubernetes Kubernetesを使用したアプリ展開・管理基盤 のPoC • BigQueryを中心としたGAアクセスログ集約GCP基盤の構築 • Snowflakeを用いたDMP基盤構築 趣味・好きなもの 旅行、バイク、日本酒、ダイビング
  5. CONFIDENTIAL ©2024 ARISE analytics 6 ARISE analytics とは? • 社名

    • 資本構成 • 営業開始 • 所在地 • 役員 • 社員数 : 株式会社ARISE analytics : KDDI 85% Accenture 15% : 2017年4月1日 : 渋谷区 渋谷2-21-2 渋谷ヒカリエ31F : 代表取締役 坂本 崇 / KDDI : 170名/業務委託・派遣含め約560名 ※2024年4月1日現在 会社概要 事業領域
  6. CONFIDENTIAL ©2024 ARISE analytics 7 目次 2 自己紹介 1 3

    4 マスキングポリシーの概要紹介 マスキングポリシーの注意点 おわりに
  7. CONFIDENTIAL ©2024 ARISE analytics 8 クエリ実行時に、マスキングポリシーに基づき、動的にデータをマスクする、列レベルのセキュリティ機 能。 https://docs.snowflake.com/ja/user-guide/security-column-ddm-intro ダイナミックデータマスキング マスキング

    対象① マスキング 対象② マスキング 対象外 hoge1 hoge2 hoge3 fuga1 fuga2 fuga3 マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 対象外 *masked* 3355fd... hoge3 *masked* 22b83a... fuga3 マスキング 対象① マスキング 対象② マスキング 対象外 hoge1 3355fd... hoge3 fuga1 22b83a... fuga3 ロールB ロールA ユーザA ユーザB ユーザ及びロール データが動的にマスクされて 表示される!
  8. CONFIDENTIAL ©2024 ARISE analytics 9 条件とマスキング処理で構成され、条件が満たされた場合に、事前に定義した処理で列の値をマス キングすることで機密データを保護する、スキーマレベルのオブジェクト。 https://docs.snowflake.com/ja/user-guide/security-column-intro#what-are- masking-policies マスキングポリシー

    マスキング 対象① マスキング 対象② マスキング 対象外 hoge1 hoge2 hoge3 fuga1 fuga2 fuga3 マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 対象外 *masked* 3355fd... hoge3 *masked* 22b83a... fuga3 マスキング 対象① マスキング 対象② マスキング 対象外 hoge1 3355fd... hoge3 fuga1 22b83a... fuga3 ロールB ロールA ユーザA ユーザB 対象: 文字列型 クエリ実行ロールが、 ロールAの場合は データをマスクして表示する。 対象: 文字列型 クエリ実行ロールが、 ロールA 或いは ロールBの 場合はデータをハッシュ化し て表示する。 ユーザ及びロール
  9. CONFIDENTIAL ©2024 ARISE analytics 10 1つ以上の異なる列の値に基づいてテーブルまたはビューの列データを選択的に保護するもの。 https://docs.snowflake.com/ja/user-guide/security-column-intro#use-conditional- columns 条件付きマスキングポリシー マスキング

    対象① マスキング 対象② マスキング 条件列 hoge1 hoge2 PUBLIC fuga1 fuga2 SENSITIVE マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 条件列 *masked* hoge2 PUBLIC *masked* 22b83a... SENSITIVE マスキング 対象① マスキング 対象② マスキング 条件列 hoge1 hoge2 PUBLIC fuga1 22b83a... SENSITIVE ロールB ロールA ユーザA ユーザB 対象: 文字列型 クエリ実行ロールが ロールA 或いは ロールBの場合 かつ マスキング条件列の値が”SENSITIVE”の場合、 データをハッシュ化して表示する。 ユーザ及びロール マスキング対象列とは別の列 の値に応じてマスキング対象 を選択的にマスキング
  10. CONFIDENTIAL ©2024 ARISE analytics 11 任意の文字列のキーと値のペアを、テーブルや列といった別のSnowflakeオブジェクトに割り当て ることのできるスキーマレベルオブジェクト。 タグ マスキング 対象①

    マスキング 対象② マスキング 対象外 hoge1 hoge2 hoge3 fuga1 fuga2 fuga3 マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 対象外 *masked* 3355fd... hoge3 *masked* 22b83a... fuga3 マスキング 対象① マスキング 対象② マスキング 対象外 hoge1 3355fd... hoge3 fuga1 22b83a... fuga3 ロールB ロールA ユーザA ユーザB ユーザ及びロール 対象: xxDB.xxSCHEMA.xxテーブル. マスキング対象①列 key: 文字列マスク用タグ value: TRUE
  11. CONFIDENTIAL ©2024 ARISE analytics 12 オブジェクトへのタグ付けとマスキングポリシーを組み合わせた機能。データベース、スキーマ、テーブ ル/ビューに対して設定することで、データを動的にマスキングすることができる。 タグベースのマスキングポリシー:概要 マスキング 対象①

    マスキング 対象② マスキング 対象外 hoge1 hoge2 hoge3 fuga1 fuga2 fuga3 マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 対象外 *masked* 3355fd... hoge3 *masked* 22b83a... fuga3 マスキング 対象① マスキング 対象② マスキング 対象外 hoge1 3355fd... hoge3 fuga1 22b83a... fuga3 ロールB ロールA ユーザA ユーザB ユーザ及びロール マスキングポリシーを タグに紐付け タグをマスキングしたい列に 紐付け
  12. CONFIDENTIAL ©2024 ARISE analytics 13 任意の文字列のキーと値のペアを、テーブルや列といった別のSnowflakeオブジェクトに割り当て ることのできるスキーマレベルオブジェクト。 タグベースのマスキングポリシー:メリット マスキングポリシーは複数割当可能(ただし同一データ型 に対しては1つのみ)。既存のワークフローを壊すことなく、

    ポリシーの追加・置換が可能。 改修が容易 タグ系統を活用することで、一度のオブジェクトへの割当 で多くのオブジェクトに適用可能。 スケーラブル マスキングポリシーを定義するロールと、マスキングポリシー をタグを通して列に設定するロールを分離することができ る。 権限の分離
  13. CONFIDENTIAL ©2024 ARISE analytics 14 目次 2 自己紹介 1 3

    4 マスキングポリシーの概要紹介 マスキングポリシーの注意点 おわりに
  14. CONFIDENTIAL ©2024 ARISE analytics 15 たとえ列レベルでマスキングポリシーつきのタグを割り当てても、マスキングポリシーが対象とするデー タ型と一致しない場合はマスキングされない! マスキングポリシー:注意点① マスキング 対象①

    マスキング 対象② マスキング 対象外 1234 hoge2 hoge3 5678 fuga2 fuga3 マスキングポリシー テーブル クエリ結果 タグ マスキング 対象① マスキング 対象② マスキング 対象外 1234 3355fd... hoge3 5678 22b83a... fuga3 マスキング 対象① マスキング 対象② マスキング 対象外 1234 3355fd... hoge3 5678 22b83a... fuga3 ロールB ロールA ユーザA ユーザB ユーザ及びロール マスキングポリシーが付与さ れた列のデータ型が数値型 対象: 文字列型 ロールAの場合はデータをマ スクして表示する。 ポリシーの対象と実データの データ型が異なるので マスキングされない!
  15. CONFIDENTIAL ©2024 ARISE analytics 16 マスキングポリシーの処理においては、インプットのデータ型とアウトプットのデータ型は必ず一致させ る必要がある。 タグベースのマスキングポリシー:注意点② 生年月日は 「YYYY-MM-**」

    フォーマットでマスキン グしなければならない 要件 日付型の「生年月日」列をマスキングポリシーで、 条件に応じて「YYYY-MM-**」にマスクする 「生年月日」列は文字列型で保持した上で、マス キングポリシーで、条件に応じて「YYYY-MM-**」 にマスクする 日付型の「生年月日」列をマスキングポリシーで、 条件に応じてnullにマスクする 実装不可: インプットのデータ型とアウトプットの データ型が異なるマスキングポリシーは作成不可。 実装可能 実装可能(ただし年月の情報も消えてしまう) 実装案 実装可否
  16. CONFIDENTIAL ©2024 ARISE analytics 18 目次 2 自己紹介 1 3

    4 マスキングポリシーの概要紹介 マスキングポリシーの注意点 おわりに