@startuml Amazon S3 objects using IAM Temporary Credentials title Amazon S3 objects using IAM Temporary Credentials ' compare with https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html ' Uncomment the line below for "dark mode" styling '!$AWS_DARK = true !define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.1/dist !include AWSPuml/AWSCommon.puml !include AWSPuml/AWSExperimental.puml !include AWSPuml/General/User.puml !include AWSPuml/General/SAMLtoken.puml !include AWSPuml/SecurityIdentityCompliance/Cognito.puml !include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementPermissions.puml !include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementAWSSTSAlternate.puml !include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementTemporarySecurityCredential.puml !include AWSPuml/SecurityIdentityCompliance/IdentityAccessManagementRole.puml !include AWSPuml/Storage/SimpleStorageServiceBucket.puml !include AWSPuml/Storage/SimpleStorageServiceObject.puml hide footbox skinparam style strictuml skinparam Sequence { MessageAlignment left } skinparam Note { TextAlignment left FontColor black BackgroundColor %lighten($AWS_COLOR_SMILE, 90) } skinparam WrapWidth 300 skinparam MaxMessageSize 600 !procedure $AWSIcon($service, $line1, $line2="") participant "$AWSImg($service)\n$line1\n$line2" !endprocedure $AWSIcon(User, " ", "User") as user <> $AWSIcon(Cognito, "User Pool", "Amazon Cognito") as userpool $AWSIcon(Cognito, "Identity Pool", "Amazon Cognito") as idpool $AWSIcon(SimpleStorageServiceBucket, "Bucket", "Amazon S3") as s3 <> $AWSIcon(IdentityAccessManagementAWSSTSAlternate, " ", "AWS STS") as sts $AWSIcon(IdentityAccessManagementPermissions, "Policy", "AWS IAM") as permissions note over userpool 1. Authenticate and get tokens end note user -> userpool++ $AWSColor(SecurityIdentityCompliance): InitiateAuth return ID Token and Access Token note<> left $SAMLtokenIMG("0.5") $SAMLtokenIMG("0.5") end note note over idpool 2. Exchange tokens for AWS credentials end note user -> idpool++ $AWSColor(SecurityIdentityCompliance): GetCredentialsForIdentity idpool -> idpool: map to IAM Role $AWSIconLeft(IdentityAccessManagementRole) idpool -> sts++ $AWSColor(SecurityIdentityCompliance): AssumeRoleWithWebIdentity(Role) return temporary security credentials $AWSIconLeft(IdentityAccessManagementTemporarySecurityCredential) return temporary security credentials $AWSIconLeft(IdentityAccessManagementTemporarySecurityCredential) note over s3 3. Access AWS services with credentials end note user -> s3++ $AWSColor(Storage): GetObject s3 -> permissions++ $AWSColor(SecurityIdentityCompliance): check permissions alt no access permissions --> s3: ❌ Deny s3 --> user: error (AccessDenied) else access return ✅ Allow return S3 object $AWSIconLeft(SimpleStorageServiceObject) end @enduml