Desafio 4: IAM Capability Role para ArgoCD

Criar a IAM Role necessária para habilitar o ArgoCD como EKS Capability, seguindo o princípio de least-privilege.

O ArgoCD EKS Capability não roda nos seus worker nodes - ele roda no control plane gerenciado pela AWS. Para isso, a AWS precisa assumir uma role na sua conta. Essa role é chamada de IAM Capability Role e é o ponto de entrada de segurança de toda a integração.

Diferente de uma role comum, ela usa um service principal específico: capabilities.eks.amazonaws.com. Sem a trust policy correta, o ArgoCD simplesmente não consegue ser habilitado no cluster.

Além da trust policy, as permissões da role determinam o que o ArgoCD pode acessar: repositórios no CodeCommit, segredos no Secrets Manager, charts no ECR. O princípio é conceder apenas o que for necessário para o seu caso de uso.

  • Trust policy com o service principal capabilities.eks.amazonaws.com
  • Permissão para leitura de um repositório específico no CodeCommit (não wildcard)
  • Permissão para leitura de segredos no Secrets Manager (usar a managed policy correta)
  • Permissão para pull de charts no ECR

Crie a IAM Role ArgoCD-Capability-Role com as permissões mínimas descritas acima. Em seguida, habilite o ArgoCD Capability no seu cluster EKS usando essa role.

Dica: A trust policy precisa do sts:AssumeRole para o service principal correto. Consulte a documentação de segurança das EKS Capabilities  para o formato exato.

1. Trust Policy

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2. Criar a role

aws iam create-role \
  --role-name ArgoCD-Capability-Role \
  --assume-role-policy-document file://trust-policy.json

3. Permissão CodeCommit (repositório específico)

aws iam put-role-policy \
  --role-name ArgoCD-Capability-Role \
  --policy-name CodeCommitAccess \
  --policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Action": "codecommit:GitPull",
      "Resource": "arn:aws:codecommit:us-east-1:ACCOUNT_ID:meu-repo"
    }]
  }'

4. Permissão Secrets Manager

aws iam attach-role-policy \
  --role-name ArgoCD-Capability-Role \
  --policy-arn arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess

5. Permissão ECR

aws iam attach-role-policy \
  --role-name ArgoCD-Capability-Role \
  --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

6. Habilitar ArgoCD Capability no cluster

aws eks create-addon \
  --cluster-name meu-cluster \
  --addon-name argocd \
  --service-account-role-arn arn:aws:iam::ACCOUNT_ID:role/ArgoCD-Capability-Role

Quando você cria a Capability, a AWS automaticamente:

  • Instala os CRDs do ArgoCD no cluster (Application, ApplicationSet, AppProject)
  • Cria um Access Entry para a role com as policies AmazonEKSArgoCDClusterPolicy e AmazonEKSArgoCDPolicy
  • Disponibiliza a UI do ArgoCD via EKS Console em Clusters > Capabilities > Argo CD
# Verificar status da capability
aws eks describe-addon --cluster-name meu-cluster --addon-name argocd \
  --query 'addon.status'

# Verificar CRDs instalados
kubectl get crd | grep argoproj

# Verificar access entry criado automaticamente
aws eks list-access-entries --cluster-name meu-cluster
  • Avaliar se Secrets Manager é necessário ou se Kubernetes Secrets são suficientes para o seu caso de uso
  • Revisar as policies automáticas criadas pelo EKS no Access Entry e ajustar se necessário
  • Explorar o desafio de Cross-account para entender como a Capability Role é usada em deployments multi-conta