0Pricing
AI Agents · Pelajaran

Kepatuhan Regulasi: GDPR dan SOC2

Minimalisasi data, pelacakan persetujuan, dan kontrol akses untuk agen yang patuh.

Kepatuhan Regulasi: GDPR dan SOC2 adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Mengapa Peraturan Berlaku bagi Agen AI

Agen AI memproses data pengguna, membuat keputusan, dan melakukan tindakan. Hal ini membuat agen tersebut secara langsung termasuk dalam cakupan peraturan perlindungan data (GDPR) dan kerangka kerja keamanan (SOC 2).

Kepatuhan bukanlah pilihan — pelanggaran dapat dikenai denda hingga 4% dari pendapatan tahunan global berdasarkan GDPR.

GDPR: Minimalisasi Data

Prinsip minimalisasi data dalam GDPR mengharuskan pengumpulan hanya data pribadi yang benar-benar diperlukan untuk tujuan yang dinyatakan. Agen tidak boleh menyimpan transkrip percakapan lengkap jika hanya hasilnya (terselesaikan/belum terselesaikan) yang diperlukan untuk analitik.

def minimized_log_entry(conversation: list[dict], user_id: str) -> dict:
    '''Store only what is needed — not the full transcript.'''
    return {
        'user_id':       user_id,
        'timestamp':     conversation[-1].get('timestamp'),
        'turns':         len(conversation),
        'resolved':      conversation[-1].get('resolved', False),
        'intent':        conversation[-1].get('intent'),
        'satisfaction':  conversation[-1].get('csat_score'),
        # NOT stored: full message text, PII mentioned in conversation
    }

# WRONG — stores raw messages which may contain PII
# {'messages': conversation, 'user_id': user_id}

if __name__ == '__main__':
    conversation = [
        {'timestamp': 1717000000, 'resolved': True, 'intent': 'reset_password', 'csat_score': 5}
    ]
    print('Minimized log entry:', minimized_log_entry(conversation, user_id='u42'))

GDPR: Melacak Persetujuan

Sebelum agen memproses data pribadi, Anda harus memiliki dasar hukum — biasanya persetujuan pengguna. Lacak kapan persetujuan diberikan, hal-hal yang dicakupnya, dan hormati pencabutannya.

from datetime import datetime, timezone

consent_store: dict[str, dict] = {}  # user_id -> consent record

def record_consent(user_id: str, purpose: str, version: str = '1.0'):
    if user_id not in consent_store:
        consent_store[user_id] = {'purposes': {}}
    consent_store[user_id]['purposes'][purpose] = {
        'granted':     True,
        'timestamp':   datetime.now(timezone.utc).isoformat(),
        'version':     version
    }

def withdraw_consent(user_id: str, purpose: str):
    if user_id in consent_store:
        consent_store[user_id]['purposes'].pop(purpose, None)

def has_consent(user_id: str, purpose: str) -> bool:
    return bool(
        consent_store.get(user_id, {}).get('purposes', {}).get(purpose, {}).get('granted')
    )

if __name__ == '__main__':
    record_consent('u42', 'marketing_emails')
    print('Has consent:', has_consent('u42', 'marketing_emails'))
    withdraw_consent('u42', 'marketing_emails')
    print('Has consent after withdrawal:', has_consent('u42', 'marketing_emails'))

GDPR: Hak untuk Menghapus (Hak untuk Dilupakan)

Ketika pengguna meminta penghapusan, agen harus menghapus semua data pribadi yang terkait dengan pengguna tersebut — termasuk catatan agen, riwayat percakapan, dan profil yang disimpan sementara. Hal ini harus dilakukan dalam waktu 30 hari sejak permintaan diterima.

import os

def erase_user_data(user_id: str, conn) -> dict:
    '''Delete all personal data for a user across all storage systems.'''
    deleted = {}

    # 1. Delete from audit log (if not using WORM storage)
    with conn.cursor() as cur:
        cur.execute('DELETE FROM agent_audit_log WHERE user_id = %s', (user_id,))
        deleted['audit_log_rows'] = cur.rowcount

    # 2. Delete conversation history
    with conn.cursor() as cur:
        cur.execute('DELETE FROM conversation_history WHERE user_id = %s', (user_id,))
        deleted['conversations'] = cur.rowcount

    # 3. Remove consent record
    consent_store.pop(user_id, None)
    deleted['consent_record'] = 1

    # 4. Clear cached profile
    profile_cache = {}  # reference to your cache
    profile_cache.pop(user_id, None)
    deleted['profile_cache'] = 1

    conn.commit()
    return {'user_id': user_id, 'erased': deleted}

GDPR: Portabilitas Data

