Tenez les secrets hors du code et des journaux

Sécurité AWS pour les développeurs

Rahul Singh

Technical Product Manager

Tout ce qui est sensible n'est pas un secret

Trois types de chaînes

  • Secret : un inconnu peut agir à votre place
  • Donnée sensible : une personne est exposée
  • Config : rien à gagner

Trois lignes empilées comparant un secret, une donnée sensible et une config. Chaque ligne montre deux exemples et ce qu'un inconnu pourrait en faire, d'agir à votre place jusqu'à rien à gagner.

Sécurité AWS pour les développeurs

Tout ce qui est sensible n'est pas un secret

Trois types de chaînes

  • Secret : un inconnu peut agir à votre place
  • Donnée sensible : une personne est exposée
  • Config : rien à gagner

Deux sigles pour les données perso

  • PII : personally identifiable information
  • PHI : protected health information

Trois lignes empilées comparant un secret, une donnée sensible et une config. Chaque ligne montre deux exemples et ce qu'un inconnu pourrait en faire, d'agir à votre place jusqu'à rien à gagner.

Sécurité AWS pour les développeurs

Quatre façons pour un secret de s'échapper

Un secret dans un système en cours d'exécution se répartit vers quatre sorties numérotées : 1 vers le code source et son historique, 2 vers les variables d'environnement, 3 vers les journaux d'application, 4 vers la sortie d'erreur et les traces. Les quatre convergent vers une boîte indiquant lisible par quelqu'un.

  1. Code source et historique
  2. Variables d'environnement
Sécurité AWS pour les développeurs

Quatre façons pour un secret de s'échapper

Un secret dans un système en cours d'exécution se répartit vers quatre sorties numérotées : 1 vers le code source et son historique, 2 vers les variables d'environnement, 3 vers les journaux d'application, 4 vers la sortie d'erreur et les traces. Les quatre convergent vers une boîte indiquant lisible par quelqu'un.

  1. Code source et historique
  2. Variables d'environnement
  3. Journaux d'application
  4. Sortie d'erreur et traces
Sécurité AWS pour les développeurs

Chiffré au repos ≠ caché

Le choix qui paraît sûr

  • Chiffré au repos, toujours
  • Clé AWS KMS, gérée par AWS par défaut

Une fonction Lambda avec une variable d'environnement se scinde en deux chemins. Sur disque, elle est chiffrée au repos avec une clé AWS KMS (en vert). Via l'API, un appel à GetFunctionConfiguration renvoie la valeur en clair (en rouge). Les deux aboutissent à une note : un seul chemin est protégé.

Sécurité AWS pour les développeurs

Chiffré au repos ≠ caché

Le choix qui paraît sûr

  • Chiffré au repos, toujours
  • Clé AWS KMS, gérée par AWS par défaut

Ce que renvoie GetFunctionConfiguration

  • La valeur, en clair

Une réponse de stockage à une question d'accès

Une fonction Lambda avec une variable d'environnement se scinde en deux chemins. Sur disque, elle est chiffrée au repos avec une clé AWS KMS (en vert). Via l'API, un appel à GetFunctionConfiguration renvoie la valeur en clair (en rouge). Les deux aboutissent à une note : un seul chemin est protégé.

Sécurité AWS pour les développeurs

Quel store, et pourquoi

Deux services, un rôle chacun

  • Secrets Manager : conçu pour les secrets
  • Parameter Store : conçu pour la config, et un paramètre SecureString est chiffré avec une clé KMS

Un diagramme en spectre. Secrets Manager à gauche, Systems Manager Parameter Store à droite, et quatre rails horizontaux entre les deux. Un marqueur numéroté sur chaque rail : 1 très à gauche, 2 à gauche du centre, 3 au centre, 4 très à droite, avec les coûts aux extrémités du 4e rail et une note : la rotation décide.

Sécurité AWS pour les développeurs

Quel store, et pourquoi

Deux services, un rôle chacun

  • Secrets Manager : conçu pour les secrets
  • Parameter Store : conçu pour la config, et un paramètre SecureString est chiffré avec une clé KMS

Quatre critères de choix

  1. Rotation gérée
  2. Partage inter-comptes
  3. Versionnement
  4. Coût

Un diagramme en spectre. Secrets Manager à gauche, Systems Manager Parameter Store à droite, et quatre rails horizontaux entre les deux. Un marqueur numéroté sur chaque rail : 1 très à gauche, 2 à gauche du centre, 3 au centre, 4 très à droite, avec les coûts aux extrémités du 4e rail et une note : la rotation décide.

Sécurité AWS pour les développeurs

Lire à la source, mettre en cache brièvement

