Rôles, identifiants temporaires et SigV4

Sécurité AWS pour les développeurs

Rahul Singh

Technical Product Manager

La clé qui survit à la tâche

Pour aller plus vite, une clé est créée dans un script et stockée dans un fichier de configuration.

Dans ce fichier, elle est :

  • Jamais tourné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 la montrant encore valide au mois dix-huit

Sécurité AWS pour les développeurs

La clé qui survit à la tâche

Pour aller plus vite, une clé est créée dans un script et stockée dans un fichier de configuration.

Dans ce fichier, elle est :

  • Jamais tourné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 la montrant encore valide au mois dix-huit

Sécurité AWS pour les développeurs

Des identifiants qui expirent seuls

Faites de l'expiration le défaut avec AWS STS

  1. Demandez un rôle, recevez des identifiants avec 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 identifiants avec horloge intégrée.

Sécurité AWS pour les développeurs

Des identifiants qui expirent seuls

Faites de l'expiration le défaut avec AWS STS

  1. Demandez un rôle, recevez des identifiants avec horloge intégrée

  2. Les identifiants 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 identifiants avec horloge intégrée. En dessous, deux types côte à côte : une clé longue durée commençant par AKIA sans jeton de session et sans expiration, et des identifiants temporaires commençant par ASIA avec jeton de session qui expirent en une heure.

Sécurité AWS pour les développeurs

Des identifiants qui expirent seuls

Faites de l'expiration le défaut avec AWS STS

  1. Demandez un rôle, recevez des identifiants avec horloge intégrée

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

  3. Le même appel est d'abord 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 identifiants avec horloge intégrée. En dessous, une clé longue durée commençant par AKIA qui n'expire jamais à côté d'identifiants temporaires commençant par ASIA avec jeton de session qui expirent en une heure. En dessous, le même appel GetObject renvoie 200 OK à dix heures et ExpiredToken à onze heures cinq.

Sécurité AWS pour les développeurs

Comment votre code les trouve

Vérifier la chaîne de fournisseurs d'identifiants

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

Ordre de recherche des identifiants : une clé passée en code est barrée au-dessus de la chaîne, puis la recherche parcourt variables d'environnement, fichier de config et identifiants de conteneur, s'arrête au premier match et n'atteint jamais les métadonnées d'instance

Sécurité AWS pour les développeurs

Comment votre code les trouve

Vérifier la chaîne de fournisseurs d'identifiants

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

 

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

Ordre de recherche des identifiants : une clé passée en code est barrée au-dessus de la chaîne, puis la recherche parcourt variables d'environnement, fichier de config et identifiants de conteneur, s'arrête au premier match et n'atteint jamais les métadonnées d'instance

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 match gagnant
  • Supprimez la clé stockée, la recherche continue jusqu'au rôle
Sécurité AWS pour les développeurs

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

Les pipelines de code tournent souvent hors d'AWS ; on ne peut donc pas attacher la chaîne d'identifiants

  • Exécutés 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 sans rôle à attacher, et la plateforme signant un jeton OIDC qui nomme un dépôt et un workflow

Sécurité AWS pour les développeurs

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

Les pipelines de code tournent souvent hors d'AWS ; on ne peut donc pas attacher la chaîne d'identifiants

  • Exécutés 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 identifiant

Un exécuteur CI et sa plateforme dessinés hors du périmètre AWS, l'exécuteur sans rôle à attacher, et la plateforme signant un jeton OIDC qui nomme un dépôt et un workflow

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 identifiants temporaires qui expirent en une heure, car la politique de confiance du rôle nomme déjà cet émetteur et ce dépôt

Échanger le jeton contre des identifiants

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 identifiants temporaires qui expirent en une heure, car la politique de confiance du rôle nomme déjà cet émetteur et ce dépôt

Échanger le jeton contre des identifiants

  • AssumeRoleWithWebIdentity : AssumeRole, avec un jeton externe comme preuve
  • Politique de confiance : écrite sur le rôle à l'avance, pas stockée dans le pipeline
  • Claim : un fait dans le jeton
  • L'émetteur est commun à tous les dépôts de la plateforme ; épinglez aussi le dépôt

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

Sécurité AWS pour les développeurs

Chaque requête est signée

Signature Version 4, ou SigV4

  • Prouve quel identifiant 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 les SDK à chaque appel

Flux de signature : une requête et vos identifiants produisent une signature envoyée dans l'en-tête Authorization, qu'AWS recalcule et compare, accepte en cas d'égalité et renvoie SignatureDoesNotMatch en cas d'écart

Sécurité AWS pour les développeurs

Une signature à transmettre

Identifiants temporaires

  • De nombreuses 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 identifiants temporaires

Sécurité AWS pour les développeurs

Une signature à transmettre

Identifiants temporaires

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

URL pré-signée

  • Un objet, une action, pour toute personne ayant le lien
  • Une expiration que vous fixez, puis plus rien
  • Transporte vos permissions, pas celles du détenteur

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

Le navigateur de quelqu'un d'autre atteignant exactement un objet par un unique chemin, interrompu par une horloge marquée de l'expiration que vous avez définie

Sécurité AWS pour les développeurs

Passons à la pratique !

Sécurité AWS pour les développeurs

Preparing Video For Download...