사용자 풀, 자격 증명 풀, JWT

개발자를 위한 AWS 보안 활용

Rahul Singh

Technical Product Manager

Cognito, 하나의 이름에 담긴 두 서비스

Amazon Cognito

  • 애플리케이션 사용자를 위한 관리형 ID
  • 하나의 이름, 두 개의 서비스

점선 경계 위에 두 개의 질문이 있고, 경계에는 Amazon Cognito라는 이름이 붙어 있습니다. 경계 안에는 파란색 패널 두 개가 나란히 있는데, 하나는 사용자 디렉터리로 설명된 사용자 풀이고 다른 하나는 자격 증명 브로커로 설명된 자격 증명 풀입니다. 두 패널에서 나온 선은 아래쪽 주황색 점선 상자로 모이며, 많은 애플리케이션이 두 가지를 모두 사용한다고 설명합니다.

개발자를 위한 AWS 보안 활용

Cognito, 하나의 이름에 담긴 두 서비스

Amazon Cognito

  • 애플리케이션 사용자를 위한 관리형 ID
  • 하나의 이름, 두 개의 서비스

어떤 것이 필요할까요?

  • 로그인 및 사용자 프로필: 사용자 풀
  • 브라우저 또는 모바일이 AWS를 직접 호출: 자격 증명 풀

점선 경계 위에 두 개의 질문이 있고, 경계에는 Amazon Cognito라는 이름이 붙어 있습니다. 경계 안에는 파란색 패널 두 개가 나란히 있는데, 하나는 사용자 디렉터리로 설명된 사용자 풀이고 다른 하나는 자격 증명 브로커로 설명된 자격 증명 풀입니다. 두 패널에서 나온 선은 아래쪽 주황색 점선 상자로 모이며, 많은 애플리케이션이 두 가지를 모두 사용한다고 설명합니다.

개발자를 위한 AWS 보안 활용

사용자 풀은 사용자를 로그인시킵니다

관리형 사용자 디렉터리

  • 회원가입 및 로그인
  • 비밀번호 재설정
  • 다단계 인증

세로 흐름: 앱 사용자가 비밀번호를 보관하는 사용자 풀에 로그인하면, 풀이 ID 토큰, 액세스 토큰, 리프레시 토큰을 담은 상자를 반환합니다

개발자를 위한 AWS 보안 활용

사용자 풀은 사용자를 로그인시킵니다

관리형 사용자 디렉터리

  • 회원가입 및 로그인
  • 비밀번호 재설정
  • 다단계 인증

 

성공 시 토큰 3개 발급

세로 흐름: 앱 사용자가 비밀번호를 보관하는 사용자 풀에 로그인하면, 풀이 ID 토큰, 액세스 토큰, 리프레시 토큰을 담은 상자를 반환합니다

개발자를 위한 AWS 보안 활용

사용자 풀은 사용자를 로그인시킵니다

관리형 사용자 디렉터리

  • 회원가입 및 로그인
  • 비밀번호 재설정
  • 다단계 인증

 

성공 시 토큰 3개 발급

  • ID 토큰: 사용자가 누구인지
  • 액세스 토큰: 무엇을 호출할 수 있는지
  • 리프레시 토큰: 나중에 새 토큰 발급

세로 흐름: 앱 사용자가 비밀번호를 보관하는 사용자 풀에 로그인하면, 풀이 ID 토큰, 액세스 토큰, 리프레시 토큰을 담은 상자를 반환합니다

개발자를 위한 AWS 보안 활용

자격 증명 풀은 AWS 자격 증명을 발급합니다

토큰은 자격 증명이 아닙니다

  • 앱을 위한 신원 증명
  • AWS 서비스 접근용 자격 증명 아님

 

자격 증명 풀: 신뢰된 토큰을 넣으면 자격 증명이 나옵니다

