mcpField
P
performing-privacy-impact-assessment

performing-privacy-impact-assessment

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

performing-privacy-impact-assessment について

個人データ処理を評価するプライバシーチーム向けの影響評価スキルです。データフローの整理、リスク評価、GDPRとCCPA/CPRAの確認を行い、是正計画とレポートを作成します。

主な機能

  1. 01処理活動の登録とデータフローの整理
  2. 02プライバシー項目別のリスク評価
  3. 03GDPRとCCPA/CPRAへの適合確認
  4. 04是正計画と評価レポートの作成
  5. 05NIST Privacy Frameworkプロファイルへの対応付け

活用シーン

  1. 01新システムの個人データ処理を評価
  2. 02完全なDPIAが必要か事前判定
  3. 03複数の処理活動をまとめて評価
  4. 04プライバシー監査資料の準備

インストール

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-privacy-impact-assessment

インストール後、Claude Code で/performing-privacy-impact-assessmentを入力して読み込まれたか確認します。

同梱ファイル

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

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

プライバシー影響評価の実施

使用するタイミング

  • 個人データを取り扱う新しいシステム、製品、または処理活動を開始するとき
  • GDPR 第 35 条に基づくデータ保護影響評価(DPIA)を実施するとき
  • データ処理業務における CCPA/CPRA への準拠状況を評価するとき
  • NIST Privacy Framework に準拠したプライバシーリスク評価を実施するとき
  • 組織の境界やサードパーティの処理業者をまたぐデータフローをマッピングするとき
  • 自動化されたプライバシーガバナンスおよび評価パイプラインを構築するとき
  • 規制当局による監査に備えるとき、または説明責任を果たしていることを証明するとき

前提条件

  • GDPR、CCPA/CPRA、NIST Privacy Framework の概念に関する知識があること
  • データ処理インベントリおよびシステムアーキテクチャのドキュメントにアクセスできること
  • 必要な依存関係をインストールした Python 3.8+
  • データ保護責任者(DPO)またはプライバシーチームから適切な承認を得ていること
  • 組織のデータフローおよびサードパーティの処理業者との関係を把握していること

手順

フェーズ 1:データインベントリと処理活動のカタログ化

個人データの処理活動をすべて網羅したインベントリを作成します。処理活動記録(ROPA)の各項目には、データカテゴリ、法的根拠、保持期間、関係するデータ主体を記録する必要があります。

from agent import PrivacyImpactAssessmentEngine

engine = PrivacyImpactAssessmentEngine()

# Register a processing activity for assessment
activity = engine.register_processing_activity(
    name="Customer Analytics Platform",
    description="Collects browsing behavior and purchase history for personalization",
    data_controller="Acme Corp",
    data_processor="CloudAnalytics Inc",
    data_categories=["browsing_history", "purchase_records", "ip_address", "device_id"],
    data_subjects=["customers", "website_visitors"],
    legal_basis="consent",
    retention_period_days=730,
    cross_border_transfer=True,
    transfer_destinations=["US", "IN"],
    automated_decision_making=True,
)
print(f"Registered activity: {activity['activity_id']}")
フェーズ 2:データフローのマッピング

収集から削除までのすべてのデータフローをマッピングし、各接点、変換、保存場所を特定します。これにより、システム間のデータ移動に潜むプライバシーリスクが明らかになります。

# Build the data flow map
flow_map = engine.map_data_flows(
    activity_id=activity["activity_id"],
    flows=[
        {
            "stage": "collection",
            "source": "Web browser cookie + form submission",
            "destination": "CDN edge server",
            "data_elements": ["ip_address", "device_id", "browsing_history"],
            "encryption_in_transit": True,
            "protocol": "TLS 1.3",
        },
        {
            "stage": "processing",
            "source": "CDN edge server",
            "destination": "Analytics data warehouse (US-East)",
            "data_elements": ["browsing_history", "purchase_records", "device_id"],
            "encryption_in_transit": True,
            "encryption_at_rest": True,
            "protocol": "mTLS",
        },
        {
            "stage": "storage",
            "source": "Analytics data warehouse",
            "destination": "S3 encrypted bucket",
            "data_elements": ["browsing_history", "purchase_records"],
            "encryption_at_rest": True,
            "retention_days": 730,
            "access_controls": "IAM role-based, MFA required",
        },
        {
            "stage": "sharing",
            "source": "Analytics data warehouse",
            "destination": "Third-party ML provider (IN)",
            "data_elements": ["browsing_history", "purchase_records"],
            "encryption_in_transit": True,
            "data_processing_agreement": True,
            "cross_border": True,
        },
        {
            "stage": "deletion",
            "source": "S3 bucket + data warehouse",
            "destination": "Secure erasure",
            "method": "Cryptographic erasure + lifecycle policy",
            "verification": "Automated deletion audit log",
        },
    ],
)
engine.render_data_flow_diagram(flow_map)
フェーズ 3:スコアリングマトリックスによるプライバシーリスク評価

複数のプライバシーリスクの側面について、発生可能性と影響を評価する、体系的なリスクスコアリング手法を適用します。このマトリックスは、NIST PRAM と ICO DPIA のリスク評価アプローチの両方に準拠しています。

# Run the risk assessment
risk_report = engine.assess_privacy_risks(
    activity_id=activity["activity_id"],
    assessment_type="full_dpia",
)

