Rôles, justificatifs temporaires et SigV4

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

Rahul Singh

Technical Product Manager

La clé qui survit à la tâche

Pour accélérer le travail, une clé est créée dans un script et enregistrée dans un fichier de configuration.

Dans ce fichier, elle est :

  • Jamais renouvelée
  • Jamais révoquée
  • Jamais expirée

Une clé d'accès recopiée vers six emplacements de stockage, avec à droite un axe temporel montrant qu'elle est encore valide au mois dix-huit

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

La clé qui survit à la tâche

Pour accélérer le travail, une clé est créée dans un script et enregistrée dans un fichier de configuration.

Dans ce fichier, elle est :

  • Jamais renouvelée
  • Jamais révoquée
  • Jamais expirée

 

18 mois plus tard, elle est toujours valide

Une clé d'accès recopiée vers six emplacements de stockage, avec à droite un axe temporel montrant qu'elle est encore valide au mois dix-huit

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

Des justificatifs qui expirent d'eux‑mêmes

Faire de l'expiration la valeur par défaut avec AWS STS

  1. Demander un rôle, obtenir des justificatifs avec une horloge intégrée

  2. Security Token Service (STS) : expiration incluse, une heure par défaut

Une application appelle AssumeRole sur AWS STS, et STS renvoie des justificatifs avec une horloge intégrée.

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

Des justificatifs qui expirent d'eux‑mêmes

Faire de l'expiration la valeur par défaut avec AWS STS

  1. Demander un rôle, obtenir des justificatifs avec une horloge intégrée

  2. Les justificatifs temporaires commencent par ASIA et portent un jeton de session

  3. Security Token Service (STS) : expiration incluse, une heure par défaut

Une application appelle AssumeRole sur AWS STS et reçoit des justificatifs avec une horloge intégrée. En dessous, deux justificatifs côte à côte : une clé à longue durée commençant par AKIA, sans jeton de session et qui n'expire jamais, et des justificatifs temporaires commençant par ASIA, avec jeton de session et expirant en une heure.

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

Des justificatifs qui expirent d'eux‑mêmes

Faire de l'expiration la valeur par défaut avec AWS STS

  1. Demander un rôle, obtenir des justificatifs avec une horloge intégrée

  2. Les justificatifs temporaires commencent par ASIA et portent un jeton de session

  3. Le même appel est accepté, puis ne l'est plus

  4. Security Token Service (STS) : expiration incluse, une heure par défaut

Une application appelle AssumeRole sur AWS STS et reçoit des justificatifs avec une horloge intégrée. En dessous, une clé à longue durée commençant par AKIA qui n'expire jamais à côté de justificatifs temporaires commençant par ASIA, avec jeton de session et expirant en une heure. Plus bas, le même appel GetObject renvoyant 200 OK à dix heures et ExpiredToken à onze heures cinq.

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

Comment votre code les trouve

Vérifier la chaîne de fournisseurs de justificatifs

  • L'AWS SDK, la bibliothèque dans votre code, fait la recherche
  • Une liste fixe, vérifiée dans l'ordre
  • S'arrête au premier résultat

Ordre de recherche des justificatifs : une clé passée en code est biffée au-dessus de la chaîne, puis la recherche descend aux variables d'environnement, au fichier de configuration et aux justificatifs du conteneur, s'arrêtant au premier résultat et n'atteignant jamais les métadonnées d'instance

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

Comment votre code les trouve

Vérifier la chaîne de fournisseurs de justificatifs

  • L'AWS SDK, la bibliothèque dans votre code, fait la recherche
  • Une liste fixe, vérifiée dans l'ordre
  • S'arrête au premier résultat

 

Les clés en dur sont vérifiées en premier ; il faut donc les supprimer

Ordre de recherche des justificatifs : une clé passée en code est biffée au-dessus de la chaîne, puis la recherche descend aux variables d'environnement, au fichier de configuration et aux justificatifs du conteneur, s'arrêtant au premier résultat et n'atteignant jamais les métadonnées d'instance

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

