2.1 - Authentification et secrets (Cognito, Secrets Manager)
L'objectif 2.1 de l'AWS Certified Developer Associate couvre l'authentification applicative et le stockage des secrets. Un mot de passe de base ou un identifiant d'API doit être stocké dans AWS Secrets Manager, qui le chiffre et peut le faire tourner automatiquement, plutôt que dans le code ou une config en clair. Amazon Cognito gère la connexion des utilisateurs : un user pool authentifie les utilisateurs et émet des jetons JWT, et une API REST sur API Gateway valide ces jetons en attachant un authorizer de user pool Cognito à la méthode. Quand une appli mobile authentifiée par un user pool a ensuite besoin d'identifiants AWS temporaires pour appeler des services directement, un identity pool Cognito échange le jeton contre des identifiants IAM temporaires et limités. Tu dois aussi connaître Parameter Store SecureString et STS. Attends-toi à des mises en situation demandant le bon service ou composant Cognito.
Stocker mot de passe/identifiants = Secrets Manager (rotation auto). Authentifier + émettre des JWT = user pool Cognito. Valider ces JWT à API Gateway = authorizer de user pool. Échanger le jeton contre des identifiants AWS temporaires = identity pool Cognito.
Questions d'entraînement
1. Où une application doit-elle stocker un mot de passe de base pour qu'il soit chiffré et puisse être renouvelé automatiquement ?
- Dans le code source de l'application
- Dans AWS Secrets Manager (bonne réponse)
- Dans un fichier en clair sur l'instance
- Dans un bucket S3 public
Secrets Manager stocke les secrets chiffrés avec KMS et peut les renouveler automatiquement, récupérés à l'exécution via le SDK. Coder en dur ou en fichier clair expose les identifiants.
2. Une API doit permettre à des utilisateurs externes de s'inscrire, se connecter et recevoir des jetons JWT avec un minimum de code. Quel service fournit cela ?
- Des utilisateurs AWS IAM individuels par personne
- AWS Directory Service pour Microsoft AD
- Des analyses de vulnérabilités Amazon Inspector
- Pools d'utilisateurs Amazon Cognito (bonne réponse)
Les pools d'utilisateurs Cognito fournissent un annuaire géré avec inscription/connexion, MFA, et émettent des jetons JWT (ID/accès) qu'API Gateway peut valider. Les utilisateurs IAM servent l'accès au compte AWS, pas les utilisateurs finaux d'une appli.
3. Comment un développeur peut-il donner à une application un accès temporaire et limité dans le temps pour téléverser un seul objet vers un bucket S3 privé ?
- Rendre le bucket public pendant une heure
- Générer une URL S3 pré-signée (bonne réponse)
- Partager le mot de passe de l'utilisateur IAM
- Joindre l'objet à un e-mail
Une URL pré-signée, créée avec les identifiants du demandeur, accorde une permission limitée dans le temps pour une opération précise (ex. PUT d'un objet) sans rendre le bucket public.
4. Une appli navigateur sur example.com est bloquée en appelant un endpoint API Gateway d'un autre domaine. Que faut-il activer sur l'API ?
- Un délai Lambda plus grand sur l'intégration
- Des groupes de règles gérées AWS WAF
- Le chiffrement côté serveur des réponses
- CORS (partage de ressources entre origines) (bonne réponse)
Les navigateurs bloquent les appels multi-origines sauf si l'API renvoie les bons en-têtes CORS (Access-Control-Allow-Origin, etc.). Activer CORS sur API Gateway les ajoute, y compris la réponse preflight OPTIONS.
5. Un développeur a besoin d'un accès inter-comptes pour assumer temporairement un rôle dans un autre compte AWS. Quelle action fournit les identifiants temporaires ?
- iam:CreateUser dans le compte cible
- kms:GenerateDataKey sur une clé partagée
- sts:AssumeRole sur le rôle cible (bonne réponse)
- s3:PutObject avec une politique de bucket
sts:AssumeRole renvoie des identifiants de sécurité temporaires (clé d'accès, secret, jeton de session) pour le rôle cible, à condition que la politique d'approbation du rôle autorise l'appelant. C'est le motif standard d'accès inter-comptes.
6. Une appli mobile authentifie les utilisateurs avec un pool d'utilisateurs Cognito et a besoin d'identifiants AWS temporaires pour appeler S3 directement. Qu'est-ce qui fournit ces identifiants ?
- Intégrer une clé d'accès IAM dans l'appli
- Un pool d'identités Cognito échangeant le jeton (bonne réponse)
- Le secret client du pool d'utilisateurs partagé à l'appli
- Une politique de bucket S3 publique pour tous
Un pool d'identités Cognito (identités fédérées) échange un jeton de pool d'utilisateurs (ou tiers) contre des identifiants AWS temporaires et limités via STS, associés à un rôle IAM. Les pools d'utilisateurs authentifient ; les pools d'identités autorisent l'accès AWS.