IAM 역할 - Amazon Cognito

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

IAM 역할

자격 증명 풀 생성 중에 사용자가 담당할 IAM 역할을 업데이트하라는 메시지가 표시됩니다. 사용자가 앱에 로그인할 때 Amazon Cognito는 사용자에 대해 임시 AWS 자격 증명을 생성합니다. IAM 역할은 이런 식으로 작동합니다. 이러한 임시 자격 증명은 특정 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 역할을 이용하여 애플리케이션의 사용자에 대한 임시 자격 증명을 생성합니다. 권한에 대한 액세스는 역할의 신뢰 관계에 의해 제어됩니다. 역할 신뢰 및 권한 단원에 대해 자세히 알아봅니다.

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

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

"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" }

액세스 정책

역할에 연결된 권한은 해당 역할을 담당하는 모든 사용자에 적용됩니다. 사용자의 액세스를 파티셔닝하려는 경우 정책 변수를 통해 이를 수행할 수 있습니다. 특히 미인증 자격 증명에 대해 액세스 정책에 사용자의 자격 증명 ID를 포함시킬 경우 사용자가 로그인하도록 선택하면 이러한 사항이 변경될 수 있음을 유의하십시오.

추가적인 보안을 위해 Amazon Cognito는 GetCredentialForIdentity가 제공한 자격 증명에 범위가 축소된 정책을 적용하여 미인증 사용자에 대해 아래에 나열된 것 이외의 다른 서비스에 대한 액세스를 금지합니다. 다시 말해서, 이 정책은 다음 서비스에만 액세스할 수 있는 이러한 자격 증명을 사용하는 자격 증명을 허용합니다.

AWS AppSync

Amazon Comprehend

GameLift

Amazon Lex

Amazon Polly

Amazon SimpleDB

Amazon Transcribe

CloudWatch

DynamoDB

AWS IoT

Amazon Machine Learning

Amazon Rekognition

Amazon SES

Amazon Translate

Amazon Cognito 자격 증명

Amazon Kinesis Data Firehose

AWS KMS Amazon Mobile Analytics

Amazon Sumerian

Amazon SNS

Amazon Cognito Sync

Amazon Kinesis Data Streams

AWS Lambda

Amazon Pinpoint

Amazon S3

Amazon SQS

미인증 사용자에 대해 이러한 서비스 이외의 다른 사항에 액세스해야 할 경우 기본 인증 흐름을 사용해야 합니다. 이는 NotAuthorizedException을 가져오고 미인증 역할 정책에서 서비스에 대한 액세스를 활성화했기 때문일 수 있습니다.

액세스 정책 예제

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

참고

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

예제 1: 자격 증명이 S3에서 단일 객체에 대한 읽기 액세스를 갖도록 허용

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

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

예제 2: 자격 증명이 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}/*"] } ] }

예제 3: 자격 증명에 Amazon DynamoDB에 대한 세분화된 액세스 할당

다음 액세스 정책은 자격 증명 ID별로 DynamoDB의 항목에 대한 액세스 권한을 부여하는 Amazon Cognito 변수를 사용하여 Amazon 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}"] } } } ] }

예제 4: 자격 증명이 AWS Lambda 함수 호출을 실행하도록 허용

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

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

예제 5: 자격 증명이 Amazon Kinesis Data Stream에 레코드를 게시하도록 허용

다음 액세스 정책은 자격 증명이 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" ] } ] }

예제 6: 자격 증명이 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}/*"] }] }