mcpField
B
building-purpose-limitation-enforcement

building-purpose-limitation-enforcement

github.com/mukul975セキュリティ32339 回インストール32 週間前に更新
リポジトリ

building-purpose-limitation-enforcement について

データ保護・エンジニアリングチーム向けの GDPR 目的制限の実装ガイドです。目的タグ付きデータ、アクセス制御、OPA ポリシーと Article 6(4) に基づく適合性評価を説明します。

主な機能

  1. 01データ取得時の処理目的の付与
  2. 02目的別アクセス制御
  3. 03目的に基づくアクセスの監査記録
  4. 04Article 6(4) に沿った適合性評価
  5. 05OPA によるポリシー定義

活用シーン

  1. 01無関係な目的でのデータアクセス制限
  2. 02新目的へのデータ転用申請の審査
  3. 03目的タグの適用範囲と評価状況の追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/privacy-data-protection-skills --skill building-purpose-limitation-enforcement

インストール後、Claude Code で/building-purpose-limitation-enforcementを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
template.md
references/
standards.md
workflows.md
scripts/
process.py

詳細

目的制限の適用の構築

概要

GDPR 第 5 条第 1 項 (b) は、個人データを「特定され、明示され、正当な目的のために収集し、その目的と相容れない方法でさらに処理してはならない」と定めています。これは、データ保護の基本原則の 1 つである目的制限の原則です。

管理者は、収集時または収集前に目的を特定する必要があります(直接収集の場合は第 13 条第 1 項 (c)、間接収集の場合は第 14 条第 1 項 (c))。その後、別の目的で処理するには、新たな適法性の根拠が必要となるか、第 6 条第 4 項に基づく適合性評価に合格する必要があります。

目的制限に関する第 29 条作業部会の意見書 03/2013(WP203)では、適合性評価について詳しく説明されており、第 6 条第 4 項に規定された 5 つの主な要素が示されています。

第 6 条第 4 項の適合性評価要素

管理者が、個人データを収集した目的とは異なる目的で処理しようとする場合、第 6 条第 4 項により、次の要素を考慮した適合性評価が求められます。

要素第 6 条第 4 項の参照先評価に関する質問
目的間の関連性第 6 条第 4 項 (a)当初の目的と新たな目的に関連性はありますか?
収集時の状況第 6 条第 4 項 (b)管理者とデータ主体の関係はどのようなものですか? 合理的に予想される範囲はどのようなものですか?
データの性質第 6 条第 4 項 (c)データには特別な種類の個人データ(第 9 条)や有罪判決に関するデータ(第 10 条)が含まれていますか?
影響第 6 条第 4 項 (d)さらなる処理がデータ主体にもたらす可能性のある影響は何ですか?
保護措置第 6 条第 4 項 (e)暗号化や仮名化など、適切な保護措置が講じられていますか?

次の場合、適合性評価は不要です。

  • 処理が同意に基づいている場合(第 6 条第 1 項 (a))— 新たな目的について新たな同意を取得できます
  • 処理が、必要かつ比例的な措置を定める EU または加盟国の法律に基づいている場合(第 6 条第 4 項の最終段落)
  • 第 89 条第 1 項に基づく、公益におけるアーカイブ、科学的・歴史的研究、または統計を目的とする処理の場合

目的タグ付きデータアーキテクチャ

設計原則
  1. 取り込み時の目的の紐付け — すべてのデータレコードに、システムへの入力時点で収集目的のタグを付けます
  2. 目的ベースのアクセス制御 — アクセスポリシーは、データフィールドごとではなく、目的ごとに定義します
  3. 目的の監査証跡 — すべてのアクセスについて、認可された目的を記録します
  4. 目的の有効期限 — 目的が達成されると、関連データの保持期間のカウントダウンが始まります
