IAM 역할 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

IAM 역할

자격 증명 풀을 생성하는 동안 사용자가 수임하는 IAM 역할을 업데이트하라는 메시지가 표시됩니다. IAM 역할은 다음과 같이 작동합니다. 사용자가 앱에 로그인하면 Amazon Cognito가 해당 사용자를 위한 임시 AWS 자격 증명을 생성합니다. 이러한 임시 자격 증명은 특정 IAM 역할과 연결됩니다. IAM 역할을 사용하면 리소스에 액세스할 수 있는 권한 집합을 정의할 수 있습니다 AWS .

인증된 사용자와 인증되지 않은 사용자의 기본 IAM 역할을 지정할 수 있습니다. 또한 사용자의 ID 토큰에 있는 클레임에 따라 각 사용자에 대한 역할을 선택하는 규칙을 정의할 수 있습니다. 자세한 내용은 역할 기반 액세스 제어 사용 단원을 참조하십시오.

기본적으로 Amazon Cognito 콘솔은 Amazon Mobile Analytics 및 Amazon Cognito Sync에 대한 액세스를 제공하는 IAM 역할을 생성합니다. 또는 기존 IAM 역할을 사용하도록 선택할 수 있습니다.

IAM 역할을 수정하여 다른 서비스에 대한 액세스를 허용하거나 제한합니다. 이렇게 하려면 IAM 콘솔 에 로그인합니다. 그런 다음 역할(Roles)을 선택하고 역할을 선택합니다. 선택한 역할에 연결된 정책은 권한(Permissions) 탭에 나열됩니다. 해당하는 정책 관리(Manage Policy) 링크를 선택하여 액세스 정책을 사용자 지정할 수 있습니다. 정책 사용 및 정의에 대한 자세한 내용은 IAM 정책 개요를 참조하세요.

참고

가장 좋은 방법은 최소 권한 부여 원칙을 따르는 정책을 정의하는 것입니다. 다시 말해, 해당 정책은 사용자가 작업을 수행하는 데 필요한 권한만을 포함합니다. 자세한 내용은 IAM 사용 설명서최소 권한 부여를 참조하세요.

인증되지 않은 자격 증명은 앱에 로그인하지 않은 사용자에 의해 수임된다는 점을 유의하세요. 일반적으로, 인증되지 않은 자격 증명에 할당한 권한은 인증된 자격 증명의 권한보다 더 제한적이어야 합니다.

트러스트 정책 설정

Amazon Cognito는 IAM 역할을 사용하여 애플리케이션 사용자를 위한 임시 보안 인증을 생성합니다. 권한에 대한 액세스는 역할의 신뢰 관계에 의해 제어됩니다. 역할 트러스트 및 권한 섹션에 대해 자세히 알아봅니다.

에 제공된 토큰 AWS STS 은 사용자 풀, 소셜 또는 OIDC 공급자 토큰 또는 SAML어설션을 자체 토큰으로 변환하는 자격 증명 풀에서 생성됩니다. 자격 증명 풀 토큰에는 자격 증명 풀 ID인 aud 클레임이 포함되어 있습니다.

다음 역할 신뢰 정책 예제에서는 페더레이션 서비스 보안 주체가 를 AWS STS API 호출cognito-identity.amazonaws.com할 수 있도록 허용합니다AssumeRoleWithWebIdentity. 요청의 자격 증명 풀 토큰에 다음 클레임이 있는 경우에만 API 요청이 성공합니다.

  1. 자격 증명 풀 ID us-west-2:abcdefg-1234-5678-910a-0e8443553f95에 대한 aud 클레임.

  2. 사용자가 로그인했지만 게스트 사용자가 아닌 경우에 추가되는 authenticated에 대한 amr 클레임.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-west-2:abcdefg-1234-5678-910a-0e8443553f95" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }

기본(클래식) 인증의 IAM 역할에 대한 신뢰 정책

자격 증명 풀에 사용하는 역할에 대한 신뢰 정책을 제한하는 조건을 하나 이상 적용해야 합니다. 자격 증명 풀에 대한 역할 신뢰 정책을 생성하거나 업데이트할 때 소스 자격 증명을 제한하는 조건 키를 하나 이상 사용하지 않고 변경 사항을 저장하려고 하면 가 오류를 IAM 반환합니다. 자격 증명 풀에서 이 유형의 조건이 없는 IAM 역할로 교차 계정 AssumeRoleWithWebIdentity 작업을 허용하지 AWS STS 않습니다.

