역할, 임시 자격 증명, SigV4

개발자를 위한 AWS 보안 활용

Rahul Singh

Technical Product Manager

작업보다 오래 남는 키

작업 속도를 높이려고 스크립트에서 키를 생성해 구성 파일에 저장합니다.

이 키는 파일 안에서:

  • 교체되지 않고
  • 취소되지 않고
  • 만료되지 않습니다

액세스 키 하나가 저장 위치 여섯 곳으로 퍼져나가고, 오른쪽 시간 축은 18개월째에도 여전히 유효함을 보여주는 모습

개발자를 위한 AWS 보안 활용

작업보다 오래 남는 키

작업 속도를 높이려고 스크립트에서 키를 생성해 구성 파일에 저장합니다.

이 키는 파일 안에서:

  • 교체되지 않고
  • 취소되지 않고
  • 만료되지 않습니다

 

18개월이 지나도 여전히 유효합니다

액세스 키 하나가 저장 위치 여섯 곳으로 퍼져나가고, 오른쪽 시간 축은 18개월째에도 여전히 유효함을 보여주는 모습

개발자를 위한 AWS 보안 활용

스스로 만료되는 자격 증명

AWS STS로 만료를 기본값으로 설정하기

  1. 역할을 요청하고, 내장 시계가 있는 자격 증명을 받습니다

  2. Security Token Service(STS): 만료가 기본적으로 1시간으로 설정됩니다

애플리케이션이 AWS STS에서 AssumeRole을 호출하면, STS가 내장 시계를 가진 자격 증명을 반환하는 모습.

개발자를 위한 AWS 보안 활용

스스로 만료되는 자격 증명

AWS STS로 만료를 기본값으로 설정하기

  1. 역할을 요청하고, 내장 시계가 있는 자격 증명을 받습니다

  2. 임시 자격 증명은 ASIA로 시작하며 세션 토큰을 포함합니다

  3. Security Token Service(STS): 만료가 기본적으로 1시간으로 설정됩니다

애플리케이션이 AWS STS에서 AssumeRole을 호출해 내장 시계가 있는 자격 증명을 받는 모습. 아래에는 두 자격 증명이 나란히 표시됩니다. 세션 토큰 없이 만료되지 않는 AKIA로 시작하는 장기 키와, 세션 토큰을 포함해 1시간 후 만료되는 ASIA로 시작하는 임시 자격 증명입니다.

개발자를 위한 AWS 보안 활용

스스로 만료되는 자격 증명

AWS STS로 만료를 기본값으로 설정하기

  1. 역할을 요청하고, 내장 시계가 있는 자격 증명을 받습니다

  2. 임시 자격 증명은 ASIA로 시작하며 세션 토큰을 포함합니다

  3. 같은 호출이 처음엔 허용되다가 이후 거부됩니다

  4. Security Token Service(STS): 만료가 기본적으로 1시간으로 설정됩니다

애플리케이션이 AWS STS에서 AssumeRole을 호출해 내장 시계가 있는 자격 증명을 받는 모습. 아래에는 만료되지 않는 AKIA로 시작하는 장기 키와, 세션 토큰을 포함해 1시간 후 만료되는 ASIA로 시작하는 임시 자격 증명이 나란히 표시됩니다. 그 아래에는 동일한 GetObject 호출이 10시에는 200 OK를, 11시 5분에는 ExpiredToken을 반환하는 모습이 나타납니다.

개발자를 위한 AWS 보안 활용

코드가 자격 증명을 찾는 방법

자격 증명 공급자 체인 확인하기

  • 코드 속 라이브러리인 AWS SDK가 검색을 수행합니다
  • 정해진 목록을 순서대로 확인합니다
  • 처음 일치하는 항목에서 멈춥니다

자격 증명 조회 순서: 코드에 전달된 키는 체인 위에서 취소선으로 표시되고, 검색은 환경 변수, 구성 파일, 컨테이너 자격 증명 순으로 진행되며 처음 일치하는 항목에서 멈춰 인스턴스 메타데이터까지는 도달하지 않습니다

개발자를 위한 AWS 보안 활용

코드가 자격 증명을 찾는 방법

자격 증명 공급자 체인 확인하기

  • 코드 속 라이브러리인 AWS SDK가 검색을 수행합니다
  • 정해진 목록을 순서대로 확인합니다
  • 처음 일치하는 항목에서 멈춥니다

 

하드코딩된 키가 가장 먼저 확인되므로 반드시 삭제해야 합니다

자격 증명 조회 순서: 코드에 전달된 키는 체인 위에서 취소선으로 표시되고, 검색은 환경 변수, 구성 파일, 컨테이너 자격 증명 순으로 진행되며 처음 일치하는 항목에서 멈춰 인스턴스 메타데이터까지는 도달하지 않습니다

개발자를 위한 AWS 보안 활용

체인을 한 단계씩 살펴보기