アーキテクチャ図
┌────────────────────────────────────────────────────────────┐
│                   Data Collection Points                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Web Form │  │ API Call │  │ IoT Feed │  │ Partner  │  │
│  │ P:ONBRD  │  │ P:ANALYT │  │ P:MAINT  │  │ P:MARKET │  │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘  │
│       └──────────────┼──────────────┼──────────────┘       │
└──────────────────────┼──────────────┼──────────────────────┘
                       │              │
┌──────────────────────▼──────────────▼──────────────────────┐
│              Purpose Tagging Gateway                        │
│  ┌─────────────────┐  ┌─────────────────────────────────┐  │
│  │ Purpose Registry │  │ Tag Injection Middleware        │  │
│  │ (canonical IDs)  │  │ (attaches purpose + timestamp)  │  │
│  └─────────────────┘  └─────────────────────────────────┘  │
└──────────────────────────────┬─────────────────────────────┘
                               │
┌──────────────────────────────▼─────────────────────────────┐
│              Purpose-Partitioned Data Store                  │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ ONBRD    │  │ ANALYT   │  │ MAINT    │  │ MARKET   │  │
│  │ Partition│  │ Partition│  │ Partition│  │ Partition│  │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘  │
└──────────────────────────────┬─────────────────────────────┘
                               │
┌──────────────────────────────▼─────────────────────────────┐
│              Purpose Enforcement Layer                       │
│  ┌─────────────────┐  ┌────────────────┐  ┌────────────┐  │
│  │ Policy Engine   │  │ Compatibility  │  │ Audit      │  │
│  │ (OPA / Cedar)   │  │ Assessor       │  │ Logger     │  │
│  └─────────────────┘  └────────────────┘  └────────────┘  │
└────────────────────────────────────────────────────────────┘
目的レジストリのスキーマ

各処理目的は、正式なメタデータとともに登録されます。

{
  "purpose_id": "PRP-ONBRD-001",
  "purpose_name": "Customer Account Onboarding",
  "description": "Collection and processing of personal data necessary to create and activate a customer account, verify identity, and establish the contractual relationship.",
  "lawful_basis": "Article 6(1)(b)",
  "data_categories": ["email", "display_name", "country_code", "identity_verification_result"],
  "controller": "Prism Data Systems AG",
  "retention_period_days": 2555,
  "retention_trigger": "account_closure",
  "compatible_purposes": ["PRP-SUPRT-001", "PRP-SECUR-001"],
  "incompatible_purposes": ["PRP-MARKET-001", "PRP-RESRCH-001"],
  "special_categories": false,
  "created_date": "2025-06-01",
  "last_reviewed": "2026-01-15",
  "review_cadence_days": 180,
  "owner": "product_team",
  "dpo_approved": true
}

目的ごとのアクセス制御

Open Policy Agent(OPA)によるポリシー・アズ・コード

目的ベースのアクセス制御は、目的レジストリに照らしてアクセス要求を評価する OPA ポリシーを使用して実装します。

# Prism Data Systems AG — Purpose-Based Access Policy

# Rule: Access is granted only if the requesting service's declared purpose
# matches a purpose tag on the requested data record.

allow {
    input.action == "read"
    input.resource.purpose_tags[_] == input.requester.declared_purpose
    purpose_is_active(input.requester.declared_purpose)
    role_authorized_for_purpose(input.requester.role, input.requester.declared_purpose)
}

# Rule: Cross-purpose access requires a completed compatibility assessment
allow {
    input.action == "read"
    not input.resource.purpose_tags[_] == input.requester.declared_purpose
    compatibility_assessment_approved(input.resource.purpose_tags, input.requester.declared_purpose)
    purpose_is_active(input.requester.declared_purpose)
}

# Rule: Write operations must include a valid purpose tag
allow {
    input.action == "write"
    valid_purpose(input.resource.purpose_tag)
    input.requester.declared_purpose == input.resource.purpose_tag
}
ロール・目的認可マトリックス
ロールONBRDANALYTSUPRTMARKETSECURBILLING
オンボーディングサービス読み取り/書き込み—————
分析パイプライン—読み取り————
サポートエージェント読み取り—読み取り/書き込み——読み取り
マーケティング自動化———読み取り——
セキュリティ運用読み取り読み取り読み取り読み取り読み取り/書き込み読み取り
請求サービス読み取り————読み取り/書き込み

