유즈케이스 09 · 기계 주체

GitHub Actions OIDC 배포 (zandi.wiki)

DevOps가 한 번 설정하면 CI가 Secrets 없이 배포.

DevOps 관리자CI 파이프라인
STEP 1 / 6DevOps 관리자

DevOps: 1회 설정

dev 계정에 GitHub OIDC provider를 등록하고, github-deploy Role의 Trust에 repo · 브랜치 조건을 건다. dev × PlatformAdmin 세션이나 IaC로.

단계단계를 누르면 위 관계도가 그 단계로 바뀐다
  1. dev 계정에 GitHub OIDC provider를 등록하고, github-deploy Role의 Trust에 repo · 브랜치 조건을 건다. dev × PlatformAdmin 세션이나 IaC로.

    {
      "Effect": "Allow",
      "Principal": {"Federated": "arn:aws:iam::222222222222:oidc-provider/token.actions.githubusercontent.com"},
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"},
        "StringLike": {"token.actions.githubusercontent.com:sub": "repo:<owner>/zandi-wiki:ref:refs/heads/main"}
      }
    }
  2. main에 push되면 워크플로가 id-token: write 권한으로 GitHub가 서명한 JWT를 받는다.

    permissions:
      id-token: write
      contents: read
    steps:
      - uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::222222222222:role/github-deploy
          aws-region: ap-northeast-2
  3. JWT(iss, aud, sub = repo:<owner>/zandi-wiki:ref:refs/heads/main)를 STS에 제출.

  4. STS가 발급자 서명, aud = sts.amazonaws.com, sub 조건을 확인한다. 다른 브랜치나 포크 PR이면 여기서 거절.

  5. github-deploy Role 세션 발급. 잡이 끝나면 자연 만료.

  6. 빌드 결과를 버킷에 올리고 cloudfront:CreateInvalidation. 권한은 이 버킷 · 배포판으로만 한정.