사용자 풀 다이어그램과 같은 구조의 세로 흐름: 신뢰된 토큰이 자격 증명 풀에 제시되면, 풀은 발급자를 확인하고 하나의 역할로 범위가 지정된, 만료되는 AWS 자격 증명을 반환합니다

개발자를 위한 AWS 보안 활용

자격 증명 풀은 AWS 자격 증명을 발급합니다

토큰은 자격 증명이 아닙니다

  • 앱을 위한 신원 증명
  • AWS 서비스 접근용 자격 증명 아님

 

자격 증명 풀: 신뢰된 토큰을 넣으면 자격 증명이 나옵니다

  • 빌드 작업이 OIDC 토큰을 교환한 경우
  • 소지한 증명을 출입 카드로 교환

사용자 풀 다이어그램과 같은 구조의 세로 흐름: 신뢰된 토큰이 자격 증명 풀에 제시되면, 풀은 발급자를 확인하고 하나의 역할로 범위가 지정된, 만료되는 AWS 자격 증명을 반환합니다

개발자를 위한 AWS 보안 활용

하나의 앱, 두 부분

두 서비스를 모두 사용하는 브라우저

  1. 로그인하고 토큰을 받습니다
  2. 해당 토큰을 API로 전송합니다

베어러 토큰: 소지한 사람이 사용합니다

세로 흐름입니다. 브라우저가 사용자 풀에 로그인하면 토큰이 반환됩니다. 이 토큰 하나가 두 갈래로 나뉘어, 왼쪽은 API로, 오른쪽은 자격 증명 풀로 향합니다. 자격 증명 풀은 자격 증명을 반환하고, 이 자격 증명이 S3에 도달합니다.

개발자를 위한 AWS 보안 활용

하나의 앱, 두 부분

두 서비스를 모두 사용하는 브라우저

  1. 로그인하고 토큰을 받습니다
  2. 해당 토큰을 API로 전송합니다
  3. 같은 토큰을 자격 증명으로 교환합니다

세로 흐름입니다. 브라우저가 사용자 풀에 로그인하면 토큰이 반환됩니다. 이 토큰 하나가 두 갈래로 나뉘어, 왼쪽은 API로, 오른쪽은 자격 증명 풀로 향합니다. 자격 증명 풀은 자격 증명을 반환하고, 이 자격 증명이 S3에 도달합니다.

개발자를 위한 AWS 보안 활용

하나의 앱, 두 부분

두 서비스를 모두 사용하는 브라우저

  1. 로그인하고 토큰을 받습니다
  2. 해당 토큰을 API로 전송합니다
  3. 같은 토큰을 자격 증명으로 교환합니다
  4. 해당 자격 증명으로 S3에 접근합니다

토큰은 코드로, 자격 증명은 AWS로

세로 흐름입니다. 브라우저가 사용자 풀에 로그인하면 토큰이 반환됩니다. 이 토큰 하나가 두 갈래로 나뉘어, 왼쪽은 API로, 오른쪽은 자격 증명 풀로 향합니다. 자격 증명 풀은 자격 증명을 반환하고, 이 자격 증명이 S3에 도달합니다.

개발자를 위한 AWS 보안 활용

토큰은 서명이 포함된 텍스트입니다

점으로 연결된 세 부분이 있으며, 각각 Header, Payload, Signature로 표시되어 있습니다. 페이로드 위에는 열린 자물쇠가 있고, 처음 두 부분 아래의 괄호는 서명이 어디까지 적용되는지 보여줍니다.

JWT: JSON Web Token

  • 클레임: 사용자에 관한 이름표가 붙은 정보
개발자를 위한 AWS 보안 활용

토큰은 서명이 포함된 텍스트입니다

점으로 연결된 세 부분이 있으며, 각각 Header, Payload, Signature로 표시되어 있습니다. 페이로드 위에는 열린 자물쇠가 있고, 처음 두 부분 아래의 괄호는 서명이 어디까지 적용되는지 보여줍니다.

