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

GitHub Actions
AWS 자격 증명을 GitHub Actions(깃허브 저장소가 CI/CD를 수행하도록 하는 워크플로/파이프라인)에서 더 강화할 수 있는 방법이 궁금하셨나요?
대부분의 튜토리얼은 프로그래밍용 키를 가진 IAM 사용자를 생성하고, 해당 키를 안전하게 보관하라고(공개 인터넷에 절대 노출하지 말라고) 안내합니다. GitHub Actions에서는 보통 AWS_ACCESS_KEY_ID와 AWS_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 콘솔 사용
- IAM → Identity providers → Add provider를 엽니다.
- OIDC를 선택합니다.
- Provider URL에
https://token.actions.githubusercontent.com을 입력합니다. - Audience에
sts.amazonaws.com을 입력합니다.

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 기반 인증을 구현하는 것은 실질적인 성능 영향을 거의 주지 않으면서 보안 태세를 향상시키는 간단한 방법입니다.
코딩 즐겁게! 🎉
