Skip to content

ArgoCD Capability

The ArgoCD capability enables GitOps-based continuous deployment, automatically syncing application resources to clusters from Git repositories. It integrates with AWS Identity Center for authentication and authorization.

This is the AWS-managed alternative to the self-managed ArgoCDAddOn. Using both on the same cluster will result in a conflict error.

Usage

import * as blueprints from '@aws-quickstart/eks-blueprints';

const stack = blueprints.EksBlueprint.builder()
  .version("auto")
  .capabilities({
    argocd: new blueprints.capabilities.ArgoCapability({
      idcInstanceArn: "arn:aws:sso:::instance/ssoins-1234567890abcdef",
    }),
  })
  .build(app, 'my-cluster');

Configuration

Property Type Default Description
idcInstanceArn string Required AWS Identity Center instance ARN
idcManagedApplicationArn string - IDC managed application ARN
idcRegion string - IDC region
capabilityName string blueprints-argocd-capability Name for the capability resource
namespace string argocd Kubernetes namespace for ArgoCD
serverUrl string - ArgoCD server URL
networkAccessVpcEndpoints IVpcEndpoint[] - VPC endpoints for network access
roleMappings ArgoRoleMappings - SSO role-to-identity mappings
registerLocalCluster boolean true Register the local cluster as an ArgoCD deployment target
additionalAccessPolicies IAccessPolicy[] - Additional EKS access policies to associate with the capability role (see Additional Access Policies)
roleArn string Auto-created Existing IAM role ARN
tags CfnTag[] - CloudFormation tags

The default IAM policy is AWSSecretsManagerClientReadOnlyAccess.

Role Mappings

Map AWS Identity Center users or groups to ArgoCD RBAC roles. Two approaches:

Simplified props:

new blueprints.capabilities.ArgoCapability({
  idcInstanceArn: "arn:aws:sso:::instance/ssoins-1234567890abcdef",
  roleMappings: {
    adminUsers: ["<sso-user-id>"],
    viewerGroups: ["<sso-group-id>"],
    editorUsers: ["<sso-user-id>"],
  },
})

Builder methods:

new blueprints.capabilities.ArgoCapability({
  idcInstanceArn: "arn:aws:sso:::instance/ssoins-1234567890abcdef",
})
.addAdmin("<sso-user-id>", blueprints.SsoIdentityType.SSO_USER)
.addViewer("<sso-group-id>", blueprints.SsoIdentityType.SSO_GROUP)
.addEditor("<sso-user-id>", blueprints.SsoIdentityType.SSO_USER)

Both approaches can be combined — mappings are merged at deploy time.

Local Cluster Registration

To deploy applications to the same cluster where ArgoCD is running, set registerLocalCluster: true (default). This creates a Kubernetes Secret that registers the cluster as an ArgoCD deployment target:

new blueprints.capabilities.ArgoCapability({
  idcInstanceArn: "arn:aws:sso:::instance/ssoins-1234567890abcdef",
  registerLocalCluster: true,
})

Additional Access Policies

The built-in ArgoCD policies (AmazonEKSArgoCDClusterPolicy and AmazonEKSArgoCDPolicy) only grant permission to manage ArgoCD's own objects — Applications, AppProjects, secrets in the argocd namespace, and CRD installation. They do not cover the workload resources that ArgoCD syncs (Deployments, Services, CRDs, ACK resources, etc.). Without additional permissions, Application syncs will fail with RBAC errors.

For most ArgoCD deployments, you need AmazonEKSClusterAdminPolicy at cluster scope:

import * as eks from 'aws-cdk-lib/aws-eks';

new blueprints.capabilities.ArgoCapability({
  idcInstanceArn: "arn:aws:sso:::instance/ssoins-1234567890abcdef",
  additionalAccessPolicies: [
    eks.AccessPolicy.fromAccessPolicyName("AmazonEKSClusterAdminPolicy", {
      accessScopeType: eks.AccessScopeType.CLUSTER,
    }),
  ],
})

This is especially necessary when ArgoCD deploys ACK custom resources (e.g., s3.services.k8s.aws/Bucket) or KRO ResourceGroupDefinitions, as those are cluster-scoped or belong to non-standard API groups.

See Additional Access Policies for the full list of available policies and when to use each one.

Accessing the ArgoCD UI

After deploying the capability, the ArgoCD access URL is available as a CloudFormation output named ArgoCDCapabilityAccessURL. Retrieve it with:

aws cloudformation describe-stacks --stack-name <stack-name> \
  --query "Stacks[0].Outputs[?contains(OutputKey,'ArgoCDCapabilityAccessURL')].OutputValue" \
  --output text

Open the URL in your browser and sign in with your AWS Identity Center credentials. Access is governed by the role mappings configured above.

Available roles: ADMIN, EDITOR, VIEWER.