Post

AWS STS (Security Token Service) 개념

AWS STS (Security Token Service) 개념

1. AWS STS (Security Token Service)란?

AWS STS는 AWS Security Token Service의 약자로 AWS 리소스에 접근하기 위한 임시 보안 자격 증명을 사용하는 서비스이다.

임시 자격 증명을 사용하지 않는 경우에는 IAM User의 자격증명을 사용해야 하며, 이는 Access Key IDSecret Access Key로 구성된다. 이와달리, 임시 자격 증명은 Access Key ID, Secret Access key를 포함하고 있고 추가로 Session Token이 추가된다.

이 둘의 차이점은 루트 사용자 또는 IAM 사용자에의해 직접 발급된 자격 증명인지 아니면 STS 서비스에 의해 임시로 발급된 자격 증명인지 여부이다. IAM User에게 발급된 키는 장기적으로 사용할 수 있으나 보안상 주기적으로 교체하는 것이 권장된다. AWS STS에 의해 발급된 임시 자격 증명은 사용 방식에 따라 최소/최대 유효 시간이 다르지만, 보통 최소 15분부터 최대 12시간까지 사용 가능하다.

1-1. AWS STS 특징

  1. 임시 자격 증명 발급: AWS STS는 짧은 유효 시간을 갖는 자격 증명을 발급한다. 이 자격 증명에는 Access Key ID, Secret Key 그리고 Session Token이 포함된다.
  2. 보안 강화: 임시 자격 증명은 유효 시간이 지나면 자동으로 무효화되므로 자격 증명이 유출되더라도 피해를 최소화할 수 있다.
  3. 역할 기반 동작: STS의 기능 중 하나인 Assume Role을 통해 IAM 자격 증명을 갖지 않고도 특정 IAM 역할을 Assume하여 해당 역할이 가진 권한으로 AWS 리소스에 접근할 수 있다.
    • Cross Account: 다른 AWS 계정의 리소스에 접근
    • OIDC: GitHub Actions와 같은 CI/CD 도구가 AWS 리소스에 접근할 때, OIDC를 통해 IAM 역할을 Assume하여 임시 자격 증명을 발급받아 사용

아래 코드는 GitHub Actions 워크플로우에서 aws-actions/configure-aws-credentials 액션을 사용하여 AWS 리소스에 접근하기 위해 github-actions-deploy 역할을 Assume하는 예제이다. 이 액션은 OIDC를 통해 AWS STS와 통신하여 임시 자격 증명을 발급받는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
jobs:
  deploy:
    name: Deploy to Dev
    runs-on: ubuntu-latest
    steps:
      # 코드 체크아웃
      - name: Checkout
        uses: actions/checkout@v4

      # Node.js 설정
      - name: Node.js Setup
        uses: actions/setup-node@v4
        with:
          node-version: '22'  

      # AWS 자격 증명 설정
      - name: AWS Credentials Setup
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::$:role/github-actions-deploy-$
          aws-region: $

2. aws sts get-caller-identity

aws sts get-caller-identity 명령어는 현재 AWS CLI 또는 SDK를 사용하여 AWS API를 호출하고 있는 사용자의 신원 정보를 반환하는 명령어이다. 쉽게 말해, 현재 인증된 AWS 주체가 누구인지 확인하는 용도이다. (명렁어 자체는 AWS 리소스에 접근하는 것이 아닌 현재 세션의 신원을 조회하는 것임)

2-1. 신원 정보에 포함되는 3가지 정보

  • UserId: 호출자의 고유 식별자이다.
  • Account: 호출자가 속한 AWS 계정 ID이다.
  • Arn: 호출자의 ARN이다.

2-2. 로컬과 OIDC 환경에서의 UserId

로컬 환경에서 aws sts get-caller-identity를 호출하는 경우 UserId는 Access Key ID가 반환된다.

OIDC 환경에서는 Role Session ID: SESSION NAME이 반환된다.

3-3. 로컬과 OIDC 환경에서의 STS ARN

  • 로컬: arn:aws:iam::123456789012:user/heemang.lee
  • OIDC: arn:aws:sts::123456789012:assumed-role/github-actions-deploy/GitHubActions

OIDC에서는 arn:aws:sts::123456789012:assumed-role/github-actions-deploy/GitHubActions와 같이 assumed-role을 포함하는 STS ARN을 반환한다. 이는 GitHub Actions가 OIDC를 통해 IAM 역할을 Assume하여 사용하고 있음을 의미한다.

This post is licensed under CC BY 4.0 by the author.