Votre processus en cours d'exécution appelle GetSecretValue sur un store de secrets au marqueur 1, avec un rôle ciblé au marqueur 2 limité à un ARN de secret plus kms:Decrypt, et conserve la valeur renvoyée dans un cache en mémoire au marqueur 3 avant d'appeler une base ou une API partenaire.

  1. Appeler GetSecretValue au démarrage
  2. Rôle limité à un ARN de secret + kms:Decrypt
Sécurité AWS pour les développeurs

Lire à la source, mettre en cache brièvement

Votre processus en cours d'exécution appelle GetSecretValue sur un store de secrets au marqueur 1, avec un rôle ciblé au marqueur 2 limité à un ARN de secret plus kms:Decrypt, et conserve la valeur renvoyée dans un cache en mémoire au marqueur 3 avant d'appeler une base ou une API partenaire.

  1. Appeler GetSecretValue au démarrage
  2. Rôle limité à un ARN de secret + kms:Decrypt
  3. Mettre la valeur en cache en mémoire

Cachez à vie, et la rotation vous casse

Sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple switch ?

  • La nouvelle valeur est validée avant usage
  • Un switch unique casserait tous les clients d'un coup

Trois colonnes verticales : les étapes de rotation, le libellé et votre cache. Secrets Manager exécute createSecret, setSecret et testSecret, puis une ligne en pointillé marque le moment où finishSecret déplace le libellé. Au-dessus, AWSCURRENT vaut l'ancienne valeur et le cache est correct ; en dessous, AWSCURRENT vaut la nouvelle valeur et le même cache est hachuré en rouge. Deux remèdes : durée de cache courte et rafraîchissement en cas d'échec d'authentification.

Sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple switch ?

  • La nouvelle valeur est validée avant usage
  • Un switch unique casserait tous les clients d'un coup

Quatre étapes, une passation

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Trois colonnes verticales : les étapes de rotation, le libellé et votre cache. Secrets Manager exécute createSecret, setSecret et testSecret, puis une ligne en pointillé marque le moment où finishSecret déplace le libellé. Au-dessus, AWSCURRENT vaut l'ancienne valeur et le cache est correct ; en dessous, AWSCURRENT vaut la nouvelle valeur et le même cache est hachuré en rouge. Deux remèdes : durée de cache courte et rafraîchissement en cas d'échec d'authentification.

Sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple switch ?

  • La nouvelle valeur est validée avant usage
  • Un switch unique casserait tous les clients d'un coup

Quatre étapes, une passation

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Rien n'informe votre cache

  • Durée de quelques minutes, puis relire
  • Rafraîchir en cas d'échec d'authentification

Trois colonnes verticales : les étapes de rotation, le libellé et votre cache. Secrets Manager exécute createSecret, setSecret et testSecret, puis une ligne en pointillé marque le moment où finishSecret déplace le libellé. Au-dessus, AWSCURRENT vaut l'ancienne valeur et le cache est correct ; en dessous, AWSCURRENT vaut la nouvelle valeur et le même cache est hachuré en rouge. Deux remèdes : durée de cache courte et rafraîchissement en cas d'échec d'authentification.

Sécurité AWS pour les développeurs

Masquer, caviarder, rester débogable

Une ligne de journal brute contenant un ID de requête, un numéro de carte complet et un jeton, encadrés en rouge. En dessous, les trois champs après traitement : l'ID inchangé, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par un marqueur « redacted », avec une note : assez pour déboguer.

Nettoyez avant d'écrire

  • Masquer : forme conservée, valeur cachée
Sécurité AWS pour les développeurs

Masquer, caviarder, rester débogable

Une ligne de journal brute contenant un ID de requête, un numéro de carte complet et un jeton, encadrés en rouge. En dessous, les trois champs après traitement : l'ID inchangé, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par un marqueur « redacted », avec une note : assez pour déboguer.

Nettoyez avant d'écrire

  • Masquer : forme conservée, valeur cachée
  • Caviarder : valeur supprimée, marqueur laissé
Sécurité AWS pour les développeurs

Masquer, caviarder, rester débogable

Une ligne de journal brute contenant un ID de requête, un numéro de carte complet et un jeton, encadrés en rouge. En dessous, les trois champs après traitement : l'ID inchangé, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par un marqueur « redacted », avec une note : assez pour déboguer.

Nettoyez avant d'écrire

  • Masquer : forme conservée, valeur cachée
  • Caviarder : valeur supprimée, marqueur laissé

L'astreinte a besoin de config, un inconnu du reste

Sécurité AWS pour les développeurs

Passons à la pratique !

Sécurité AWS pour les développeurs

Preparing Video For Download...