GitHub Actions에서 OIDC를 이용해 AWS 자격 증명을 보호하세요

발행: (2026년 1월 7일 오후 11:59 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

“Secure your AWS credentials on GitHub Actions with OIDC”의 표지 이미지

V‑ris Jaijongrak

GitHub Actions

AWS 자격 증명을 GitHub Actions(깃허브 저장소가 CI/CD를 수행하도록 하는 워크플로/파이프라인)에서 더 강화할 수 있는 방법이 궁금하셨나요?

대부분의 튜토리얼은 프로그래밍용 키를 가진 IAM 사용자를 생성하고, 해당 키를 안전하게 보관하라고(공개 인터넷에 절대 노출하지 말라고) 안내합니다. GitHub Actions에서는 보통 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY를 저장소 Secrets 섹션에 추가합니다.

하지만 이것은 최상의 보안을 제공하지 못합니다. 장기적으로 유효한 정적 자격 증명을 완전히 없애는 더 나은 접근 방식이 존재합니다.

AWS 자격 증명은 비밀이어야 합니다

자격 증명이 노출되면 공격자는 해당 정체성에 연결된 권한을 사용하여 심각한 피해를 입힐 수 있습니다. IAM 사용자/역할을 설계할 때 최소 권한 원칙을 적용하는 것이 필수적입니다.

AWS IAM Identity Provider (OIDC)

When the caller to AWS services supports OIDC v2, you can exchange a short‑lived token for an AWS session token. This lets you:

  • GitHub Secrets에서 정적 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 를 제거합니다.
  • OIDC 토큰을 통해 IAM 역할을 가정하여 특정 워크플로에 필요한 권한만 부여합니다.

Source:

단계별 가이드

1. AWS IAM OIDC 아이덴티티 공급자 만들기

AWS CLI 사용

aws iam create-open-id-connect-provider \
    --url https://token.actions.githubusercontent.com \
    --client-id-list sts.amazonaws.com

AWS 콘솔 사용

  1. IAM → Identity providersAdd provider를 엽니다.
  2. OIDC를 선택합니다.
  3. Provider URLhttps://token.actions.githubusercontent.com을 입력합니다.
  4. Audiencests.amazonaws.com을 입력합니다.

Add OIDC provider in the console

2. OIDC 공급자를 신뢰하는 IAM 역할 만들기

다음 신뢰 정책을 사용합니다 (플레이스홀더를 실제 값으로 교체).

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:/:ref:refs/heads/"
        }
      }
    }
  ]
}

AWS_ACCOUNT_ID, GITHUB_ORG, GITHUB_REPOSITORY 및 “ 를 환경에 맞는 값으로 교체합니다.
역할에 필요한 권한 정책을 연결합니다 (예: AmazonS3ReadOnlyAccess, 사용자 정의 정책 등).

3. GitHub Actions 워크플로우 구성

워크플로우에 OIDC 토큰을 요청하고 방금 만든 역할을 가정하도록 권한을 부여합니다.

# .github/workflows/deploy.yml
name: Deploy to AWS

# OIDC ID 토큰 요청
permissions:
  id-token: write   # OIDC에 필요
  contents: read    # (선택) 체크아웃 등에 필요

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          role-to-assume: arn:aws:iam:::role/
          aws-region: 

      - name: Verify identity
        run: aws sts get-caller-identity

핵심 포인트

  • permissions.id-token: write는 워크플로우가 GitHub에서 단시간 유효 OIDC 토큰을 얻을 수 있게 합니다.
  • aws-actions/configure-aws-credentials는 해당 토큰을 사용해 지정한 역할을 통해 임시 AWS 자격 증명으로 자동 교환합니다.

이후 AWS 액세스 키를 GitHub Secrets에 저장하지 마세요 — 워크플로우는 OIDC 토큰이 제공하는 단시간 자격 증명을 사용합니다.

결론

이 단계별 가이드는 공식 aws-actions 문서를 그대로 따르면서도 다음과 같은 방법을 보여줍니다:

  • AWS에서 OIDC 신원 제공자를 설정합니다.
  • GitHub의 OIDC 토큰을 신뢰하는 역할을 생성합니다.
  • 정적 AWS 비밀 없이 해당 역할을 가정하도록 GitHub Actions 워크플로를 구성합니다.

이 패턴을 채택하면 다음과 같은 이점을 얻을 수 있습니다:

  • 리포지토리에서 장기 사용 자격 증명을 제거합니다.
  • 공격 표면을 줄입니다(토큰은 몇 분 후에 만료됩니다).
  • 비밀 회전을 간소화합니다—수동 회전이 필요하지 않습니다.

OIDC 기반 인증을 구현하는 것은 실질적인 성능 영향을 거의 주지 않으면서 보안 태세를 향상시키는 간단한 방법입니다.

코딩 즐겁게! 🎉

참고

Back to Blog

관련 글

더 보기 »