IAM 역할
자격 증명 풀을 생성하는 동안 사용자가 맡을 IAM 역할을 업데이트하라는 메시지가 표시됩니다. 사용자가 앱에 로그인할 때 Amazon Cognito는 사용자에 대해 임시 AWS 자격 증명을 생성합니다. IAM 역할은 이런 식으로 작동합니다. 이러한 임시 자격 증명은 특정 IAM 역할에 연결됩니다. IAM 역할을 사용하면 AWS 리소스에 액세스할 수 있는 일련의 권한을 정의할 수 있습니다.
인증 및 미인증 사용자에 대해 기본 IAM 역할을 지정할 수 있습니다. 또한 사용자의 ID 토큰에 있는 클레임에 따라 각 사용자에 대한 역할을 선택하는 규칙을 정의할 수 있습니다. 자세한 내용은 역할 기반 액세스 제어 섹션을 참조하세요.
기본적으로 Amazon Cognito 콘솔은 Amazon Mobile Analytics 및 Amazon Cognito Sync에 대한 액세스 권한을 제공하는 IAM 역할을 생성합니다. 또는 기존 IAM 역할을 사용하도록 선택할 수 있습니다.
다른 서비스에 대한 액세스를 허용하거나 제한하도록 IAM 역할을 수정합니다. 이렇게 하려면 IAM 콘솔에 로그인합니다
참고
가장 좋은 방법은 최소 권한 부여 원칙을 따르는 정책을 정의하는 것입니다. 다시 말해, 해당 정책은 사용자가 작업을 수행하는 데 필요한 권한만을 포함합니다. 자세한 내용은 IAM 사용 설명서에서 최소 권한 부여를 참조하세요.
인증되지 않은 자격 증명은 앱에 로그인하지 않은 사용자에 의해 수임된다는 점을 유의하세요. 일반적으로, 인증되지 않은 자격 증명에 할당한 권한은 인증된 자격 증명의 권한보다 더 제한적이어야 합니다.
트러스트 정책 설정
Amazon Cognito는 IAM 역할을 사용하여 애플리케이션의 사용자에 대한 임시 자격 증명을 생성합니다. 권한에 대한 액세스는 역할의 신뢰 관계에 의해 제어됩니다. 역할 트러스트 및 권한 섹션에 대해 자세히 알아봅니다.
자격 증명 풀에서 역할 재사용
여러 자격 증명 풀에서 역할을 재사용하려면 역할이 공통 권한 집합을 공유하므로 다음과 같이 여러 자격 증명 풀을 포함할 수 있습니다.
"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 정책 변수에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 IAM 및 AWS STS 조건 컨텍스트 키를 참조하세요.
보안 강화를 위해, Amazon Cognito는 GetCredentialsForIdentity
를 사용하여 향상된 흐름에서 미인증 사용자에 할당된 보안 인증 정보에 범위 축소 정책을 적용합니다. 범위 축소 정책은 미인증 역할에 적용하는 IAM 정책에 인라인 세션 정책를 추가합니다. 역할에 대한 IAM 정책과 세션 정책 모두에서 액세스 권한을 부여해야 하므로, 범위 축소 정책은 다음 목록에 있는 서비스 이외의 서비스에 대한 사용자의 액세스를 제한합니다.
참고
기본(클래식) 흐름에서는 자체 AssumeRoleWithWebIdentity API 요청을 하고, 이러한 제한을 요청에 적용할 수 있습니다. 보안 모범 사례는 미인증 사용자에게 이 범위 제한 정책을 초과하는 권한을 할당하지 않는 것입니다.
향상된 흐름으로 요청을 하는 데 성공하면, Amazon Cognito가 백그라운드에서 AssumeRoleWithWebIdentity
API 요청을 합니다. 이 요청의 파라미터 중에서 Amazon Cognito에는 다음이 포함됩니다.
-
사용자의 자격 증명 ID입니다.
-
사용자가 수임할 IAM 역할의 ARN입니다.
-
인라인 세션 정책을 추가하는
policy
파라미터입니다.
인라인 세션 정책
인라인 세션 정책은 사용자의 유효 권한에 다음 목록에 나오지 않는 AWS 서비스에 대한 액세스를 포함하지 못하게 합니다. 또한 사용자의 IAM 역할에 적용하는 정책에서 이러한 AWS 서비스에 대한 권한을 부여해야 합니다. 수임하는 역할 세션에 대한 사용자의 유효 권한은 해당 역할에 할당된 정책과 관련 세션 정책의 교차점입니다. 자세한 정보는 AWS Identity and Access Management 사용 설명서의 세션 정책을 참조하세요.
미인증 향상된 흐름 사용자가 액세스할 수 있는 서비스
범주 | 서비스 |
---|---|
분석 |
Amazon Kinesis Data Firehose Amazon Kinesis Data Analytics |
애플리케이션 통합 |
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 GameLift |
사물 인터넷(IoT) |
AWS IoT |
기계 학습 |
Amazon CodeWhisperer Amazon Comprehend Amazon Lex Amazon Machine Learning Amazon Personalize Amazon Polly Amazon Rekognition Amazon SageMaker¹ Amazon Textract¹ Amazon Transcribe Amazon Translate |
관리 및 거버넌스 |
Amazon CloudWatch Amazon CloudWatch Logs |
네트워킹 및 콘텐츠 전송 |
Amazon API Gateway |
보안, 자격 증명 및 규정 준수 |
Amazon Cognito 자격 증명 Amazon Cognito 사용자 풀 Amazon Cognito Sync |
스토리지 |
Amazon Simple Storage Service |
¹ 다음 표에 나오는 AWS 서비스의 경우 인라인 정책은 작업 하위 집합을 부여합니다. 표에는 각 항목에서 사용할 수 있는 작업이 표시됩니다.
AWS 서비스 | 미인증 향상된 흐름 사용자의 최대 권한 |
---|---|
AWS Key Management Service |
|
Amazon SageMaker |
|
Amazon Textract |
|
Amazon Sumerian |
|
미인증 향상된 흐름 사용자가 액세스할 수 있는 서비스에 대한 액세스 권한을 부여하려면 ID 풀에서 기본(클래식) 인증 흐름을 활성합니다. 미인증 사용자에 대해 IAM 역할에 할당된 정책에서 허용하는 AWS 서비스의 NotAuthorizedException
오류가 사용자에게 표시된다면, 사용 사례에서 해당 서비스를 제거해야 하는지 아니면 기본 흐름으로 전환해야 하는지를 평가하세요.
액세스 정책 예제
이 섹션에서는 자격 증명이 특정 작업을 완료하는 데 필요한 권한만 부여하는 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}/*"] }] }