Amazon DVA-C02: Beveiliging, IAM, KMS & Secrets Management (Cognito, Secrets Manager, SSM) — Studiegids
Onderdeel van de AWS Developer Associate DVA-C02 — Studiegids. Oefen met geverifieerde antwoorden in het Amazon-examencentrum, of doe getimede oefentests op ExamRoll.io.
IAM, Roles, Policies en Cross-account Toegang
Identiteits- en toegangsbeheer moet worden ontworpen rond het principe van ’least privilege’, kortlevende credentials en een duidelijke scheiding tussen service- en menselijke identiteiten. Voor applicaties die op EC2, ECS of Lambda draaien, geef de voorkeur aan instance/task/function roles in plaats van het embedden van access keys; de AWS SDK’s gebruiken automatisch de ‘credential provider chain’ die door de omgeving wordt aangeboden en vernieuwen tijdelijke credentials. Cross-account toegang moet AWS STS AssumeRole (API: sts:AssumeRole) gebruiken met een expliciete ‘role trust policy’ in het doelaccount en een IAM-policy in het aanroepende account die beperkt welke role ARNs kunnen worden aangenomen. Wanneer u MFA vereist voor gevoelige operaties, dwing dit dan af met een ‘condition’ in de role- of resource-policy met behulp van aws:MultiFactorAuthPresent of vereis sts:GetSessionToken voor menselijke gebruikers. Gebruik voor web- of mobiele clients AssumeRoleWithWebIdentity (sts:AssumeRoleWithWebIdentity) via Cognito Identity of ‘federated providers’ om langdurige credentials te vermijden. Pas op voor veelvoorkomende valkuilen: te ruime wildcard acties/resources, vertrouwen op resource-based policies zonder overeenkomende ‘principal conditions’, en het vergeten op te nemen van de SourceAccount of aws:SourceVpc ‘conditions’ voor cross-account S3- of KMS-toegang. Gebruik de IAM policy simulator en sts:GetCallerIdentity om te debuggen. Overweeg het gebruik van service control policies (SCPs) op organisatieniveau om ‘guardrails’ af te dwingen en een expliciete ‘deny’ voor risicovolle acties zoals kms:CreateGrant of iam:CreateAccessKey waar van toepassing.
KMS, Versleutelingspatronen en Toegangsbeheer voor Sleutels
Gebruik AWS KMS voor ’envelope encryption’: Genereer een ‘data key’ met GenerateDataKey/GenerateDataKeyWithoutPlaintext voor client-side of server-side encryptie, roep vervolgens Encrypt/Decrypt aan voor kleine payloads of gebruik de ‘data key’ voor bulk-encryptie. Kies de juiste CMK: ‘AWS owned’ voor gemak, ‘AWS managed’ (aws/*) voor service-integratie, of ‘customer-managed’ voor volledige controle en rotatie. Key policies zijn het primaire controlemiddel voor KMS; voeg IAM-policies toe die kms:Decrypt en kms:Encrypt toestaan en gebruik ‘grants’ wanneer u tijdelijk, gedelegeerd sleutelgebruik nodig heeft voor services zoals CloudHSM-ondersteunde operaties of cross-account Lambda-aanroepen. Voeg een EncryptionContext toe om ciphertext te binden aan de gebruikscontext en vereis dit via een kms:EncryptionContextEquals ‘condition’ voor hogere zekerheid. Cross-account KMS-gebruik vereist expliciete vermeldingen in de key policy die de externe principal of role toestemming geven en, in sommige gevallen, CreateGrant/RetireGrant permissies. Voor auditing en forensisch onderzoek, schakel CloudTrail data events in voor KMS en S3 om GenerateDataKey en Decrypt aanroepen vast te leggen; CloudTrail-logs bevatten arn:aws:kms en details over welke principal de sleutel heeft gebruikt. Veelvoorkomende valkuilen zijn onder andere het vergeten toe te staan van kms:CreateGrant voor services die achter de schermen ‘grants’ gebruiken, het niet roteren van customer-managed keys, en ervan uitgaan dat IAM-policies alleen voldoende zijn om KMS-operaties te autoriseren zonder de juiste vermeldingen in de key policy.
Secrets Management: Secrets Manager vs. Parameter Store
Secrets Manager en Systems Manager Parameter Store bieden beide versleutelde opslag voor secrets, maar verschillen in functionaliteiten en kostenprofiel: Secrets Manager ondersteunt automatische rotatie (met Lambda-rotatietemplates), ingebouwde versioning en geïntegreerde replicatie, en rekent per secret; Parameter Store (SecureString) is voor veel parameters gratis (binnen de free tier) en is beter voor eenvoudige configuratie. Toegang wordt beheerd door IAM-policies die secretsmanager:GetSecretValue of ssm:GetParameter met WithDecryption=true toekennen, en de onderliggende KMS-sleutel moet ‘decrypt’ toestaan voor de principal. Gebruik resource-based policies op Secrets Manager voor cross-account secrets, of replicatie met ‘secrets replication’. Roep bij het gebruik van SDK’s secretsmanager.getSecretValue({ SecretId }) of ssm.getParameter({ Name, WithDecryption: true }) aan en vermijd het loggen van de waarden van secrets; stel Lambda-omgevingsvariabelen in om verwijzingen naar Secrets Manager of Parameter Store te gebruiken met dynamische resolutie in CloudFormation of SAM, of haal ze op via de SDK bij het opstarten. Veelgemaakte fouten door ontwikkelaars zijn onder andere het opslaan van secrets in platte tekst in source control, vertrouwen op Lambda-omgevingsvariabelen voor zeer gevoelige data zonder KMS-bescherming, en te ruime IAM-policies zoals het toekennen van secretsmanager:* aan brede rollen. Zorg er voor rotatie voor dat de rotatie-Lambda de juiste secretsmanager:RotateSecret en kms:GenerateDataKey permissies heeft en dat de applicatiecode naadloos verbindingen opnieuw kan initialiseren wanneer credentials veranderen.
Cognito-authenticatie, -autorisatie en API-integratie
Amazon Cognito biedt user pools voor authenticatie en identity pools voor tijdelijke AWS-credentials. Gebruik Cognito User Pools om aanmelding, multi-factor authenticatie en de uitgifte van JWT’s (ID-, access- en refresh-tokens) te beheren. Browsergebaseerde single-page apps moeten app clients zonder een client secret gebruiken en zouden de hosted UI of de Amazon Cognito SDK (amazon-cognito-identity-js) moeten gebruiken die de SRP-flow implementeert om te voorkomen dat wachtwoorden worden blootgesteld. Verifieer JWT’s op de server of API Gateway door de JWKS URI op te halen uit de user pool en de handtekening, issuer, audience (aud) en de vervaldatum van het token te valideren; API Gateway JWT authorizers of Lambda custom authorizers kunnen deze validatie uitvoeren. Voor server-to-service-authenticatie, wissel het user pool-token in voor tijdelijke credentials via een Cognito Identity Pool met sts:AssumeRoleWithWebIdentity. Valkuilen zijn onder meer verkeerd geconfigureerde callback- of sign-out-URL’s, het niet valideren van token scopes of groepen, en de verwachting dat ID-tokens direct bruikbaar zijn voor AWS API-aanroepen (je moet ze inwisselen via een identity pool). Gebruik voor fijnmazige autorisatie groepen of custom claims en combineer Cognito met resource-based policies en IAM condition keys zoals aws:userid of cognito-identity.amazonaws.com:sub bij het mappen van identiteiten naar AWS-rollen. Audit inlog- en beheeracties via CloudTrail, en schakel geavanceerde beveiligingsfuncties in Cognito in voor de detectie van gecompromitteerde credentials.
Praktijkprobleem: Use-Case Scenario
Scenario: PixelForge, een gamestudio, draait een serverless backend in één enkel AWS-account met Lambda, API Gateway, S3, DynamoDB en Cognito user pools. Gevoelige API-sleutels en database-credentials worden opgeslagen voor meerdere deployment-stages en een extern auditteam moet gedurende 1–24 uur toegang krijgen tot subsets van productie-images in S3.
Uitdaging: Bied externe auditors op een veilige, auditeerbare en kortstondige manier toegang tot productie-images, zorg ervoor dat applicatie-secrets worden geroteerd en veilig worden benaderd door Lambda, en dwing MFA af voor cross-account toegang door beheerders.
Aanbevolen aanpak:
- Maak een customer-managed KMS-sleutel aan met een key policy die decrypt toestaat voor het PixelForge-account en grants voor een IAM-rol voor de auditor; schakel sleutelrotatie in en vereis EncryptionContext tijdens decrypt-operaties.
- Sla credentials op in Secrets Manager (aparte secrets per stage) en koppel een IAM-rol aan de Lambda’s met minimale secretsmanager:GetSecretValue-permissie en kms:Decrypt voor de KMS-sleutel; implementeer opstartcode in Lambda om secretsmanager.getSecretValue({ SecretId }) aan te roepen met de AWS SDK.
- Maak voor de toegang van de auditor een aparte AWS-accountrol voor de auditor aan en sta sts:AssumeRole toe vanuit het auditor-account in een resource-based S3-bucketbeleid, beperkt door aws:PrincipalArn en een in de tijd gelimiteerde, vooraf geconfigureerde rol-mapping; genereer kortstondige credentials via sts:AssumeRole en dwing MFA af met een aws:MultiFactorAuthPresent-conditie bij het aannemen van de rol.
- Log alle toegang met CloudTrail (management- en data-events voor S3 en KMS) en schakel S3 object-level logging en Amazon Macie of S3 Access Logs in voor aanvullend forensisch onderzoek; vereis dat tijdelijke auditorsessies een specifieke EncryptionContext gebruiken en tag objecten/requests voor traceerbaarheid.
Rationale: Het gebruik van Secrets Manager met KMS en kortstondige STS-credentials dwingt het principe van ’least privilege’ af, maakt geautomatiseerde rotatie mogelijk en voorkomt het hardcoden van secrets. Tijdgebonden assume-role-patronen met MFA en CloudTrail data-events bieden auditeerbare, herroepbare toegang voor derden, terwijl de scheiding van verantwoordelijkheden behouden blijft.
← Deployment · Alle domeinen · Monitoring →
Oefen deze vragen → · Getimede oefening op ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Slaag voor je examen →