# Display risk matrix results
for risk in risk_report["risks"]:
    print(f"[{risk['severity']}] {risk['category']}: {risk['description']}")
    print(f"  Likelihood: {risk['likelihood']}/5 | Impact: {risk['impact']}/5 | Score: {risk['risk_score']}/25")
    print(f"  Mitigation: {risk['recommended_mitigation']}")

評価対象のリスクカテゴリは次のとおりです。

  1. データ最小化 -- 明示された目的を超える過剰な収集
  2. 目的の限定 -- 法的根拠のない二次利用
  3. 越境移転 -- 十分な保護措置(SCC、BCR)を講じない移転
  4. 自動化された意思決定 -- 人による監督や異議申し立ての手段がないプロファイリング
  5. データ主体の権利 -- アクセス/消去/データポータビリティの要求に対応できないこと
  6. サードパーティリスク -- 処理業者のコンプライアンス上の不備、再処理業者の連鎖
  7. セキュリティ対策 -- 暗号化、アクセス制御、侵害対応の不備
  8. 保持 -- 必要性や法的要件を超えてデータを保存すること
  9. 同意管理 -- 無効または曖昧な同意の仕組み
  10. 侵害通知 -- 72 時間以内(GDPR)に検知して通知できないこと
フェーズ 4:GDPR および CCPA/CPRA との整合性チェック

特定の規制要件に照らして、自動コンプライアンスチェックを実行します。エンジンは各処理活動を、条文レベルの GDPR 義務および CCPA/CPRA の消費者の権利要件に照らしてマッピングします。

# GDPR compliance check
gdpr_report = engine.check_gdpr_compliance(activity_id=activity["activity_id"])
print(f"GDPR Score: {gdpr_report['compliance_score']}/100")
for finding in gdpr_report["findings"]:
    print(f"  [{finding['status']}] Art.{finding['article']}: {finding['description']}")

# CCPA/CPRA compliance check
ccpa_report = engine.check_ccpa_compliance(activity_id=activity["activity_id"])
print(f"CCPA Score: {ccpa_report['compliance_score']}/100")
for finding in ccpa_report["findings"]:
    print(f"  [{finding['status']}] Sec.{finding['section']}: {finding['description']}")
フェーズ 5:是正計画とレポートの生成

具体的な対応項目、担当者、期限を含む優先順位付きの是正計画を生成し、正式な PIA/DPIA レポートを作成します。

# Generate remediation plan
remediation = engine.generate_remediation_plan(
    activity_id=activity["activity_id"],
    risk_report=risk_report,
    gdpr_report=gdpr_report,
    ccpa_report=ccpa_report,
)

for item in remediation["action_items"]:
    print(f"[{item['priority']}] {item['action']}")
    print(f"  Owner: {item['owner']} | Deadline: {item['deadline']}")
    print(f"  Addresses: {', '.join(item['addresses_risks'])}")

# Generate formal DPIA report
engine.generate_dpia_report(
    activity_id=activity["activity_id"],
    output_path="dpia_report_customer_analytics.json",
    format="json",
)
print("[+] DPIA report generated")

例

簡易スクリーニング評価

ICO のスクリーニングチェックリストを使用して、完全な DPIA が必要かどうかを判断します。

engine = PrivacyImpactAssessmentEngine()

screening = engine.run_screening_checklist(
    uses_special_category_data=False,
    large_scale_processing=True,
    systematic_monitoring=True,
    automated_decision_making=True,
    cross_border_transfer=True,
    vulnerable_data_subjects=False,
    innovative_technology=True,
    denial_of_service_or_rights=False,
)
print(f"DPIA Required: {screening['dpia_required']}")
print(f"Triggers: {screening['triggers']}")
# Output: DPIA Required: True
# Triggers: ['large_scale_processing', 'systematic_monitoring',
#            'automated_decision_making', 'cross_border_transfer',
#            'innovative_technology']
複数の処理活動の一括評価
engine = PrivacyImpactAssessmentEngine()

activities = [
    {"name": "Email Marketing", "data_categories": ["email", "name"],
     "legal_basis": "consent", "cross_border_transfer": False},
    {"name": "HR Analytics", "data_categories": ["employee_id", "performance_scores",
     "health_data"], "legal_basis": "legitimate_interest", "cross_border_transfer": True},
    {"name": "Fraud Detection", "data_categories": ["transaction_data", "ip_address",
     "device_fingerprint"], "legal_basis": "legitimate_interest",
     "automated_decision_making": True, "cross_border_transfer": False},
]

for act_def in activities:
    activity = engine.register_processing_activity(**act_def)
    risk = engine.assess_privacy_risks(activity_id=activity["activity_id"])
    print(f"{act_def['name']}: Overall Risk={risk['overall_risk_level']} "
          f"({risk['risk_count_by_severity']})")
NIST Privacy Framework プロファイルのマッピング
engine = PrivacyImpactAssessmentEngine()

profile = engine.generate_nist_privacy_profile(
    activity_id=activity["activity_id"],
    target_tier="tier_3",  # Repeatable
)

for function_id, outcomes in profile["functions"].items():
    print(f"\n{function_id}:")
    for outcome in outcomes:
        status = "PASS" if outcome["implemented"] else "GAP"
        print(f"  [{status}] {outcome['subcategory']}: {outcome['description']}")

コメント