プライバシーとセキュリティ
田中VPoE「データ品質フレームワークが整った。次はデータのプライバシーとセキュリティだ。NetShop社はEC事業なので、顧客の個人情報を大量に扱っている。漏洩は致命的だ。」
あなた「個人情報保護法やGDPR対応も必要ですよね。技術的な対策と組織的な対策の両方が必要だと思います。」
田中VPoE「その通り。プライバシーバイデザインの考え方で、最初からセキュリティを設計に組み込もう。」
データ分類
機密レベルの定義
| レベル | 名称 | 定義 | 例 |
|---|---|---|---|
| L1 | 公開 | 一般公開可能 | 商品カタログ、FAQ |
| L2 | 社内限定 | 社内のみ閲覧可 | 売上レポート、社内KPI |
| L3 | 機密 | 関係者のみ | 顧客名、メールアドレス |
| L4 | 極秘 | 特定権限者のみ | クレジットカード番号、パスワード |
個人情報の特定
| カテゴリ | データ項目 | 機密レベル |
|---|---|---|
| 直接識別子 | 氏名、メールアドレス | L3 |
| 準識別子 | 年齢、住所(市区町村) | L3 |
| 機微情報 | 健康情報、信条 | L4 |
| 決済情報 | クレジットカード番号 | L4 |
| 行動情報 | 購入履歴、閲覧履歴 | L2-L3 |
アクセス制御
RBAC(Role-Based Access Control)
役割定義:
data_admin:
- 全テーブルの読み書き
- ユーザー管理
data_engineer:
- staging/intermediate/martの読み書き
- rawデータの読み取り
data_analyst:
- martテーブルの読み取り
- ステージング以下はアクセス不可
business_user:
- ダッシュボードの閲覧のみ
- 個人情報カラムはマスキング
カラムレベルのアクセス制御
-- Snowflakeの例: 動的データマスキング
CREATE MASKING POLICY email_mask AS (val STRING)
RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('DATA_ADMIN', 'DATA_ENGINEER')
THEN val
ELSE REGEXP_REPLACE(val, '.+@', '***@')
END;
ALTER TABLE customers
MODIFY COLUMN email
SET MASKING POLICY email_mask;
データ保護の技術的対策
| 対策 | 手法 | ユースケース |
|---|---|---|
| 暗号化(保存時) | AES-256、KMS | データベース、S3 |
| 暗号化(転送時) | TLS 1.3 | API通信、データ連携 |
| マスキング | 部分マスキング | 個人情報のBIでの表示 |
| 仮名化 | ハッシュ化、トークナイゼーション | 分析用データセット |
| 匿名化 | k-匿名性、差分プライバシー | 公開データセット |
仮名化の実装例
import hashlib
def pseudonymize(value: str, salt: str = "netshop_2026") -> str:
"""仮名化: 元のデータに復元不可能なハッシュ値を生成"""
return hashlib.sha256(f"{salt}:{value}".encode()).hexdigest()[:16]
def mask_email(email: str) -> str:
"""メールアドレスのマスキング"""
local, domain = email.split("@")
return f"{local[0]}***@{domain}"
def mask_phone(phone: str) -> str:
"""電話番号のマスキング"""
return phone[:3] + "-****-" + phone[-4:]
監査ログ
# 監査ログの記録例
audit_log = {
"timestamp": "2026-03-06T10:30:00Z",
"user": "analyst_yamada",
"action": "SELECT",
"resource": "customers",
"columns_accessed": ["customer_id", "email", "region"],
"row_count": 1500,
"source_ip": "10.0.1.100",
"query_id": "q-20260306-001",
}
| 記録項目 | 説明 |
|---|---|
| 誰が | ユーザーID、ロール |
| 何を | テーブル、カラム、行数 |
| いつ | タイムスタンプ |
| どこから | IPアドレス、アプリケーション |
| なぜ | クエリID、用途 |
まとめ
| 項目 | ポイント |
|---|---|
| データ分類 | L1(公開)〜L4(極秘)の4段階で機密レベルを定義 |
| アクセス制御 | RBAC + カラムレベルマスキングで最小権限の原則を実現 |
| データ保護 | 暗号化、マスキング、仮名化、匿名化を使い分け |
| 監査ログ | 誰が・何を・いつ・どこから・なぜを記録 |
チェックリスト
- データの機密レベル分類を設計できる
- RBACとカラムレベルアクセス制御を説明できる
- マスキング、仮名化、匿名化の違いを説明できる
- 監査ログの必要項目を理解している
次のステップへ
プライバシーとセキュリティの基礎を学びました。次はコンプライアンスについて学びましょう。
推定読了時間:30分