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로 인증을 공유합니다.
| Input | Required | Default | Description |
|---|---|---|---|
access-key-id | YES | - | AWS Access Key ID. $\{\{ secrets.AWS_ACCESS_KEY_ID \}\} 권장 |
secret-access-key | YES | - | AWS Secret Access Key. $\{\{ secrets.AWS_SECRET_ACCESS_KEY \}\} 권장 |
region | YES | - | AWS 리전 (예: ap-northeast-2) |
role-arn | NO | "" | Assume할 IAM Role ARN (cross-account 접근 시) |
session-name | NO | "collabops-pipeline" | STS Assume Role 세션 이름 |
config-path | NO | "/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 이후 사용합니다.
| Input | Required | Default | Description |
|---|---|---|---|
region | YES | - | AWS 리전 (예: ap-northeast-2) |
registry-id | NO | "" | ECR 레지스트리 ID (AWS 계정 ID). 미지정 시 현재 계정 |
config-path | NO | "/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 이후 사용합니다.
| Input | Required | Default | Description |
|---|---|---|---|
region | YES | - | AWS 리전 (예: ap-northeast-2) |
cluster-name | YES | - | EKS 클러스터 이름 |
role-arn | NO | "" | kubectl에서 사용할 IAM Role ARN |
config-path | NO | "/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 로 배포 완료를 보장.