Aller au contenu

Cartographie de conformité

AKKO fournit des contrôles de sécurité intégrés qui correspondent aux principaux référentiels de conformité. Cette page documente comment chaque fonctionnalité AKKO s'aligne avec les exigences SOC 2, ISO 27001 et RGPD.

Ce n'est pas une certification

Cette cartographie est un guide de référence. L'obtention d'une certification formelle nécessite un audit indépendant, une documentation des politiques et des contrôles organisationnels au-delà de l'implémentation technique.

Tableau de correspondance des contrôles

Fonctionnalité AKKO Contrôle SOC 2 ISO 27001 RGPD
Keycloak SSO + MFA CC6.1 Contrôle d'accès A.9 Contrôle d'accès Art. 32 Sécurité
OPA Sécurité au niveau des lignes CC6.3 Accès logique A.9.4 Accès système Art. 25 Protection des données dès la conception
pgaudit + logs layer CC7.2 Supervision A.12.4 Journalisation Art. 30 Registre des traitements
object storage Webhook d'audit CC7.2 Supervision A.12.4 Journalisation Art. 30 Registre
Journal d'événements Keycloak CC7.2 Supervision A.12.4 Journalisation Art. 5 Responsabilité
Politiques réseau CC6.6 Périmètres système A.13 Sécurité des communications Art. 32 Sécurité
TLS partout CC6.7 Chiffrement A.10 Cryptographie Art. 32 Sécurité
Fonction akko_ai_pii() CC8.1 Gestion des changements A.18 Conformité Art. 17 Droit à l'effacement
CronJobs de sauvegarde CC7.5 Récupération A.12.3 Sauvegarde Art. 32 Sécurité
Helm RBAC (5 rôles) CC6.2 Accès basé sur les rôles A.9.2 Accès utilisateur Art. 32 Sécurité

Chiffrement au repos

Chiffrement des PVC

Les PersistentVolumeClaims (PVC) Kubernetes peuvent être chiffrés au repos en configurant la classe de stockage sous-jacente :

  • Fournisseurs cloud (EKS/AKS/GKE) : Activez le chiffrement sur la StorageClass en utilisant le KMS du fournisseur (ex. : chiffrement AWS EBS avec une CMK, Azure Disk SSE, GCP CMEK).
  • Bare metal / k3s : Utilisez des volumes chiffrés LUKS ou un pilote CSI prenant en charge le chiffrement (ex. : Longhorn avec chiffrement activé).
  • k3d (dev) : Non applicable -- le développement local ne nécessite pas de chiffrement au repos.
# Exemple : StorageClass AWS EBS chiffrée
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: encrypted-gp3
provisioner: ebs.csi.aws.com
parameters:
  encrypted: "true"
  kmsKeyId: "arn:aws:kms:eu-west-1:123456789:key/your-key-id"
  type: gp3

PostgreSQL TDE

Le chiffrement transparent des données (TDE) PostgreSQL est disponible via :

  1. Extension pg_tde (PostgreSQL 16+) : Chiffre les fichiers de données des tables au niveau du stockage.
  2. Chiffrement intégral du disque (recommandé) : Chiffrez le PVC sous-jacent comme décrit ci-dessus -- c'est plus simple et couvre le WAL, les fichiers temporaires et les index.

object storage Server-Side Encryption (SSE)

object storage prend en charge le SSE avec un KMS externe :

# values-production.yaml
minio:
  environment:
    MINIO_KMS_KES_ENDPOINT: "https://kes.akko.local:7373"
    MINIO_KMS_KES_KEY_NAME: "akko-minio-key"

Pour les déploiements air-gapped, utilisez object storage KES avec un backend Vault ou le keystore du système de fichiers intégré.

Immutabilité des journaux d'audit

Architecture

Logs des services --> log shipper --> logs layer --> Backend S3 (object storage)
                                               |
                                        Object Lock (WORM)

logs layer avec S3 Object Lock

Pour rendre les journaux d'audit immuables (Écriture unique, lectures multiples) :

  1. Créez un bucket object storage verrouillé :

    mc mb minio/akko-loki --with-lock
    mc retention set --default COMPLIANCE 365d minio/akko-loki
    
  2. Configurez logs layer pour utiliser le bucket verrouillé :

    # values-production.yaml
    loki:
      storage:
        type: s3
        s3:
          endpoint: minio.akko.svc:9000
          bucketnames: akko-loki
          access_key_id: "${MINIO_ROOT_USER}"
          secret_access_key: "${MINIO_ROOT_PASSWORD}"
    
  3. Résultat : Les journaux ne peuvent être ni supprimés ni modifiés pendant la période de rétention, satisfaisant les exigences SOC 2 CC7.2 et ISO 27001 A.12.4.

Rétention des données

Politiques de rétention configurables

La rétention logs layer est configurée via la section limits_config :

# values-production.yaml
loki:
  config:
    limits_config:
      retention_period: 365d        # Conserver les journaux pendant 1 an
    compactor:
      retention_enabled: true
      retention_delete_delay: 2h
      retention_delete_worker_count: 150

Rétention par flux

Différents types de journaux peuvent avoir des périodes de rétention différentes :

loki:
  config:
    limits_config:
      retention_stream:
        - selector: '{namespace="akko", app="keycloak"}'
          priority: 1
          period: 730d              # Journaux d'authentification : 2 ans
        - selector: '{namespace="akko", app="trino"}'
          priority: 1
          period: 365d              # Journaux de requêtes : 1 an
        - selector: '{namespace="akko", app="opa"}'
          priority: 1
          period: 730d              # Journaux de décisions de politiques : 2 ans

Demandes de personnes concernées (RGPD)

Pour le RGPD Art. 17 (Droit à l'effacement) :

  • Données utilisateur : Gérées dans PostgreSQL -- utilisez les instructions DELETE standard.
  • Journaux d'audit : Si le stockage WORM est utilisé, les journaux contenant des données personnelles sont conservés pendant la période de conformité. Documentez cela dans votre politique de confidentialité comme base légale (Art. 6(1)(c) -- obligation légale).
  • Détection des données personnelles : La fonction Trino akko_ai_pii() peut analyser les résultats de requêtes pour détecter les données personnelles avant l'export, contribuant à l'application de l'Art. 25 (Protection des données dès la conception).