対象読者
- データエンジニア、データアナリスト、セキュリティ担当者
- Snowflakeを利用する企業のIT管理者
- データガバナンスやコンプライアンスを重視する組織
説明すること / 説明しないこと
説明すること
- Snowflakeのデータ共有の仕組みと活用方法
- RBAC(ロールベースアクセス制御)の基本と実装例
- データマスキングとカラムレベルセキュリティの設定方法
- セキュリティ強化のベストプラクティスと失敗回避策
説明しないこと
- Snowflakeの内部実装や暗号化アルゴリズムの詳細
- 他社DWHとの詳細な比較やベンチマーク
- 高度なSQLチューニングやパフォーマンス最適化手法
1. なぜデータ共有とセキュリティが重要なのか
Snowflakeは、データをコピーせずに共有できる仕組みと高度なアクセス制御機能を提供し、セキュリティを確保しながら効率的なデータ活用を実現します。これにより、企業はガバナンスを維持しつつ、迅速な意思決定を支援できます。
本記事では以下を解説します:
- データ共有の仕組み
- RBAC(ロールベースアクセス制御)
- データマスキングとカラムレベルセキュリティ
2. データ共有の仕組み
Snowflakeでは、データをコピーせずに他アカウントと共有できます。
共有の種類
- アカウント間共有:Snowflakeアカウント同士でデータを共有
- Reader Account:Snowflakeを持たない外部ユーザー向けに専用アカウントを作成
特徴
- データは常にプロデューサー側で管理
- コンシューマーは自分のコンピュートリソースでクエリ実行
- リアルタイムで最新データを参照可能
3. サンプルSQL:データ共有
CREATE SHARE my_share;
GRANT USAGE ON DATABASE sales_db TO SHARE my_share;
GRANT SELECT ON ALL TABLES IN SCHEMA sales_db.public TO SHARE my_share;
ALTER SHARE my_share ADD ACCOUNT = 'consumer_account_id';
4. RBAC(ロールベースアクセス制御)
SnowflakeはRBACモデルを採用し、ユーザーやロールに基づいてアクセスを制御します。
標準ロール
- ACCOUNTADMIN:アカウント全体の管理
- SYSADMIN:オブジェクト管理(DB、テーブル)
- SECURITYADMIN:ユーザー・ロール管理
- USERADMIN:ユーザー作成
- PUBLIC:全ユーザーに付与される基本ロール
サンプルSQL:ロール管理
CREATE ROLE analyst;
GRANT SELECT ON TABLE sales_db.public.orders TO ROLE analyst;
GRANT ROLE analyst TO USER john_doe;
5. データマスキングとカラムレベルセキュリティ
Snowflakeはマスキングポリシーを使って、ユーザーのロールに応じてデータをマスクできます。
サンプルSQL:マスキングポリシー
CREATE MASKING POLICY mask_email AS (val STRING)
RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('ANALYST') THEN '***MASKED***'
ELSE val
END;
ALTER TABLE customers MODIFY COLUMN email SET MASKING POLICY mask_email;
6. ベストプラクティス
-
最小権限の原則を徹底
→ セキュリティリスクを最小化 -
カスタムロールを活用
→ 部門やプロジェクト単位でロール設計 -
共有データはビューを利用
→ 不要なカラムを除外し、セキュリティを強化
7. よくある失敗と回避策
失敗1:PUBLICロールに過剰な権限を付与
- 回避策:PUBLICには基本権限のみ
失敗2:Reader Accountのコスト管理を怠る
- 回避策:Reader Accountの利用状況を定期的に監視
8. 次回予告
次回は 「Snowflakeの高度な機能とベストプラクティス」 を解説します。
Streams、Tasks、Materialized Viewsを使った自動化とパフォーマンス改善を紹介します。