이 주제에는 자격 증명 풀의 소스 자격 증명을 제한하는 여러 조건이 포함되어 있습니다. 전체 목록은 AWS 웹 ID 페더레이션에 사용 가능한 키를 참조하세요.

자격 증명 풀을 사용한 기본 또는 클래식 인증에서는 적절한 신뢰 정책이 있는 AWS STS 경우 를 사용하여 모든 IAM 역할을 수임할 수 있습니다. IAM Amazon Cognito 자격 증명 풀에 대한 역할은 서비스 보안 주체가 역할을 수임cognito-identity.amazonaws.com하도록 신뢰합니다. 이 구성은 리소스에 대한 의도하지 않은 액세스로부터 IAM 역할을 보호하는 데 충분하지 않습니다. 이 유형의 역할은 역할 신뢰 정책에 추가 조건을 적용해야 합니다. 다음 조건 중 하나 이상이 없으면 자격 증명 풀에 대한 역할을 생성하거나 수정할 수 없습니다.

cognito-identity.amazonaws.com:aud

역할을 하나 이상의 자격 증명 풀에서 작업으로 제한합니다. Amazon Cognito는 자격 증명 풀 토큰의 aud 클레임에 있는 소스 자격 증명 풀을 나타냅니다.

cognito-identity.amazonaws.com:amr

역할을 authenticated 또는 unauthenticated (게스트) 사용자로 제한합니다. Amazon Cognito는 자격 증명 풀 토큰의 amr 클레임에 인증 상태를 나타냅니다.

cognito-identity.amazonaws.com:sub

를 사용하여 역할을 한 명 이상의 사용자로 제한합니다UUID. 이는 자격 증명 풀에 있는 사용자의 자격 증명 IDUUID입니다. 이 값은 사용자의 원래 자격 증명 공급자의 sub 값이 아닙니다. Amazon Cognito는 자격 증명 풀 토큰UUID의 sub 클레임에 이를 표시합니다.

향상된 흐름 인증에서는 IAM 역할이 자격 증명 풀과 동일 AWS 계정 해야 하지만 기본 인증에서는 그렇지 않습니다.

교차 계정 IAM 역할을 수임하는 Amazon Cognito 자격 증명 풀에는 추가 고려 사항이 적용됩니다. 이러한 역할의 신뢰 정책은 cognito-identity.amazonaws.com 서비스 보안 주체를 수락하고 특정 cognito-identity.amazonaws.com:aud 조건을 포함해야 합니다. AWS 리소스에 대한 의도하지 않은 액세스를 방지하기 위해 aud 조건 키는 조건 값의 자격 증명 풀에서 사용자로 역할을 제한합니다.

자격 증명 풀이 자격 증명에 대해 발급하는 토큰에는 자격 증명 풀 AWS 계정 의 발신에 대한 정보가 포함되어 있습니다. AssumeRoleWithWebIdentity API 요청에서 자격 증명 풀 토큰을 제시하면 가 발신 자격 증명 풀이 AWS 계정 IAM 역할과 동일한지 AWS STS 확인합니다. 에서 요청이 교차 계정이라고 AWS STS 판단하면 역할 신뢰 정책에 aud 조건이 있는지 확인합니다. 역할 신뢰 정책에 이러한 조건이 없는 경우 수임-역할 호출이 실패합니다. 요청이 교차 계정이 아닌 경우 이 제한을 적용 AWS STS 하지 않습니다. 가장 좋은 방법은 항상 이 유형의 조건을 자격 증명 풀 역할의 신뢰 정책에 적용하는 것입니다.

추가 신뢰 정책 조건

자격 증명 풀에서 역할 재사용

여러 자격 증명 풀에서 역할을 재사용하려면 역할이 공통 권한 집합을 공유하므로 다음과 같이 여러 자격 증명 풀을 포함할 수 있습니다.

"StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }
특정 자격 증명으로 액세스 제한

특정 앱 사용자 집합에 제한된 정책을 생성하려면 cognito-identity.amazonaws.com:sub 값을 선택하세요.

"StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab", "us-east-1:98765432-1234-1234-1243-123456790ab" ] }
특정 공급자로 액세스 제한

특정 공급자(고유한 로그인 공급자)를 통해 로그인한 사용자에 제한된 정책을 생성하려면 cognito-identity.amazonaws.com:amr 값을 선택하세요.

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }

예를 들어, Facebook만 신뢰하는 앱에는 다음 amr 절이 있습니다.

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

액세스 정책

