Skip to content

kro Capability

The kro capability enables creation of custom Kubernetes APIs that compose multiple resources into higher-level abstractions. Platform teams can define reusable patterns for common resource combinations, enabling self-service with appropriate guardrails.

This is the AWS-managed alternative to the self-managed KroAddOn. kro itself does not require AWS IAM permissions — it orchestrates Kubernetes resources only. AWS resource creation is handled by controllers like ACK.

Usage

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

const stack = blueprints.EksBlueprint.builder()
  .version("auto")
  .capabilities({
    kro: new blueprints.capabilities.KroCapability(),
  })
  .build(app, 'my-cluster');

Configuration

Property Type Default Description
capabilityName string blueprints-kro-capability Name for the capability resource
roleArn string Auto-created Existing IAM role ARN to use
policyName string - Custom managed policy name
policyDocument iam.PolicyDocument - Custom inline policy
additionalAccessPolicies IAccessPolicy[] - Additional EKS access policies for the capability role
tags CfnTag[] - CloudFormation tags

No default IAM policy is attached since kro doesn't interact with AWS APIs directly.

Additional Access Policies

When ResourceGraphDefinitions create resources, kro needs additional Kubernetes permissions. Use additionalAccessPolicies:

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

new blueprints.capabilities.KroCapability({
  additionalAccessPolicies: [
    eks.AccessPolicy.fromAccessPolicyName("AmazonEKSClusterAdminPolicy", {
      accessScopeType: eks.AccessScopeType.CLUSTER,
    }),
  ],
})

See Additional Access Policies for more details.

Using with ACK

kro is commonly paired with the ACK capability to create custom APIs that provision AWS resources:

const stack = blueprints.EksBlueprint.builder()
  .version("auto")
  .capabilities({
    ack: new blueprints.capabilities.AckCapability(),
    kro: new blueprints.capabilities.KroCapability(),
  })
  .build(app, 'my-cluster');

See the kro addon documentation for ResourceGraphDefinition examples.