Snowflakeのデータガバナンス機能とは?~設定方法、注意点を解説~(vol.24)

  • 公開日:
  • 最終更新日:

Snowflakeは、アクセスできるすべてのデータに対し、最高レベルのガバナンス(管理)を保証する業界最先端の機能を提供しています。
本記事では、Snowflakeのデータガバナンス機能の一部である「列レベルのセキュリティ」と「行レベルのセキュリティ」の概要/設定方法/注意点を解説します。

Snowflakeのデータガバナンスとは?

Snowflakeの公式ドキュメントにはデータガバナンスの説明について次の記載があります。

———————————————————————————–

  1. 列レベルのセキュリティ: テーブルまたはビュー内の列にマスキングポリシーを適用できます。これにより、特定のユーザーに対して列データを保護できます。
  2. 行レベルのセキュリティ: 行アクセスポリシーをテーブルまたはビューに適用して、クエリ結果に表示される行を制御できます。
  3. オブジェクトのタグ付け: 機密データを追跡するためにタグを使用できます。タグベースのマスキングポリシーを設定することで、列データを保護できます。
  4. Data Classification: 潜在的な個人データや機密データを分類できます。
  5. アクセス履歴: ユーザーアクセス履歴を監査できます。
  6. オブジェクトの依存関係: オブジェクトが別のオブジェクトを参照する方法を監査できます。
  7. Snowsight のデータガバナンスエリア: Dashboard と Tagged Objects の異なる2つのインターフェイスを使用して、テーブル、ビュー、列でのポリシーとタグの使用状況を監視できます

———————————————————————————–

(参照元) https://docs.snowflake.com/ja/guides-overview-govern

次章以降で、データガバナンスの「列レベルのセキュリティ」と「行レベルのセキュリティ」について解説します。

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

Snowflakeでは、「列レベルのセキュリティ」対策として、列(カラム)の値の表示可否をロールごとに制御できる機能が存在します。

例えば、下表のテーブルデータにおいて、ロールAに対して連絡先のカラムにマスキング設定を行います。

ロールAの権限でテーブルにアクセス(検索)した場合、下記のように連絡先がマスクした状態で表示されます。

マスキングを設定していない、ロールBの権限でテーブルにアクセス(検索)した場合、下記のように連絡先が登録された値が表示されます。

このように、ロールに応じて列(カラム)の値の表示/マスク表示(非表示)を設定可能とする機能が「列レベルのセキュリティ」です。
「列レベルのセキュリティ」機能を使用するには、Enterprise Edition以上のエディションが必要となります。

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

Snowflakeでは、「行レベルのセキュリティ」対策として、行(レコード)の表示可否をロールごとに制御できる機能が存在します。

例えば、下表のテーブルデータにおいて、ロールAに対してリージョンがJPのデータのみ表示可能に設定を行います。

ロールAの権限でテーブルにアクセス(検索)した場合、下記のようにリージョンがJPのデータのみ表示可能になります。

アクセス制限をしていない、ロールBの権限でテーブルにアクセス(検索)した場合、下記のように全てのレコード(行)が表示されます。

このように、ロールに応じて行(レコード)の表示/非表示を設定可能にする機能が「行レベルのセキュリティ」です。
「行レベルのセキュリティ」機能を使用するには、Enterprise Edition以上のエディションが必要となります。

Snowflakeのアクセスセキュリティ設定方法

本章では、2章と3章で解説した、「列レベルのセキュリティ」と「行レベルのセキュリティ」機能の設定方法を例示します。

「列レベルのセキュリティ」機能の設定方法

  • マスキングポリシーの設定
    マスキングポリシーを設定するには下記のように設定を行うロールとマスク内容(今回のマスクでは****)を下記のように設定します。
CREATE MASKING POLICY マスキングポリシー名 AS (val string) RETURNS string ->

CASE

   WHEN CURRENT_ROLE() IN (ロールA) THEN val

   ELSE '****'

END;
  • マスキングポリシーの適用
    マスキングポリシーを適用したいテーブル、カラムに対して、先ほど作成したマスキングポリシーを適用します。下記のSQLで設定を行います。
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 SET MASKING POLICY マスキングポリシー名;

以上の設定を行うことで、「列レベルのセキュリティ」機能を使用することができます。

「行レベルのセキュリティ」機能の設定方法

  • マッピングテーブルの作成
    ロールによって、表示可能な条件を設定するマッピングテーブルを準備します。
    今回はロールAに対してリージョンがJPのデータのみ表示する条件のデータを準備します。
    <マッピングテーブル>
ロール名 リージョン名
ロールA JP
  • アクセスポリシーの設定
    アクセスポリシーを設定するには下記のように設定を行うロールを下記のように設定します。
CREATE OR REPLACE ROW ACCESS POLICY アクセスポリシー名

AS (region varchar) returns boolean ->

  IS_ROLE_IN_SESSION(ロールB)

  or exists (

            select 1 from マッピングテーブル

              where ロール名 = current_user()

                and リージョン名 = region

          )

;
  • アクセスポリシーの適用
    アクセスポリシーを適用したいテーブルに対して、先ほど作成したアクセスポリシーを適用します。下記のSQLで設定を行います。
ALTER TABLE テーブル名 ADD ROW ACCESS POLICY アクセスポリシー名 ON (region);

以上の設定を行うことで、「行レベルのセキュリティ」機能を使用することができます。
*今回の例では、ロールAでアクセスした場合はリージョンがJPのレコード(行)のみ表示され、ロールBでアクセスした場合は、全てのレコードが表示されます。

注意点

「列レベルのセキュリティ」と「行レベルのセキュリティ」機能を使用する際は、Snowflakeのドキュメントに記載があるように、同じカラムに対してマスキングポリシーと行アクセスポリシーは付与できない仕様となっていることに注意しましょう。

———————————————————————————–

データベースオブジェクトに行アクセスポリシーと1つ以上の マスキングポリシー の両方がある場合、Snowflakeは最初に行アクセスポリシーを評価します。

特定のテーブルまたはビュー列は、行アクセスポリシー署名またはマスキングポリシー署名のいずれかで指定できます。つまり、行アクセスポリシー署名とマスキングポリシー署名の両方で同時に同じ列を指定することはできません。

———————————————————————————–

(参照元):https://docs.snowflake.com/ja/user-guide/security-row-intro#masking-policies

まとめ

ここまで、Snowflakのデータガバナンス機能の一部である「列レベルのセキュリティ」と「行レベルのセキュリティ」について、概要/設定方法/注意点を解説してまいりました。

Snowflakeの「列レベルのセキュリティ」/「行レベルのセキュリティ」機能を活用することで、データアクセスをセキュアに行うことが可能となりますので、ぜひ、ご参考にしていただければと思います。
*なお、Snowflakeは、本ブログ記事にて解説した「列レベルのセキュリティ」や「行レベルのセキュリティ」以外にも、「データアクセス履歴などを用いて監査を行う」機能なども有しています。

 弊社は、お客様ごとの要件(用途/データ連携元の環境構成/今後の活用方法など)に応じたデータ分析基盤の構築/拡充や、ガバナンスやセキュリティを担保したデータ活用の実現に向けたデータマネジメント体制の整備などをご支援しております。
Snowflakeを用いたデータ活用でお悩みの際は、是非、弊社までお声掛けください。

 本記事は、2024813日時点の情報を基に作成しています。製品・サービスに関する詳しいお問い合わせは、弊社Webサイトからお問い合わせください。
https://itsol.dentsusoken.com/snowflake/inquiry/