역할에 연결하는 권한은 해당 역할을 맡은 모든 사용자에게 적용됩니다. 사용자의 액세스를 분할하려면 정책 조건 및 변수를 사용해야 합니다. 자세한 내용은 IAM 정책 요소: 변수 및 태그 를 참조하세요. sub 조건을 사용하여 액세스 정책IDs에서 작업을 Amazon Cognito 자격 증명으로 제한할 수 있습니다. 이 옵션은 주의해서 사용해야 하며, 일관된 사용자 ID가 부족한 미인증 ID의 경우에는 더욱 주의해야 합니다. Amazon Cognito를 사용한 웹 페더레이션의 IAM 정책 변수에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서IAM 및 AWS STS 조건 컨텍스트 키를 참조하세요.

보안 강화를 위해, Amazon Cognito는 GetCredentialsForIdentity를 사용하여 향상된 흐름에서 미인증 사용자에 할당된 보안 인증 정보에 범위 축소 정책을 적용합니다. 범위 축소 정책은 인증되지 않은 역할에 적용하는 AWS 관리형 세션 정책 IAM 정책에 인라인 세션 정책 및 를 추가합니다. 역할의 IAM 정책과 세션 정책 모두에서 액세스 권한을 부여해야 하므로 범위 축소 정책은 다음 목록에 있는 것 이외의 서비스에 대한 사용자의 액세스를 제한합니다.

참고

기본(클래식) 흐름에서는 AssumeRoleWithWebIdentity API 요청에 이러한 제한을 적용할 수 있습니다. 보안 모범 사례는 미인증 사용자에게 이 범위 제한 정책을 초과하는 권한을 할당하지 않는 것입니다.

또한 Amazon Cognito는 인증된 사용자와 인증되지 않은 사용자가 Amazon Cognito 자격 증명 풀 및 Amazon Cognito Sync에 API 요청하는 것을 방지합니다. 웹 ID에서 서비스 액세스를 제한하는 경우도 AWS 서비스 있습니다.

향상된 흐름으로 요청이 성공하면 Amazon Cognito는 백그라운드에서 AssumeRoleWithWebIdentity API 요청을 합니다. 이 요청의 파라미터 중에서 Amazon Cognito에는 다음이 포함됩니다.

  1. 사용자의 자격 증명 ID입니다.

  2. 사용자가 수임하려는 IAM 역할ARN의 입니다.

  3. 인라인 세션 정책을 추가하는policy 파라미터입니다.

  4. 값이 Amazon 에서 추가 권한을 부여하는 AWS 관리형 정책PolicyArns.member.N 파라미터입니다 CloudWatch.

미인증 사용자가 액세스할 수 있는 서비스

향상된 흐름을 사용하는 경우, Amazon Cognito가 사용자 세션에 적용하는 범위 축소 정책에 따라 사용자는 다음 표에 나열된 서비스 이외의 서비스를 사용할 수 없습니다. 일부 서비스의 경우, 특정 작업만 허용됩니다.

범주 Service

분석

Amazon Data Firehose

Amazon Managed Service for Apache Flink

애플리케이션 통합

Amazon Simple Queue Service

AR 및 VR

Amazon Sumerian¹

비즈니스 애플리케이션

Amazon Mobile Analytics

Amazon Simple Email Service

컴퓨팅

AWS Lambda

암호화 및 PKI

AWS Key Management Service 1

데이터베이스

Amazon DynamoDB

Amazon SimpleDB

프런트 엔드 웹 및 모바일

AWS AppSync

Amazon Location Service

Amazon Simple Notification Service

Amazon Pinpoint

Amazon Location Service

게임 개발

Amazon GameLift

사물 인터넷(IoT)

AWS IoT

기계 학습

Amazon CodeWhisperer

Amazon Comprehend

Amazon Lex

Amazon Machine Learning

Amazon Personalize

Amazon Polly

Amazon Rekognition

Amazon SageMaker1

Amazon Textract¹

Amazon Transcribe

Amazon Translate

관리 및 거버넌스

Amazon CloudWatch

Amazon CloudWatch Logs

네트워킹 및 콘텐츠 전송

Amazon API Gateway

보안, 자격 증명 및 규정 준수

Amazon Cognito 사용자 풀

스토리지

Amazon Simple Storage Service(S3)

1 다음 표 AWS 서비스 의 에 대해 인라인 정책은 작업의 하위 집합을 부여합니다. 표에는 각 항목에서 사용할 수 있는 작업이 표시됩니다.

AWS 서비스 미인증 향상된 흐름 사용자의 최대 권한
AWS Key Management Service

Encrypt

Decrypt

ReEncrypt

GenerateDataKey

Amazon SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText

AnalyzeDocument

Amazon Sumerian

View*

Amazon Location Service

SearchPlaceIndex*

GetPlace