1. explicit      a key passed in your code
2. environment   AWS_* variables, and on Lambda
                 that is the execution role
3. config file   ~/.aws/credentials
4. container     ECS or EKS task role
5. instance      EC2 instance profile, via IMDS
  • 가장 먼저 일치하는 항목이 우선합니다
  • 저장된 키를 삭제하면 검색이 역할로 이어집니다
개발자를 위한 AWS 보안 활용

AWS 외부에서 신원 증명하기

코드 파이프라인은 AWS 외부에서 실행되는 경우가 많아 자격 증명 체인을 연결할 수 없습니다

  • GitHub나 GitLab에서 실행됩니다
  • 체인이 찾을 대상이 없습니다

AWS 경계 밖에 표시된 CI 러너와 플랫폼. 러너에는 연결할 역할이 없다고 표시되고, 플랫폼은 하나의 저장소와 하나의 워크플로를 지정하는 OIDC 토큰에 서명하는 모습

개발자를 위한 AWS 보안 활용

AWS 외부에서 신원 증명하기

코드 파이프라인은 AWS 외부에서 실행되는 경우가 많아 자격 증명 체인을 연결할 수 없습니다

  • GitHub나 GitLab에서 실행됩니다
  • 체인이 찾을 대상이 없습니다

 

OIDC 토큰(OpenID Connect)

  • 서명되어 있고 수명이 짧습니다
  • 자격 증명이 아닌 신원 증명입니다

AWS 경계 밖에 표시된 CI 러너와 플랫폼. 러너에는 연결할 역할이 없다고 표시되고, 플랫폼은 하나의 저장소와 하나의 워크플로를 지정하는 OIDC 토큰에 서명하는 모습

개발자를 위한 AWS 보안 활용

저장된 키 대신 규칙으로

저장소를 지정하는 OIDC 토큰이 AssumeRoleWithWebIdentity를 통해 1시간 후 만료되는 임시 자격 증명으로 교환되는 모습. 역할의 신뢰 정책에 이미 해당 발급자와 저장소가 지정되어 있기 때문입니다

토큰을 자격 증명으로 교환하기

개발자를 위한 AWS 보안 활용

저장된 키 대신 규칙으로

저장소를 지정하는 OIDC 토큰이 AssumeRoleWithWebIdentity를 통해 1시간 후 만료되는 임시 자격 증명으로 교환되는 모습. 역할의 신뢰 정책에 이미 해당 발급자와 저장소가 지정되어 있기 때문입니다

토큰을 자격 증명으로 교환하기

  • AssumeRoleWithWebIdentity: 외부 토큰을 증거로 사용하는 AssumeRole
  • 신뢰 정책: 파이프라인이 아닌 역할에 미리 작성됨
  • 클레임: 토큰 안에 담긴 하나의 사실
  • 발급자는 플랫폼의 모든 저장소가 공유하므로 저장소도 함께 고정해야 합니다

저장소 시크릿: 이제 비어 있습니다

개발자를 위한 AWS 보안 활용

모든 요청에는 서명이 있습니다

Signature Version 4, 즉 SigV4

  • 어떤 자격 증명이 요청을 보냈는지 증명합니다
  • 요청이 전송 중 변경되지 않았음을 증명합니다
  • 모든 호출마다 CLI와 SDK가 서명합니다

요청과 자격 증명으로 서명을 생성해 Authorization 헤더에 담아 전송하면, AWS가 이를 다시 계산해 비교하는 서명 흐름. 일치하면 요청을 수락하고, 일치하지 않으면 SignatureDoesNotMatch를 반환합니다

개발자를 위한 AWS 보안 활용

다른 사람에게 넘길 수 있는 서명

임시 자격 증명

  • 역할 범위 내에서 다양한 작업을 수행합니다
  • 코드가 직접 보유합니다

코드가 임시 자격 증명으로 S3, DynamoDB, SQS, KMS 등 네 가지 AWS 서비스를 호출하는 모습

개발자를 위한 AWS 보안 활용

다른 사람에게 넘길 수 있는 서명

임시 자격 증명

  • 역할 범위 내에서 다양한 작업을 수행합니다
  • 코드가 직접 보유합니다

사전 서명 URL

  • 객체 하나, 작업 하나, 링크를 가진 누구나 접근 가능
  • 직접 설정한 만료 시간이 지나면 더 이상 접근 불가
  • 소유자가 아닌 발급자의 권한을 담고 있습니다

코드가 임시 자격 증명으로 S3, DynamoDB, SQS, KMS 등 네 가지 AWS 서비스를 호출하는 모습

다른 사람의 브라우저가 단일 경로로 정확히 하나의 객체에 접근하는 모습. 직접 설정한 만료 시간을 나타내는 시계로 접근이 중단됩니다

개발자를 위한 AWS 보안 활용

연습해 봅시다!

개발자를 위한 AWS 보안 활용

Preparing Video For Download...