Évitez les secrets dans le code et les journaux

Utiliser la 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 : quiconque peut agir en votre nom
  • Donnée sensible : une personne est exposée
  • Config : rien à gagner

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

Utiliser la sécurité AWS pour les développeurs

Tout ce qui est sensible n'est pas un secret

Trois types de chaînes

  • Secret : quiconque peut agir en votre nom
  • Donnée sensible : une personne est exposée
  • Config : rien à gagner

Deux noms pour les données personnelles

  • PII : renseignements personnels identifiables
  • PHI : renseignements de santé protégés

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

Utiliser la sécurité AWS pour les développeurs

Quatre façons pour un secret de fuiter

Un secret dans un système en marche 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 « lisible par quelqu'un ».

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

Quatre façons pour un secret de fuiter

Un secret dans un système en marche 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 « lisible par quelqu'un ».

  1. Code source et historique
  2. Variables d'environnement
  3. Journaux d'application
  4. Sortie d'erreur et traces
Utiliser la 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 sépare en deux chemins. Sur disque, elle est chiffrée au repos avec une clé AWS KMS (en vert). Par l'API, un appel à GetFunctionConfiguration renvoie la valeur en clair (en rouge). Une note indique : un seul chemin est protégé.

Utiliser la 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 d'entreposage à une question d'accès

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

Utiliser la sécurité AWS pour les développeurs

Quel entrepôt, et pourquoi

Deux services, chacun son rôle

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

Un diagramme en spectre. Secrets Manager à gauche, Systems Manager Parameter Store à droite, quatre rails horizontaux entre les deux. Un repère 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 quatrième rail et une note : la rotation tranche.

Utiliser la sécurité AWS pour les développeurs

Quel entrepôt, et pourquoi

Deux services, chacun son rôle

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

Quatre critères de choix

  1. Rotation gérée
  2. Partage entre comptes
  3. Gestion des versions
  4. Coût

Un diagramme en spectre. Secrets Manager à gauche, Systems Manager Parameter Store à droite, quatre rails horizontaux entre les deux. Un repère 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 quatrième rail et une note : la rotation tranche.

Utiliser la sécurité AWS pour les développeurs

Lire à neuf, mettre brièvement en cache

Votre processus en cours appelle GetSecretValue sur un coffre de secrets (repère 1), avec un rôle restreint (repère 2) à un seul ARN de secret plus kms:Decrypt, puis garde la valeur en mémoire cache (repère 3) avant d'appeler une base de données ou une API partenaire.

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

Lire à neuf, mettre brièvement en cache

Votre processus en cours appelle GetSecretValue sur un coffre de secrets (repère 1), avec un rôle restreint (repère 2) à un seul ARN de secret plus kms:Decrypt, puis garde la valeur en mémoire cache (repère 3) avant d'appeler une base de données 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

Cache illimité : la rotation vous brise

Utiliser la sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple échange

  • La nouvelle valeur est validée avant tout usage
  • Un échange unique briserait tous les clients d'un coup

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

Utiliser la sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple échange

  • La nouvelle valeur est validée avant tout usage
  • Un échange unique briserait tous les clients d'un coup

Quatre étapes, une passation

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

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

Utiliser la sécurité AWS pour les développeurs

La rotation déplace la valeur sous vos pieds

Pourquoi quatre étapes, pas un simple échange

  • La nouvelle valeur est validée avant tout usage
  • Un échange unique briserait tous les clients d'un coup

Quatre étapes, une passation

  • AWSPENDING, AWSCURRENT, AWSPREVIOUS

Rien n'avertit votre cache

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

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

Utiliser la sécurité AWS pour les développeurs

Masquer, caviarder, garder le débogage possible

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 intact, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par la mention « caviardé », avec une note « assez d'info pour déboguer ».

Assainir avant d'écrire

  • Masquage : forme conservée, valeur cachée
Utiliser la sécurité AWS pour les développeurs

Masquer, caviarder, garder le débogage possible

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 intact, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par la mention « caviardé », avec une note « assez d'info pour déboguer ».

Assainir avant d'écrire

  • Masquage : forme conservée, valeur cachée
  • Caviardage : valeur supprimée, mention laissée
Utiliser la sécurité AWS pour les développeurs

Masquer, caviarder, garder le débogage possible

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 intact, la carte masquée aux quatre derniers chiffres, et le jeton remplacé par la mention « caviardé », avec une note « assez d'info pour déboguer ».

Assainir avant d'écrire

  • Masquage : forme conservée, valeur cachée
  • Caviardage : valeur supprimée, mention laissée

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

Utiliser la sécurité AWS pour les développeurs

Passons à la pratique !

Utiliser la sécurité AWS pour les développeurs

Preparing Video For Download...