CalculateRoute*

*Geofence

*Geofences

*DevicePosition*

이 목록을 AWS 서비스 넘어서는 에 대한 액세스 권한을 부여하려면 자격 증명 풀에서 기본(클래식) 인증 흐름을 활성화합니다. 인증되지 AWS 서비스 않은 사용자의 IAM 역할에 할당된 정책에서 허용하는 NotAuthorizedException 에서 오류가 사용자에게 표시되는 경우 사용 사례에서 해당 서비스를 제거할 수 있는지 여부를 평가합니다. 제거할 수 없다면 기본 흐름으로 전환하세요.

게스트 사용자를 위한 인라인 세션 정책

Amazon Cognito는 먼저 IAM 자격 증명 요청에 인라인 정책을 적용합니다. 인라인 세션 정책은 사용자의 유효 권한에 다음 목록에 나오지 않는 AWS 서비스 에 대한 액세스를 포함하지 못하게 합니다. 또한 사용자의 IAM 역할에 적용하는 정책 AWS 서비스 에서 이러한 에 권한을 부여해야 합니다. 수임하는 역할 세션에 대한 사용자의 유효 권한은 해당 역할에 할당된 정책과 관련 세션 정책의 교차점입니다. 자세한 정보는 AWS Identity and Access Management 사용 설명서세션 정책을 참조하세요.

Amazon Cognito는 기본적으로 활성화된  AWS 리전 의 사용자 세션에 다음과 같은 인라인 정책을 추가합니다. 인라인 정책 및 기타 세션 정책의 순 효과에 대한 개요는 섹션을 참조하세요미인증 사용자가 액세스할 수 있는 서비스.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:*", "logs:*", "dynamodb:*", "kinesis:*", "mobileanalytics:*", "s3:*", "ses:*", "sns:*", "sqs:*", "lambda:*", "machinelearning:*", "execute-api:*", "iot:*", "gamelift:*", "scs:*", "cognito-identity:*", "cognito-idp:*", "lex:*", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "appsync:*", "personalize:*", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "sagemaker:InvokeEndpoint", "cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*" ], "Resource": [ "*" ] } ] }

다른 모든 리전의 경우, 인라인 범위 축소 정책에는 다음 Action 문을 제외하고 기본 리전에 나열된 모든 항목이 포함됩니다.

"cognito-sync:*", "sumerian:View*", "codewhisperer:*", "textract:DetectDocumentText", "textract:AnalyzeDocument", "sdb:*"

게스트에 대한 AWS 관리형 세션 정책

Amazon Cognito는 또한 AWS 관리형 정책을 인증되지 않은 게스트의 향상된 흐름 세션에 세션 정책으로 적용합니다. 이 정책은 정책 를 사용하여 인증되지 않은 사용자의 권한 범위를 제한합니다AmazonCognitoUnAuthedIdentitiesSessionPolicy.

인증되지 않은 IAM 역할에 연결하는 정책에서도 이 권한을 부여해야 합니다. 가정된 역할 세션에 대한 사용자의 유효 권한은 역할에 할당된 IAM 정책과 세션 정책의 교차점입니다. 자세한 정보는 AWS Identity and Access Management 사용 설명서세션 정책을 참조하세요.

이 AWS 관리형 정책 및 기타 세션 정책의 순 효과에 대한 개요는 섹션을 참조하세요미인증 사용자가 액세스할 수 있는 서비스.

AmazonCognitoUnAuthedIdentitiesSessionPolicy 관리형 정책에는 다음 권한이 있습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint", "geo:GetMap*", "geo:SearchPlaceIndex*", "geo:GetPlace", "geo:CalculateRoute*", "geo:*Geofence", "geo:*Geofences", "geo:*DevicePosition*" ], "Resource": "*" }] }

액세스 정책 예제

이 섹션에서는 특정 작업을 완료하는 데 필요한 최소 권한만 사용자에게 부여하는 Amazon Cognito 액세스 정책의 예시를 찾을 수 있습니다. 가능한 경우 정책 변수를 사용하여 지정된 자격 증명 ID에 대한 권한을 한층 더 제한할 수 있습니다. 예를 들면, ${cognito-identity.amazonaws.com:sub}를 사용합니다. 자세한 내용은 AWS 모바일 블로그에서 Amazon Cognito 인증 이해 3부: 역할 및 정책을 참조하세요.

참고

보안 모범 사례로, 정책은 사용자가 작업을 수행하는 데 필요한 권한만을 포함해야 합니다. 다시 말해서 가능한 경우 항상 액세스 범위를 객체에 대한 개별 자격 증명으로 조정해야 합니다.

