AWS CLI로 Argo CD 캐퍼빌리티 생성

AWS CLI로 Argo CD 캐퍼빌리티 생성

AWS CLI를 사용해 Amazon EKS 클러스터에 Argo CD 캐퍼빌리티를 생성하는 방법을 설명합니다. 이 절차는 IAM 역할 생성, AWS Identity Center 통합 구성, 캐퍼빌리티 활성 확인을 안내합니다.

출처: 문서

본문

사전 요구 사항

  • AWS CLI - 버전 2.12.3 이상. 버전을 확인하려면 aws --version을 실행하세요. 자세한 내용은 AWS Command Line Interface 사용자 가이드의 설치를 참고하세요.
  • kubectl - Kubernetes 클러스터 작업용 명령줄 도구. 자세한 내용은 Set up kubectl and eksctl을 참고하세요.
  • AWS Identity Center 구성 - Argo CD는 인증을 위해 AWS Identity Center가 필요합니다. 로컬 사용자는 지원되지 않습니다. AWS Identity Center가 설정되어 있지 않으면 AWS Identity Center 시작하기를 참고해 Identity Center 인스턴스를 만들고, 사용자 추가 및 그룹 추가를 참고해 Argo CD 접근용 사용자와 그룹을 만드세요.
  • AWS Identity Center에 사용자나 그룹이 하나 이상 있어야 함 - Argo CD RBAC 역할 매핑을 할당하고 Argo CD UI 접근을 제공하려면 Identity Center 인스턴스에 구성된 사용자나 그룹이 하나 이상 있어야 합니다.

1단계: IAM 캐퍼빌리티 역할 생성

신뢰 정책 파일을 만듭니다.

cat > argocd-trust-policy.json

참고

AWS Secrets Manager나 AWS CodeConnections와의 선택적 통합을 사용할 계획이라면 역할에 권한을 추가하세요. IAM 정책 예시와 구성 안내는 AWS Secrets Manager로 애플리케이션 시크릿 관리와 AWS CodeConnections로 Git 리포지토리 연결을 참고하세요.

(선택) 프라이빗 엔드포인트 구성

기본적으로 Argo CD UI와 API 엔드포인트는 인터넷을 통해 공개적으로 접근할 수 있습니다. 접근을 제한해야 한다면 VPC 엔드포인트를 구성할 수 있습니다. 이는 네트워크 보안 요구 사항이 엄격한 환경에 권장됩니다.

EKS 캐퍼빌리티용 VPC 엔드포인트 생성

VPC에 EKS 캐퍼빌리티 서비스용 인터페이스 VPC 엔드포인트를 생성합니다. vpc-id, subnet-id-1 subnet-id-2, sg-id, region-code를 자신의 값으로 바꾸세요.

aws ec2 create-vpc-endpoint \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.region-code.eks-capabilities \
  --vpc-id vpc-id \
  --subnet-ids subnet-id-1 subnet-id-2 \
  --security-group-ids sg-id \
  --region region-code

참고

고가용성을 위해 서브넷은 서로 다른 가용 영역에 있어야 합니다. 보안 그룹은 Argo CD UI와 API에 접근해야 하는 네트워크에서 인바운드 HTTPS(포트 443) 트래픽을 허용해야 합니다.

이 명령이 반환하는 VPC 엔드포인트 ID를 기록해 두세요. 캐퍼빌리티를 만들 때 필요합니다.

VPC 엔드포인트가 사용 가능한지 확인

aws ec2 describe-vpc-endpoints \
  --vpc-endpoint-ids vpce-xxxxxxxx \
  --query 'VpcEndpoints[0].State' \
  --output text \
  --region region-code

상태가 available로 표시될 때까지 기다린 후 진행하세요.

2단계: Argo CD 캐퍼빌리티 생성

클러스터에 Argo CD 캐퍼빌리티 리소스를 생성합니다.

먼저 Identity Center 구성에 대한 환경 변수를 설정합니다.

# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region region-code --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region region-code \
  --identity-store-id $(aws sso-admin list-instances --region region-code --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==your-username].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"

Identity Center 통합으로 캐퍼빌리티를 생성합니다. region-code를 클러스터가 있는 AWS 리전으로, my-cluster를 클러스터 이름으로, idc-region-code를 Identity Center 인스턴스가 있는 리전 코드로 바꾸세요.

aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'idc-region-code'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'

프라이빗 접근용 VPC 엔드포인트를 구성했다면 network-configuration 매개변수를 포함해 프라이빗 엔드포인트로 캐퍼빌리티를 생성하세요. vpce-xxxxxxxx를 VPC 엔드포인트 ID로 바꾸세요.

aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --network-configuration '{
    "elasticNetworkInterfaces": {
      "vpcEndpointId": "'vpce-xxxxxxxx'"
    }
  }' \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'idc-region-code'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'

명령은 즉시 반환되지만, EKS가 필요한 캐퍼빌리티 인프라와 구성 요소를 만드는 동안 캐퍼빌리티가 활성 상태가 되기까지 시간이 걸립니다. EKS는 캐퍼빌리티 생성 중에 Kubernetes 커스텀 리소스 정의(CRD)를 클러스터에 설치합니다.

참고

클러스터가 존재하지 않거나 권한이 없다는 오류가 발생하면 다음을 확인하세요.

  • 클러스터 이름이 올바른지
  • AWS CLI가 올바른 리전으로 구성되었는지
  • 필요한 IAM 권한이 있는지

3단계: 캐퍼빌리티 활성 확인

캐퍼빌리티가 활성화될 때까지 기다립니다. region-code를 클러스터가 있는 AWS 리전으로, my-cluster를 클러스터 이름으로 바꾸세요.

aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --query 'capability.status' \
  --output text

상태가 ACTIVE로 표시되면 캐퍼빌리티가 준비된 것입니다. 상태가 ACTIVE가 될 때까지 기다린 후 다음 단계로 진행하세요.

전체 캐퍼빌리티 상세 정보도 확인할 수 있습니다.

aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd

4단계: 커스텀 리소스 사용 가능 확인

캐퍼빌리티가 활성화된 후, 클러스터에서 Argo CD 커스텀 리소스를 사용할 수 있는지 확인합니다.

kubectl api-resources | grep argoproj.io

Application과 ApplicationSet 리소스 유형이 나열된 것을 확인할 수 있어야 합니다.

다음 단계

  • Argo CD 사용하기 - 리포지토리 구성, 클러스터 등록, Application 생성
  • Argo CD 고려 사항 - 멀티 클러스터 아키텍처와 고급 구성
  • 캐퍼빌리티 리소스 다루기 - Argo CD 캐퍼빌리티 리소스 관리

더 알아보기 (Learn more)