列レベルおよび行レベルのセキュリティ

Snowflake の管理、ガバナンス、コラボレーション

Emily Melhuish

Technical Curriculum Developer, Snowflake

テーブルレベルアクセスの問題点

テーブルアクセスを示すusersテーブル

  • Claroのusersテーブルには氏名、メール、信用スコア、信用ランクが含まれる
  • アナリストロールにSELECTを付与するとすべての列が公開される
  • キャンペーンアナリストには生の信用スコアは不要
  • テーブルレベルのアクセス制御ではその区別ができない
Snowflake の管理、ガバナンス、コラボレーション

列レベルセキュリティとは

  • 列は結果に残り、値のみが変わる
  • 権限のあるロールは実際の値を参照でき、権限のないロールはマスクされた値を参照する
  • マスキングはクエリ実行時にロールに基づいて行われる=動的データマスキング

column_security_v2.png

Snowflake の管理、ガバナンス、コラボレーション

動的データマスキング

動的データマスキングありとなしの2つのテーブルを示すダイアグラム

Snowflake の管理、ガバナンス、コラボレーション

マスキングポリシーの作成と適用

CREATE MASKING POLICY mask_credit_score
  AS (val NUMBER) RETURNS NUMBER ->
  CASE
    WHEN IS_ROLE_IN_SESSION('CREDIT_ADMIN') THEN val
    ELSE -9999
  END;

ALTER TABLE core.users
  MODIFY COLUMN credit_score
  SET MASKING POLICY mask_credit_score;
  • CURRENT_ROLEはアクティブなプライマリロールを返す
1 https://docs.snowflake.com/en/sql-reference/sql/create-masking-policy#example-normal-masking-policy
Snowflake の管理、ガバナンス、コラボレーション

外部トークン化

  • 動的データマスキングの代替手段
  • サードパーティのトークン化プロバイダーと外部関数が必要
  • 機密値はシステム間で一貫したトークンに置き換えられる
  • 同じトークンをSnowflake外でも使用する場合に有効

external_tokenization_v2.png

1 https://docs.snowflake.com/en/user-guide/security-column-ext-token-use
Snowflake の管理、ガバナンス、コラボレーション

行レベルセキュリティとは

アナリストが特定の行のみ参照できる2つのテーブル

Snowflake の管理、ガバナンス、コラボレーション

行アクセスポリシーの仕組み

US_ANALYSTのクエリが行アクセスポリシーを通過し、US行のみ返され、EU_ANALYSTはEU行のみ返されるダイアグラム

  • ポリシーがクエリ実行ロールを評価し、フィルターを適用する
Snowflake の管理、ガバナンス、コラボレーション

行アクセスポリシーの作成と適用

CREATE ROW ACCESS POLICY region_filter
  AS (region_col VARCHAR) RETURNS BOOLEAN ->
  CASE
    WHEN IS_ROLE_IN_SESSION('US_ANALYST') THEN region_col = 'US'
    WHEN IS_ROLE_IN_SESSION('EU_ANALYST') THEN region_col = 'EU'
    ELSE FALSE
  END;

ALTER TABLE core.users
  ADD ROW ACCESS POLICY region_filter ON (region);
Snowflake の管理、ガバナンス、コラボレーション

データマスキングと行アクセスポリシーの併用

動的データマスキングと行アクセスポリシー

Snowflake の管理、ガバナンス、コラボレーション

演習に挑戦しましょう!

Snowflake の管理、ガバナンス、コラボレーション

Preparing Video For Download...