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 클레임이 포함되어 있습니다.

다음 예제 역할 신뢰 정책은 페더레이션된 서비스 보안 주체가 API를 호출하도록 허용합니다. cognito-identity.amazonaws.com AWS STS 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 역할에 대한 신뢰 정책

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

이 주제에는 자격 증명 풀의 원본 ID를 제한하는 몇 가지 조건이 포함되어 있습니다. 전체 목록은 AWS 웹 ID 페더레이션에 사용 가능한 키를 참조하십시오.

자격 증명 풀을 사용한 기본 또는 클래식 인증에서는 올바른 신뢰 정책이 있는 AWS STS 경우 모든 IAM 역할을 맡을 수 있습니다. Amazon Cognito 자격 증명 풀의 IAM 역할은 서비스 보안 주체 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를 기준으로 역할을 한 명 이상의 사용자로 제한합니다. 이 UUID는 자격 증명 풀에 있는 사용자의 ID ID입니다. 이 값은 사용자의 원래 ID 제공자의 sub 값이 아닙니다. Amazon Cognito는 자격 증명 풀 토큰의 sub 클레임에 이 UUID를 표시합니다.

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

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

자격 증명 풀이 자격 증명에 대해 발급하는 토큰에는 자격 증명 AWS 계정 풀의 출처에 대한 정보가 들어 있습니다. AssumeRoleWithWebIdentityAPI 요청에서 자격 증명 풀 토큰을 제시하면 원본 자격 증명 풀이 IAM AWS 계정 역할과 동일한지 AWS STS 확인합니다. 요청이 크로스 어카운트라고 AWS STS 판단되면 역할 신뢰 정책에 조건이 있는지 확인합니다. aud 역할 신뢰 정책에 해당 조건이 없는 경우 assume-role 호출은 실패합니다. 요청이 크로스 어카운트가 아닌 경우 이 제한을 적용하지 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 조건을 사용하여 액세스 정책에서 Amazon Cognito ID에 대한 작업을 제한할 수 있습니다. 이 옵션은 주의해서 사용해야 하며, 일관된 사용자 ID가 부족한 미인증 ID의 경우에는 더욱 주의해야 합니다. Amazon Cognito와의 웹 페더레이션을 위한 IAM 정책 변수에 대한 자세한 내용은 사용 설명서의 IAM AWS STS 및 조건 컨텍스트 키를 참조하십시오.AWS Identity and Access Management

보안 강화를 위해, Amazon Cognito는 GetCredentialsForIdentity를 사용하여 향상된 흐름에서 미인증 사용자에 할당된 보안 인증 정보에 범위 축소 정책을 적용합니다. 범위 축소 정책은 미인증 역할에 적용하는 IAM 정책에 인라인 세션 정책AWS 관리형 세션 정책을 추가합니다. 역할에 대한 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¹

데이터베이스

Amazon DynamoDB

Amazon SimpleDB

프런트 엔드 웹 및 모바일

AWS AppSync

Amazon Location Service

Amazon Simple Notification Service

Amazon Pinpoint

게임 개발

아마존 GameLift

사물 인터넷(IoT)

AWS IoT

기계 학습

아마존 CodeWhisperer

Amazon Comprehend

Amazon Lex

Amazon Machine Learning

Personalize

Amazon Polly

Amazon Rekognition

아마존 SageMaker ¹

Amazon Textract¹

Amazon Transcribe

Amazon Translate

관리 및 거버넌스

아마존 CloudWatch

아마존 CloudWatch 로그

네트워킹 및 콘텐츠 전송

Amazon API Gateway

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

Amazon Cognito 사용자 풀

스토리지

Amazon Simple Storage Service(S3)

¹ 다음 AWS 서비스 표의 경우 인라인 정책은 작업의 하위 집합을 허용합니다. 표에는 각 항목에서 사용할 수 있는 작업이 표시됩니다.

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

Encrypt

Decrypt

ReEncrypt

GenerateDataKey

아마존 SageMaker

InvokeEndpoint

Amazon Textract

DetectDocumentText

AnalyzeDocument

Amazon Sumerian

View*

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

인라인 세션 정책

인라인 세션 정책은 사용자의 유효 권한이 다음 목록에 있는 권한 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 역할에 연결하는 정책에서도 이 권한을 부여해야 합니다.

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

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "rum:PutRumEvents", "polly:*", "comprehend:*", "translate:*", "transcribe:*", "rekognition:*", "mobiletargeting:*", "firehose:*", "personalize:*", "sagemaker:InvokeEndpoint" ], "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:::mybucket/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:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab로 가져오고 넣고 나열할 수 있습니다. 하지만 arn:aws:s3:::mybucket의 다른 객체에 대한 액세스는 이 자격 증명에게 부여되지 않습니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${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 개발자 가이드에서 IAM을 사용하여 Amazon Kinesis Data Streams 리소스에 대한 액세스 제어를 참조하세요.

{ "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}/*"] }] }