目的の互換性評価ワークフロー

  1. 申請の提出 — サービスオーナーは、目的Aのもとで収集したデータを新たな目的Bのために処理する申請を提出し、その事業上の正当性を文書化します。

  2. 要素の分析 — データ保護オフィスは、GDPR第6条第4項の5つの要素を評価します。

    • 目的間の関連性(1~5で評価:1=関連性なし、5=密接に関連)
    • 文脈と期待(1~5で評価:1=予期されない、5=十分に予期される)
    • データの性質(1~5で評価:1=特別カテゴリ、5=機微でない)
    • 結果(1~5で評価:1=重大、5=影響は最小限)
    • 保護措置(1~5で評価:1=保護措置なし、5=包括的な保護措置)
  3. スコアリング — 合計スコアを算出します(範囲は5~25)。

    • 20~25:互換性あり。標準的な文書化を行ったうえで承認します。
    • 15~19:互換性がある可能性あり。追加の保護措置(仮名化、アクセス制限)を講じたうえで承認します。
    • 10~14:互換性がない可能性が高い。DPOへのエスカレーションとDPIAの検討が必要です。
    • 5~9:互換性なし。却下します。新たな適法根拠または個別の同意が必要です。
  4. 決定の記録 — 評価結果を目的レジストリに記録します。記録には、評価者の識別情報、日付、スコアの内訳、条件、見直し日を含めます。

  5. ポリシーの更新 — 承認された場合は、文書化された条件のもとで目的をまたぐアクセスを許可するよう、OPA ポリシーを更新します。

Prism Data Systems AG における実装

目的レジストリ

Prism Data Systems AG は、目的レジストリで14件の目的を登録・管理しています。

目的 ID名称適法根拠データカテゴリ
PRP-ONBRD-001顧客のオンボーディングArt. 6(1)(b)email, display_name, country_code
PRP-AUTH-001認証Art. 6(1)(b)email, password_hash, mfa_token
PRP-BILLING-001請求と請求書発行Art. 6(1)(b)billing_address, payment_method, vat_id
PRP-SUPRT-001カスタマーサポートArt. 6(1)(b)email, display_name, support_ticket_history
PRP-ANALYT-001製品分析Art. 6(1)(f)pseudonymized_user_id, feature_events, session_duration
PRP-MARKET-001ダイレクトマーケティングArt. 6(1)(a)email, display_name, marketing_preferences
PRP-SECUR-001セキュリティ監視Art. 6(1)(f)ip_address, user_agent, login_events
PRP-LEGAL-001法令遵守Art. 6(1)(c)transaction_records, consent_records
適用指標

Prism Data Systems AG は、以下の目的制限の適用指標を追跡しています。

指標目標測定方法
目的タグの付与率レコードの100%有効な目的タグが付与されたデータレコードの割合
ブロックされた目的間アクセスの試行評価なしの場合は95%超ポリシーエンジンによる拒否件数と目的間リクエスト総数の比較
完了した互換性評価5営業日以内に100%申請からDPOの決定までの期間
目的レジストリの見直し状況定められた周期内に100%を見直し見直し周期内に見直された目的の割合

主要な規制上の参照先

  • GDPR第5条第1項(b) — 目的制限の原則
  • GDPR第6条第4項 — 互換性評価の要素
  • GDPR第13条第1項(c) — 収集時の目的に関する情報
  • GDPR第14条第1項(c) — 間接的な収集における目的に関する情報
  • GDPR第89条第1項 — アーカイブ、研究、統計に関する例外
  • GDPR前文第50項 — 追加処理の互換性
  • 第29条作業部会「目的制限に関する意見書 03/2013」(WP203)
  • EDPB「第25条『設計によるデータ保護およびデフォルトによるデータ保護』に関するガイドライン 4/2019」

コメント