본문 바로가기
C.W.K.
Stream
Lesson 08 of 12 · published

OIDC — 키 없는 클라우드 인증

~14 min · oidc, aws, gcp, azure

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

CI에 장기 클라우드 키를 저장하는 건 이제 그만

CI에서 AWS를 배포할 때 전통적으로 쓰던 방식은 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY를 비밀값으로 저장하는 거야. 이 키들은 만료 기한이 없고 장기적으로 쓰이는데, 하나만 유출돼도 접근 가능한 모든 걸 침해당할 수 있어. 이제 그만해.

OpenID Connect (OIDC)를 쓰면 GitHub Actions가 클라우드 제공자의 IAM에서 직접 짧은 수명으로 범위가 정해진 토큰을 요청할 수 있어. 흐름은 이래:

  1. 워크플로가 permissions: id-token: write를 선언해.
  2. 액션이 GitHub에 OIDC ID 토큰을 요청해. 토큰에는 '저장소 X, 브랜치 Y, Z가 실행한 워크플로'라는 정보가 들어있어.
  3. 클라우드 제공자(AWS / GCP / Azure 등)가 GitHub의 공개 키로 토큰 서명을 검증해.
  4. 클라우드 제공자가 신뢰 정책을 확인해. '저장소 X의 워크플로가 역할 R을 맡는 걸 신뢰할까?'
  5. 그렇다면 짧은 수명(약 1시간)의 자격 증명을 반환해.
  6. 액션이 그 자격 증명을 쓰고, 시간이 지나면 자동으로 만료돼.

주요 클라우드 제공자가 다 지원해

  • AWS — token.actions.githubusercontent.com 용 IAM Identity Provider를 만들고, repo:my-org/my-repo:ref:refs/heads/main 키로 신뢰 정책을 가진 역할을 설정해.
  • GCP — Workload Identity Federation을 쓰는데, 개념은 비슷해.
  • Azure — 서비스 주체의 Federated 자격 증명을 써.
  • Vault, AWS Cognito 등 — 똑같은 원리야.

Code

OIDC로 AWS 배포 — 정적 키 없음·yaml
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write       # request OIDC token
      contents: read
    steps:
      - uses: actions/checkout@v4
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/gha-deploy
          aws-region: us-east-1
      - run: aws s3 sync ./dist s3://my-bucket/

External links

Exercise

정적 AWS 키를 쓰는 CI 워크플로가 있다면 OIDC로 마이그레이션해 봐. 클라우드 쪽 설정은 일회성 IAM Identity Provider와 신뢰 정책을 가진 역할을 만드는 걸로 끝나. 마이그레이션 후에는 정적 AWS_ACCESS_KEY_ID 비밀값을 완전히 삭제해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.