JWT: JSON Web Token

  • 클레임: 사용자에 관한 이름표가 붙은 정보
  • 암호화가 아닌 인코딩
  • 누구나 읽을 수 있고 누구나 변경할 수 있습니다
개발자를 위한 AWS 보안 활용

읽기 전에 검증하세요

검증이 먼저입니다

  • JWKS: JSON Web Key Set, 발급자의 공개 서명 키
  • 해당 키로 서명을 확인

세로 게이트 다이어그램입니다. 토큰이 도착해 서명, 발급자, 대상, 만료 순으로 네 가지 확인을 차례로 통과합니다. 발급자의 공개 키는 옆에서 서명 확인으로 들어가며, 네 번째 확인을 통과해야만 클레임을 읽는 녹색 상자에 도달합니다.

개발자를 위한 AWS 보안 활용

읽기 전에 검증하세요

검증이 먼저입니다

  • JWKS: JSON Web Key Set, 발급자의 공개 서명 키
  • 해당 키로 서명을 확인

 

그다음 세 가지 클레임

  • iss: 사용자 풀
  • ID 토큰에서는 aud, 액세스 토큰에서는 client_id
  • exp: 아직 유효한지

세로 게이트 다이어그램입니다. 토큰이 도착해 서명, 발급자, 대상, 만료 순으로 네 가지 확인을 차례로 통과합니다. 발급자의 공개 키는 옆에서 서명 확인으로 들어가며, 네 번째 확인을 통과해야만 클레임을 읽는 녹색 상자에 도달합니다.

개발자를 위한 AWS 보안 활용

검증된 토큰도 잘못될 수 있습니다

나란히 놓인 짝을 이루는 두 카드입니다. ID 토큰 카드는 ID 토큰으로 표시되고, 클라이언트 ID가 대상(audience) 클레임에 담겨 있으며, 범위(scope)는 포함하지 않는다고 설명합니다. 그 아래에는 사용자가 누구인지를 나타내는 회색 상자가 있습니다. 액세스 토큰 카드는 액세스 토큰으로 표시되고, 클라이언트 ID가 자체 클라이언트 식별자 클레임에 담겨 있으며, 범위를 포함한다고 설명합니다. 그 아래에는 무엇을 호출할 수 있는지를 나타내는 주황색 상자가 있습니다. 두 카드 아래의 점선 띠에는 Cognito 그룹 클레임이 두 토큰 모두에 나타난다고 설명되어 있습니다.

검증은 통과했지만 여전히 잘못된 토큰

개발자를 위한 AWS 보안 활용

검증된 토큰도 잘못될 수 있습니다

나란히 놓인 짝을 이루는 두 카드입니다. ID 토큰 카드는 ID 토큰으로 표시되고, 클라이언트 ID가 대상(audience) 클레임에 담겨 있으며, 범위(scope)는 포함하지 않는다고 설명합니다. 그 아래에는 사용자가 누구인지를 나타내는 회색 상자가 있습니다. 액세스 토큰 카드는 액세스 토큰으로 표시되고, 클라이언트 ID가 자체 클라이언트 식별자 클레임에 담겨 있으며, 범위를 포함한다고 설명합니다. 그 아래에는 무엇을 호출할 수 있는지를 나타내는 주황색 상자가 있습니다. 두 카드 아래의 점선 띠에는 Cognito 그룹 클레임이 두 토큰 모두에 나타난다고 설명되어 있습니다.

검증은 통과했지만 여전히 잘못된 토큰

token_use가 토큰 종류를 나타냅니다

  • cognito:groups는 두 종류 모두에 포함되며 범위(scope)가 아닙니다

  • scope: 토큰이 호출할 수 있는 대상

  • sub: 어떤 사용자인지, 절대 변하지 않음
  • 신원은 권한이 아닙니다
개발자를 위한 AWS 보안 활용

연습해 봅시다!

개발자를 위한 AWS 보안 활용

Preparing Video For Download...