Pengguna berhak menerima datanya dalam format yang dapat dibaca mesin (misalnya, JSON atau CSV). Bangun fungsi ekspor yang mengumpulkan semua data tentang pengguna yang tersimpan di seluruh sistem agen.

import json

def export_user_data(user_id: str, conn) -> str:
    export = {'user_id': user_id, 'data': {}}

    with conn.cursor() as cur:
        cur.execute(
            'SELECT timestamp, action_type, result FROM agent_audit_log '
            'WHERE user_id = %s ORDER BY timestamp',
            (user_id,)
        )
        rows = cur.fetchall()
        export['data']['audit_log'] = [
            {'timestamp': r[0], 'action': r[1], 'result': r[2]}
            for r in rows
        ]

    export['data']['consent'] = consent_store.get(user_id, {})
    return json.dumps(export, indent=2)

SOC 2: Pengendalian Akses

SOC 2 Tipe II mengharuskan pembuktian bahwa akses ke sistem dan data dibatasi hanya bagi pihak yang berwenang. Untuk agen, hal ini berarti: akses berbasis peran ke alat agen, MFA untuk akses administrator, dan peninjauan akses secara berkala.

ROLE_PERMISSIONS = {
    'agent_basic':    {'web_search', 'read_file', 'query_database'},
    'agent_email':    {'web_search', 'read_file', 'query_database', 'send_email'},
    'agent_admin':    {'web_search', 'read_file', 'write_file', 'query_database',
                       'send_email', 'create_ticket', 'execute_python_sandbox'},
    'human_admin':    {'*'}  # all permissions
}

def get_permitted_actions(role: str) -> set:
    perms = ROLE_PERMISSIONS.get(role, set())
    if '*' in perms:
        return ALLOWED_ACTIONS  # reference to full allowlist
    return perms

def check_role_permission(role: str, action: str) -> bool:
    return action in get_permitted_actions(role)

SOC 2: Enkripsi Data Saat Tersimpan dan Saat Transit

SOC 2 mewajibkan enkripsi data sensitif saat tersimpan (enkripsi basis data, disk terenkripsi) dan saat transit (TLS 1.2+). Untuk agen, ini berarti: penyimpanan percakapan terenkripsi, penggunaan TLS pada semua pemanggilan API, serta tidak adanya rahasia dalam bentuk teks biasa di catatan.

from cryptography.fernet import Fernet
import os

# Key stored in environment variable, never in code
ENCRYPTION_KEY = os.environ.get('LOG_ENCRYPTION_KEY', Fernet.generate_key())
cipher = Fernet(ENCRYPTION_KEY)

def encrypt_sensitive_field(value: str) -> str:
    return cipher.encrypt(value.encode()).decode()

def decrypt_sensitive_field(encrypted: str) -> str:
    return cipher.decrypt(encrypted.encode()).decode()

# Usage: encrypt PII before storing in audit log
encrypted_email = encrypt_sensitive_field('user@example.com')
print(encrypted_email[:30], '...')  # starts with gAAAA...

SOC 2: Catatan Audit untuk Peristiwa Keamanan

Auditor SOC 2 ingin melihat catatan peristiwa keamanan: upaya login, akses ke data sensitif, perubahan konfigurasi, dan pelanggaran kebijakan. Catatan ini harus disimpan dengan aman dan dipertahankan setidaknya selama 1 tahun.

import logging, json, time

security_logger = logging.getLogger('agent.security')

SECURITY_EVENTS = {
    'auth_success', 'auth_failure', 'policy_violation',
    'data_access_pii', 'admin_action', 'config_change'
}

def log_security_event(event_type: str, agent_id: str,
                       user_id: str, details: dict):
    assert event_type in SECURITY_EVENTS, f'Unknown security event: {event_type}'
    entry = {
        'timestamp':  time.time(),
        'event_type': event_type,
        'agent_id':   agent_id,
        'user_id':    user_id,
        'details':    details
    }
    security_logger.warning(json.dumps(entry))

if __name__ == '__main__':
    import sys
    security_logger.addHandler(logging.StreamHandler(sys.stdout))
    log_security_event('auth_failure', 'agent-1', 'user-42', {'reason': 'bad_token'})

Melacak PII dalam Keluaran Agen

Agen sebaiknya tidak menyertakan PII dalam keluaran yang dicatat atau dikirim ke layanan pihak ketiga (analitik, pemantauan). Pindai konten yang akan dikirim untuk menemukan pola PII sebelum transmisi.

import re

