클라우드(AWS)/DVA-C02

[AWS] Cognito Identity Pool로 Guest/Unauthenticated Users(게스트, 비인증 사용자) 접근 권한 부여하기

찌르비 2024. 11. 27. 18:32
반응형

 

 

 

Amazon Cognito Identity Pool

Guest / Unauthenticated Users (게스트 사용자) 접근 권한 부여

Cognito Identity Pool을 사용하면 게스트 유저(Unauthenticated Users, 로그인을 하지 않은 유저)에게 접근 권한을 부여할 수 있다.

 

Identity Pool에는 다음 2가지 타입의 유저에게 서로 다른 IAM Role을 할당가능하다.

  1. ✅ 인증된 유저(Authenticated User): 계정을 생성하여 로그인 가능한 유저
  2. 👤 게스트(Guest, Unauthenticated User): 계정이 없고 로그인을 하지 않은 유저

 

👨‍🏫 사용 예시: 교육 애플리케이션

  1. 인증된 유저: 모든 강의와 추가 학습 자료(PDF, 퀴즈 등)에 접근 가능.
  2. 👤게스트: 몇 개의 무료 강의만 미리 보기 가능.

[IAM Role 설정]

  1. 인증된 유저: 모든 S3 버킷의 Read 권한, 그 외에 로그인 정보를 위한 API Gateway, DynamoDB 등 더 많은 권한
  2. 👤게스트: 몇몇의 S3 버킷만 Read 권한 갖는다.

 

1. Cognito Identity Pool 생성하기

AWS Management Console에서 Amazon Cognito 서비스로 이동하기

새로운 Identity pools 생성하기 >> "Guest access" 선택하기

 

 

2. IAM Role 설정하기

Identity Pool에서 2 가지 타입의 사용자에게 서로 다른 IAM Role을 할당하여 분리해 관리 가능하다

  1. ✅ 인증된(Authenticated User) 유저를 위한 IAM Role
  2. 👤 게스트(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

 

Use Amazon Cognito to allow access to your application - Amazon Location Service

The pool that you create must be in the same AWS account and AWS Region as the Amazon Location Service resources that you're using.

docs.aws.amazon.com

 


🤔 문제

한 소프트웨어 회사가 멀티미디어 애플리케이션을 출시하려고 합니다. 이 애플리케이션은 사용자가 계정을 생성하여 전체 콘텐츠에 접근하기 전에 게스트 사용자가 샘플 콘텐츠를 이용할 수 있도록 허용합니다. 회사는 이미 계정을 생성한 사용자를 식별할 수 있는 인증 프로세스를 구현하고, 게스트 사용자 중 계정을 생성한 사용자 수를 추적하려고 합니다.

위 요구사항을 충족하려면 어떤 단계 조합이 필요할까요? (두 가지를 선택하세요.)

 

  1. Amazon Cognito User Pool을 생성합니다. User Pool을 비인증 사용자를 허용하도록 구성합니다. 사용자 토큰을 교환하여 인증된 사용자가 역할을 가정(Assume Role)할 수 있도록 임시 자격 증명을 발급합니다.
  2. Amazon Cognito ID Pool을 생성합니다. ID Pool을 비인증 사용자를 허용하도록 구성합니다. 고유한 ID를 교환하여 모든 사용자가 역할을 가정할 수 있도록 임시 자격 증명을 발급합니다.
  3. Amazon CloudFront Distribution를 생성합니다. Distribution를 비인증 사용자를 허용하도록 구성합니다. 사용자 토큰을 교환하여 모든 사용자가 역할을 가정할 수 있도록 임시 자격 증명을 발급합니다.
  4. 인증된 사용자에게 모든 콘텐츠에 대한 액세스를 허용하는 역할을 생성합니다. 비인증 사용자에게 샘플 콘텐츠에만 액세스를 허용하는 역할을 생성합니다.
  5. 모든 사용자가 기본적으로 샘플 콘텐츠에 접근할 수 있도록 허용합니다. 인증된 사용자에게 다른 콘텐츠에 대한 액세스를 허용하는 역할을 생성합니다.

정답

더보기

정답. 2번, 4번

728x90
반응형