La chaîne, maillon par maillon

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • Premier résultat gagnant
  • Supprimez la clé stockée, la recherche continue jusqu'au rôle
Utiliser la sécurité AWS pour les développeurs

Prouver son identité depuis l'extérieur d'AWS

Les chaînes de CI s'exécutent souvent hors d'AWS ; on ne peut pas y attacher la chaîne de justificatifs

  • Fonctionne sur GitHub ou GitLab
  • Rien à trouver pour la chaîne

Un exécuteur CI et sa plateforme dessinés hors du périmètre AWS, l'exécuteur indiqué comme n'ayant aucun rôle à attacher, et la plateforme signant un jeton OIDC qui nomme un dépôt et un flux de travail

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

Prouver son identité depuis l'extérieur d'AWS

Les chaînes de CI s'exécutent souvent hors d'AWS ; on ne peut pas y attacher la chaîne de justificatifs

  • Fonctionne sur GitHub ou GitLab
  • Rien à trouver pour la chaîne

 

Jeton OIDC (OpenID Connect)

  • Signé et de courte durée
  • Une preuve d'identité, pas un justificatif

Un exécuteur CI et sa plateforme dessinés hors du périmètre AWS, l'exécuteur indiqué comme n'ayant aucun rôle à attacher, et la plateforme signant un jeton OIDC qui nomme un dépôt et un flux de travail

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

Une règle plutôt qu'une clé stockée

Un jeton OIDC nommant un dépôt, échangé via AssumeRoleWithWebIdentity contre des justificatifs temporaires qui expirent en une heure, parce que la stratégie d'approbation du rôle nomme déjà cet émetteur et ce dépôt

Échanger le jeton contre des justificatifs

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

Une règle plutôt qu'une clé stockée

Un jeton OIDC nommant un dépôt, échangé via AssumeRoleWithWebIdentity contre des justificatifs temporaires qui expirent en une heure, parce que la stratégie d'approbation du rôle nomme déjà cet émetteur et ce dépôt

Échanger le jeton contre des justificatifs

  • AssumeRoleWithWebIdentity : AssumeRole, avec un jeton externe comme preuve
  • Stratégie d'approbation : écrite d'avance sur le rôle, pas stockée dans la chaîne CI
  • Claim : un énoncé à l'intérieur du jeton
  • L'émetteur est commun à tous les dépôts de la plateforme ; fixez aussi le dépôt

Secrets du dépôt : désormais vides

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

Chaque requête est signée

Signature Version 4, ou SigV4

  • Prouve quel justificatif a fait la requête
  • Prouve que la requête n'a pas été altérée en transit
  • Signée par la CLI et le SDK à chaque appel

Flux de signature où une requête et vos justificatifs produisent une signature envoyée dans l'en-tête Authorization, qu'AWS recalcule et compare, acceptant en cas de concordance et renvoyant SignatureDoesNotMatch en cas d'écart

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

Une signature à transmettre

Justificatifs temporaires

  • Plusieurs actions, délimitées par le rôle
  • Conservés par votre code

Votre code appelant quatre services AWS, S3, DynamoDB, SQS et KMS, avec des justificatifs temporaires

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

Une signature à transmettre

Justificatifs temporaires

  • Plusieurs actions, délimitées par le rôle
  • Conservés par votre code

URL présignée

  • Un objet, une action, et toute personne ayant le lien
  • Une expiration à votre choix, puis plus rien
  • Transporte vos permissions, pas celles du détenteur

Votre code appelant quatre services AWS, S3, DynamoDB, SQS et KMS, avec des justificatifs temporaires

Le navigateur de quelqu'un d'autre n'atteignant qu'un seul objet par un chemin unique, interrompu par une horloge étiquetée avec l'expiration que vous avez fixée

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...