[AWS] Cognito Identity Pool로 Guest/Unauthenticated Users(게스트, 비인증 사용자) 접근 권한 부여하기
Amazon Cognito Identity Pool
Guest / Unauthenticated Users (게스트 사용자) 접근 권한 부여
Cognito Identity Pool을 사용하면 게스트 유저(Unauthenticated Users, 로그인을 하지 않은 유저)에게 접근 권한을 부여할 수 있다.
Identity Pool에는 다음 2가지 타입의 유저에게 서로 다른 IAM Role을 할당가능하다.
- ✅ 인증된 유저(Authenticated User): 계정을 생성하여 로그인 가능한 유저
- 👤 게스트(Guest, Unauthenticated User): 계정이 없고 로그인을 하지 않은 유저
👨🏫 사용 예시: 교육 애플리케이션
- ✅인증된 유저: 모든 강의와 추가 학습 자료(PDF, 퀴즈 등)에 접근 가능.
- 👤게스트: 몇 개의 무료 강의만 미리 보기 가능.
[IAM Role 설정]
- ✅인증된 유저: 모든 S3 버킷의 Read 권한, 그 외에 로그인 정보를 위한 API Gateway, DynamoDB 등 더 많은 권한
- 👤게스트: 몇몇의 S3 버킷만 Read 권한 갖는다.
1. Cognito Identity Pool 생성하기
AWS Management Console에서 Amazon Cognito 서비스로 이동하기
새로운 Identity pools 생성하기 >> "Guest access" 선택하기
2. IAM Role 설정하기
Identity Pool에서 2 가지 타입의 사용자에게 서로 다른 IAM Role을 할당하여 분리해 관리 가능하다
- ✅ 인증된(Authenticated User) 유저를 위한 IAM Role
- 👤 게스트(Guest, Unauthenticated User)를 위한 IAM Role
다음과 같이 적절하게 IAM Role을 지정해줘야 한다.
[예시]: Authenticated Role (인증된 사용자 역할)
인증된 사용자에게는 더 많은 AWS 리소스 접근 권한을 제공하게 설정하기
전체 S3 버킷 및 DynamoDB 테이블에 읽기/쓰기 권한을 허용.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-sample-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem"
],
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
}
]
}
[예시]: Guest, Unauthenticated Role (게스트 사용자 역할)
게스트 사용자는 AWS 리소스에 접근이 제한되게 설정
특정 S3 버킷의 샘플 콘텐츠에만 접근을 허용
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::my-sample-bucket/sample-content/*"]
}
]
}
3. 애플리케이션에서 게스트 로그인 구현
Amazon Cognito SDK를 사용하여 애플리케이션에 게스트 로그인 기능을 추가한다.
AWS SDK를 사용한 비인증 사용자 설정 (JavaScript 예시):
AWS.config.region = 'your-region'; // 예: 'us-east-1'
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'your-identity-pool-id', // 생성한 Identity Pool ID 입력
});
AWS.config.credentials.get(function(err) {
if (err) {
console.error("Error: ", err);
} else {
console.log("Guest user identity ID: ", AWS.config.credentials.identityId);
}
});
https://docs.aws.amazon.com/location/latest/developerguide/authenticating-using-cognito.html
🤔 문제
한 소프트웨어 회사가 멀티미디어 애플리케이션을 출시하려고 합니다. 이 애플리케이션은 사용자가 계정을 생성하여 전체 콘텐츠에 접근하기 전에 게스트 사용자가 샘플 콘텐츠를 이용할 수 있도록 허용합니다. 회사는 이미 계정을 생성한 사용자를 식별할 수 있는 인증 프로세스를 구현하고, 게스트 사용자 중 계정을 생성한 사용자 수를 추적하려고 합니다.
위 요구사항을 충족하려면 어떤 단계 조합이 필요할까요? (두 가지를 선택하세요.)
- Amazon Cognito User Pool을 생성합니다. User Pool을 비인증 사용자를 허용하도록 구성합니다. 사용자 토큰을 교환하여 인증된 사용자가 역할을 가정(Assume Role)할 수 있도록 임시 자격 증명을 발급합니다.
- Amazon Cognito ID Pool을 생성합니다. ID Pool을 비인증 사용자를 허용하도록 구성합니다. 고유한 ID를 교환하여 모든 사용자가 역할을 가정할 수 있도록 임시 자격 증명을 발급합니다.
- Amazon CloudFront Distribution를 생성합니다. Distribution를 비인증 사용자를 허용하도록 구성합니다. 사용자 토큰을 교환하여 모든 사용자가 역할을 가정할 수 있도록 임시 자격 증명을 발급합니다.
- 인증된 사용자에게 모든 콘텐츠에 대한 액세스를 허용하는 역할을 생성합니다. 비인증 사용자에게 샘플 콘텐츠에만 액세스를 허용하는 역할을 생성합니다.
- 모든 사용자가 기본적으로 샘플 콘텐츠에 접근할 수 있도록 허용합니다. 인증된 사용자에게 다른 콘텐츠에 대한 액세스를 허용하는 역할을 생성합니다.
정답
정답. 2번, 4번