Amazon S3에서 단일 객체에 대한 읽기 권한을 자격 증명에 부여

다음 액세스 정책은 지정된 S3 버킷에서 단일 객체를 검색할 수 있는 읽기 권한을 자격 증명에게 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/assets/my_picture.jpg"] } ] }

Amazon S3에서 자격 증명 관련 경로에 대한 읽기 및 쓰기 권한을 모두 자격 증명에 부여

다음 액세스 정책은 접두사를 ${cognito-identity.amazonaws.com:sub} 변수에 매핑하여 S3 버킷에서 특정 접두사 “folder”에 액세스할 수 있는 읽기 및 쓰기 권한을 부여합니다.

이 정책을 사용하면 ${cognito-identity.amazonaws.com:sub}를 통해 삽입된 us-east-1:12345678-1234-1234-1234-123456790ab와 같은 자격 증명은 객체를 arn:aws:s3:::amzn-s3-demo-bucket/us-east-1:12345678-1234-1234-1234-123456790ab로 가져오고 넣고 나열할 수 있습니다. 하지만 arn:aws:s3:::amzn-s3-demo-bucket의 다른 객체에 대한 액세스는 이 자격 증명에게 부여되지 않습니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${cognito-identity.amazonaws.com:sub}/*"] } ] }

자격 증명에 Amazon DynamoDB에 대한 세분화된 액세스 권한 할당

다음 액세스 정책은 Amazon Cognito 환경 변수를 사용하여 Amazon DynamoDB 리소스에 대한 세분화된 액세스 제어를 제공합니다. 이러한 변수는 자격 증명 ID를 기준으로 DynamoDB의 항목에 대한 액세스 권한을 부여합니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서세분화된 액세스 제어를 위한 IAM 정책 조건 사용을 참조하세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ] }

Lambda 함수를 호출할 수 있는 권한을 자격 증명에 부여

다음 액세스 정책은 Lambda 함수를 호출할 수 있는 권한을 자격 증명에 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" ] } ] }

레코드를 Amazon Kinesis Data Streams에 게시할 수 있는 권한을 자격 증명에 부여

다음 액세스 정책은 자격 증명이 Kinesis Data Streams 중 하나에 대해 PutRecord 작업을 사용하도록 허용합니다. 계정의 모든 스트림에 데이터 레코드를 추가해야 하는 사용자에게 이 정책을 적용할 수 있습니다. 자세한 내용은 Amazon Kinesis Data Streams 개발자 안내서의 를 사용하여 Amazon Kinesis Data Streams 리소스에 대한 액세스 제어를 IAM 참조하세요. Amazon Kinesis

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }

Amazon Cognito Sync 스토어에 있는 자신의 데이터에 액세스할 수 있는 권한을 자격 증명에 부여

다음 액세스 정책은 Amazon Cognito Sync 스토어에 있는 자신의 데이터에만 액세스할 수 있는 권한을 자격 증명에 부여합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }] }

역할 트러스트 및 권한

이러한 역할이 서로 다른 방식은 신뢰 관계에 있습니다. 다음은 인증되지 않은 역할에 대한 신뢰 정책의 예입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }

이 정책은 cognito-identity.amazonaws.com의 페더레이션 사용자(OpenID Connect 토큰의 발급자)에게 이 역할을 맡을 수 있는 권한을 부여합니다. 또한 이 정책은 토큰의 aud(이 경우 자격 증명 풀 ID)가 자격 증명 풀과 일치하도록 제한합니다. 마지막으로 정책은 Amazon Cognito GetOpenIdToken API 작업에서 발급한 토큰의 다중 값 amr 클레임의 배열 멤버 중 하나가 값을 갖도록 지정합니다unauthenticated.

Amazon Cognito에서 토큰을 생성하면 해당 토큰의 amrunauthenticated 또는 authenticated로 설정합니다. amrauthenticated이면 토큰에 인증 중에 사용되는 모든 공급자가 포함됩니다. 즉, amr 조건을 다음과 같이 변경하여 Facebook을 통해 로그인한 사용자만 신뢰하는 역할을 생성할 수 있습니다.

"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }

역할에 대한 신뢰 관계를 변경할 때 또는 자격 증명 풀에 대해 역할을 사용하려고 시도할 때 주의를 기울이세요. 자격 증명 풀을 신뢰하도록 역할을 올바르게 구성하지 않으면 다음과 같은 STS 결과 예외가 발생합니다.

AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity

이러한 메시지가 표시되면 자격 증명 풀과 인증 유형에서 적절한 역할을 사용하는지 확인합니다.