CollabOps

AWS

AWS 자격증명, ECR Docker 인증, EKS 클러스터 설정

AWS 템플릿은 체인 패턴을 따릅니다: 먼저 aws-auth로 인증한 후, 후속 Step에서 aws-ecr-auth 또는 aws-eks-setup을 사용합니다.

collabops/aws-auth@v1

On-Premise: ❌ — AWS SaaS 연결 필요

AWS 자격증명을 설정합니다. 후속 Step에서 AWS_SHARED_CREDENTIALS_FILE로 인증을 공유합니다.

InputRequiredDefaultDescription
access-key-idYES-AWS Access Key ID. $\{\{ secrets.AWS_ACCESS_KEY_ID \}\} 권장
secret-access-keyYES-AWS Secret Access Key. $\{\{ secrets.AWS_SECRET_ACCESS_KEY \}\} 권장
regionYES-AWS 리전 (예: ap-northeast-2)
role-arnNO""Assume할 IAM Role ARN (cross-account 접근 시)
session-nameNO"collabops-pipeline"STS Assume Role 세션 이름
config-pathNO"/workspace/source/.aws"AWS config 저장 경로

예시

기본 — Access Key 직접 사용

jobs:
  deploy:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      # 후속 Step 은 AWS_SHARED_CREDENTIALS_FILE 를 통해 자동으로 인증을 공유.
      - name: aws-auth
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${ secrets.AWS_ACCESS_KEY_ID }
          secret-access-key: ${ secrets.AWS_SECRET_ACCESS_KEY }
          region: ap-northeast-2
      - name: sanity-check
        run: aws sts get-caller-identity
        image: amazon/aws-cli:2.17.0

AssumeRole — 권한 최소화 + 교차계정

jobs:
  deploy:
    steps:
      - name: aws-auth-assumed-role
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${{ secrets.CI_BOOTSTRAP_AWS_AKID }}
          secret-access-key: ${{ secrets.CI_BOOTSTRAP_AWS_SECRET }}
          region: ap-northeast-2
          # 부트스트랩 키는 sts:AssumeRole 만 허용하고, 실제 권한은 role-arn 에 둠.
          role-arn: arn:aws:iam::123456789012:role/ci-deploy
          # session-name 은 CloudTrail 식별용. 커밋 SHA 를 그대로 사용.
          session-name: "collabops-${{ collabops.sha }}"

포인트 — 항상 인증 Step 을 가장 먼저 실행하고 같은 Job 에 둘 것 (Job 간 자격증명 공유 안 됨). 운영 권장: 부트스트랩 키는 sts:AssumeRole 만 허용 → role-arn 으로 실제 작업 권한 위임. region 은 후속 명령어들의 기본값이 됨 — 멀티리전 시에는 명령어마다 --region 명시.

collabops/aws-ecr-auth@v1

On-Premise: ❌ — AWS SaaS 연결 필요

AWS ECR Docker 인증을 설정합니다. aws-auth 이후 사용합니다.

InputRequiredDefaultDescription
regionYES-AWS 리전 (예: ap-northeast-2)
registry-idNO""ECR 레지스트리 ID (AWS 계정 ID). 미지정 시 현재 계정
config-pathNO"/workspace/source/.aws"AWS config 경로

예시

auth → ecr 인증 → docker push 풀체인

jobs:
  publish:
    services:
      - docker
    steps:
      - name: aws-auth
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          region: ap-northeast-2
      # 같은 계정의 모든 ECR 리포지토리 인증.
      - name: ecr-auth
        uses: "collabops/aws-ecr-auth@v1"
        with:
          region: ap-northeast-2
      - name: build-push-ecr
        uses: "collabops/docker-build-push@v1"
        with:
          tags: "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/api:${{ collabops.sha }}"

교차계정 ECR (registry-id 다른 계정)

jobs:
  publish:
    services:
      - docker
    steps:
      - name: aws-auth
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          region: ap-northeast-2
      # 호스팅 계정이 다를 때 registry-id 로 명시.
      - name: ecr-auth-cross-account
        uses: "collabops/aws-ecr-auth@v1"
        with:
          region: ap-northeast-2
          registry-id: "999988887777"
      - name: build-push
        uses: "collabops/docker-build-push@v1"
        with:
          tags: "999988887777.dkr.ecr.ap-northeast-2.amazonaws.com/shared/api:${{ collabops.sha }}"

포인트aws-auth 가 반드시 먼저. ECR 토큰 유효기간은 12시간이라 같은 Job 안에서만 사용. 리포지토리는 사전 생성 필요 — 템플릿이 자동 생성하지 않음. 교차계정 push 는 registry-id 와 대상 계정의 repo policy 양쪽이 맞아야 함.

collabops/aws-eks-setup@v1

On-Premise: ❌ — AWS SaaS 연결 필요

EKS 클러스터 인증 및 kubectl 컨텍스트를 설정합니다. aws-auth 이후 사용합니다.

InputRequiredDefaultDescription
regionYES-AWS 리전 (예: ap-northeast-2)
cluster-nameYES-EKS 클러스터 이름
role-arnNO""kubectl에서 사용할 IAM Role ARN
config-pathNO"/workspace/source/.aws"AWS config 경로

예시

EKS 클러스터 인증 + kubectl apply

jobs:
  deploy:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      - name: aws-auth
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          region: ap-northeast-2
      # kubeconfig 가 KUBECONFIG 환경변수로 후속 Step 에 자동 전달.
      - name: eks-setup
        uses: "collabops/aws-eks-setup@v1"
        with:
          region: ap-northeast-2
          cluster-name: prod-cluster
      - name: apply-manifests
        run: |
          kubectl apply -f k8s/namespace.yaml
          kubectl apply -f k8s/deployment.yaml
          kubectl -n prod rollout status deployment/api --timeout=5m
        image: bitnami/kubectl:1.30

kubectl 호출 시 별도 IAM Role assume

jobs:
  deploy:
    steps:
      - name: aws-auth
        uses: "collabops/aws-auth@v1"
        with:
          access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          region: ap-northeast-2
      - name: eks-setup-via-role
        uses: "collabops/aws-eks-setup@v1"
        with:
          region: ap-northeast-2
          cluster-name: prod-cluster
          # aws eks get-token --role-arn 으로 클러스터 접근 권한을 별도 Role 에 위임.
          # aws-auth ConfigMap 에 해당 role 이 등록되어 있어야 함.
          role-arn: arn:aws:iam::123456789012:role/eks-deployer
      - name: rollout
        run: kubectl -n prod set image deployment/api api=$IMAGE
        env:
          IMAGE: "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/api:${{ collabops.sha }}"
        image: bitnami/kubectl:1.30

포인트 — kubeconfig 가 자동으로 후속 Step 에 전달되므로 별도 export 불필요. 별도 권한으로 kubectl 을 호출하려면 role-arn 사용 — 단, EKS 의 aws-auth ConfigMap 에 해당 IAM Role 매핑이 등록되어 있어야 함. 운영 환경에서는 kubectl rollout status 로 배포 완료를 보장.

목차