PII_PATTERNS = [
    (r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', 'email'),
    (r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b',                         'phone'),
    (r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b',           'credit_card'),
    (r'\b\d{3}-\d{2}-\d{4}\b',                                   'ssn')
]

def redact_pii(text: str) -> tuple[str, list[str]]:
    redacted = text
    found_types = []
    for pattern, pii_type in PII_PATTERNS:
        if re.search(pattern, redacted):
            found_types.append(pii_type)
            redacted = re.sub(pattern, f'[{pii_type.upper()}_REDACTED]', redacted)
    return redacted, found_types

text, types = redact_pii('Contact john@example.com or call 555-867-5309')
print(text)
print('PII found:', types)

Menyusun Daftar Periksa Kepatuhan

Sebelum menerapkan agen yang menangani data pribadi, pastikan kontrol berikut telah tersedia.

COMPLIANCE_CHECKLIST = [
    ('GDPR',  'Consent captured before processing personal data'),
    ('GDPR',  'Data minimization: only necessary data is collected'),
    ('GDPR',  'Right-to-erasure endpoint implemented and tested'),
    ('GDPR',  'Data portability export available'),
    ('GDPR',  'Data retention policy enforced (auto-delete after N days)'),
    ('SOC2',  'Role-based access control implemented for all agent tools'),
    ('SOC2',  'All data encrypted at rest and in transit (TLS 1.2+)'),
    ('SOC2',  'Security events logged and retained for 12+ months'),
    ('SOC2',  'Access reviews scheduled quarterly'),
    ('SOC2',  'Incident response plan documented'),
    ('BOTH',  'PII redaction applied to logs and analytics exports'),
    ('BOTH',  'Vendor DPAs signed for all third-party APIs used'),
]

for framework, control in COMPLIANCE_CHECKLIST:
    print(f'[ ] [{framework}] {control}')

Otomatisasi Penyimpanan Data

GDPR mewajibkan data dihapus ketika tidak lagi diperlukan untuk tujuan awalnya. Otomatiskan hal ini dengan tugas kebijakan penyimpanan yang menghapus catatan lama berdasarkan periode penyimpanan yang dapat dikonfigurasi.

from datetime import datetime, timedelta, timezone

RETENTION_POLICIES = {
    'conversation_history': 90,    # days
    'agent_audit_log':      365,
    'cached_profiles':      1,
    'session_data':         30
}

def purge_expired_data(conn):
    purged = {}
    for table, retention_days in RETENTION_POLICIES.items():
        cutoff = datetime.now(timezone.utc) - timedelta(days=retention_days)
        try:
            with conn.cursor() as cur:
                cur.execute(
                    f'DELETE FROM {table} WHERE timestamp < %s',
                    (cutoff.timestamp(),)
                )
                purged[table] = cur.rowcount
        except Exception as e:
            purged[table] = f'Error: {e}'
    conn.commit()
    return purged

if __name__ == '__main__':
    class FakeCursor:
        def __enter__(self):
            return self
        def __exit__(self, *exc):
            return False
        def execute(self, sql, params):
            self.rowcount = 3

    class FakeConn:
        def cursor(self):
            return FakeCursor()
        def commit(self):
            pass

    result = purge_expired_data(FakeConn())
    print('Rows purged per table:')
    for table, count in result.items():
        print(f'  {table}: {count}')

Apa prinsip minimisasi data dalam GDPR?

Minimisasi data merupakan salah satu prinsip utama GDPR dan secara langsung memengaruhi cara sistem agen harus dirancang sejak awal.

Rangkuman Kepatuhan terhadap GDPR dan SOC 2

Kepatuhan terhadap GDPR memerlukan: pelacakan persetujuan, minimisasi data, penerapan hak untuk menghapus data, ekspor portabilitas, dan penyamaran PII dalam catatan.

SOC 2 memerlukan: kontrol akses berbasis peran, enkripsi saat data tersimpan dan saat transit, pencatatan peristiwa keamanan, serta peninjauan akses. Otomatiskan kebijakan penyimpanan untuk menghapus data yang sudah kedaluwarsa.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kepatuhan Regulasi: GDPR dan SOC2” gratis?

Ya — teks lengkap “Kepatuhan Regulasi: GDPR dan SOC2” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kepatuhan Regulasi: GDPR dan SOC2”?

Minimalisasi data, pelacakan persetujuan, dan kontrol akses untuk agen yang patuh. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Kepatuhan Regulasi: GDPR dan SOC2” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pencatatan Tindakan Agen yang Tidak Dapat Diubah
  2. Penegakan Kebijakan untuk Tindakan Agen
  3. Kepatuhan Regulasi: GDPR dan SOC2
  4. Gerbang Persetujuan dengan Keterlibatan Manusia
← Kembali ke AI Agents