Apache 2.0 · 1,061 kinds · 150+ AWS services · multi-account

AWS Infrastructure
as Kubernetes CRDs

Declare IAM roles, VPCs, RDS clusters, Lambda functions, KMS keys, ECR repositories, DynamoDB tables — 1,061 resource kinds across 150+ AWS services, in any number of AWS accounts — the same way you deploy applications: in YAML, in Git, with automatic drift correction.

1,061
Live CRDs
150+
AWS Services
5m
Drift Detection
1
Binary
kubectl — konfig-system
$ kubectl apply -f iam-role.yaml iamrole.aws.konfig.io/my-app-role created $ kubectl get iamrole my-app-role -n infra NAME READY AGE my-app-role True 12s $ kubectl get vpc prod-vpc -n infra NAME READY VPC-ID prod-vpc True vpc-0abc12def3456789
Why konfig-konector

Everything AWS. One operator.

Stop juggling multiple controllers. konfig-konector reconciles your entire AWS footprint from a single, lightweight binary.

One Operator, All of AWS

246 hand-written kinds plus 815 typed kinds generated from the CloudFormation schema registry and driven through the Cloud Control API — covering IAM, networking, compute, databases, storage, messaging, caching, DNS, EKS, Lambda, ECS, load balancing, ACM, KMS, Secrets Manager, ECR, DynamoDB, EventBridge, Cognito, WAF, SSM, and more — managed by a single pod.

Multi-Account, One Instance

Declare each AWS account as an AWSProvider and pick it per resource, per namespace, or as the default. Cross-account peering, Transit Gateway sharing, RAM invitations, private DNS and PrivateLink are completed on both sides and only report Ready when AWS confirms (WIP: cross-account paths are unit-tested; live second-account verification pending).

Typed Kinds for the Long Tail

815 kinds are generated from the CloudFormation schema registry and reconciled through the AWS Cloud Control API, with typed, validated specs and read-only status. Install them per service bundle; the operator only runs controllers for the CRDs you install. Coverage is measured against the Terraform AWS provider, not hand-counted.

Drift Detection Built In

Every resource is re-reconciled every 5 minutes. If someone manually changes an AWS resource, the controller reverts it automatically.

EKS Pod Identity Native

No long-lived keys, no IRSA annotations. The operator authenticates via EKS Pod Identity — temporary credentials rotated automatically.

GitOps Ready

CRDs are just YAML. Declare your AWS infrastructure alongside your application manifests and manage it with Argo CD or Flux — no separate pipelines. A one-line Argo CD health customization maps every kind's Ready condition to Healthy or Progressing, so AWS errors surface in the UI.

Secrets Stay Secrets

Database passwords are read from Kubernetes Secrets at reconcile time and never written to status fields, logs, or events.

Cross-Resource References

Reference other CRs by name. The controller waits automatically until dependencies are provisioned before proceeding.

Supported Resources

1,061 kinds across 150+ AWS services

All resources use the API group aws.konfig.io/v1alpha1. The grid below is a curated selection — run konfig-export --list for the native kinds. GA = hand-written controller  ·  CLOUD CONTROL = typed kind generated from the CloudFormation schema, installed per service bundle  ·  ⚠ DESTRUCTIVE SCOPE = account-, region- or organization-wide setting, provided for completeness, not for application namespaces. Billing, invoicing and cost-report kinds are deliberately excluded; see the coverage policy.

IAMRoleGA

Creates and manages IAM roles including trust policies, permissions boundaries, and tags.

IAMPolicyGA

Manages customer-managed IAM policies and their document versions.

IAMPolicyAttachmentGA

Attaches a managed policy to an IAM role. Supports CR references or direct ARNs.

IAMRolePolicyGA

Inline policy embedded directly on an IAM role.

PodIdentityAssociationGA

Links a Kubernetes ServiceAccount to an IAM role via EKS Pod Identity. Optionally annotates the ServiceAccount.

IAMUserGA

IAM user with path, permissions boundary, and tag sync. Does not manage access keys.

IAMGroupGA

IAM group with path. Membership and policy attachments managed via dedicated CRs.

IAMGroupPolicyAttachmentGA

Attaches a managed policy to an IAM group. Supports CR references or direct ARNs.

IAMGroupMembershipGA

Adds an IAM user to an IAM group. Supports CR references or direct names.

IAMSAMLProviderGA

SAML identity provider for federated authentication. Metadata drift detection included.

IAMOIDCProviderGA

OpenID Connect provider for workload identity federation. Delta sync for thumbprints and client IDs.

VPCGA

VPC with DNS support/hostnames, instance tenancy, Amazon-provided IPv6 CIDR block, and secondary IPv4 CIDR management.

SubnetGA

Creates a subnet in a VPC. Supports mapPublicIpOnLaunch and AZ selection.

InternetGatewayGA

Creates and attaches an IGW to the referenced VPC. Detaches automatically on delete.

RouteTableGA

Route table with subnet associations. Reconciles individual routes and disassociates subnets on delete.

NatGatewayGA

Allocates an Elastic IP and creates a NAT Gateway. Async — polls until available.async

SecurityGroupGA

Security group with ingress/egress rules supporting IPv4 CIDR, IPv6 CIDR, prefix lists, and SG references — all with per-rule descriptions.

VPCEndpointGA

Interface or Gateway VPC endpoints for AWS services (S3, DynamoDB, etc.).

ElasticIPGA

Allocates a VPC Elastic IP address. Stores the AllocationID and public IP in status.

EIPAssociationGA

Associates an Elastic IP with an EC2 instance or network interface. References ElasticIP CRs or direct allocation IDs.

NetworkACLGA

Stateless subnet-level firewall with numbered inbound and outbound rules. Fully reconciles rule entries on every sync.

TransitGatewayGA

AWS Transit Gateway for hub-and-spoke VPC connectivity at scale.

TransitGatewayVpcAttachmentGA

Attaches a VPC to a Transit Gateway with subnet selection and route table association.

VPCPeeringConnectionGA

Peering connection between two VPCs with auto-accept support for same-account peers.

EgressOnlyIGWGA

IPv6 egress-only internet gateway for private subnets.

FlowLogGA

VPC Flow Logs capturing network traffic metadata to S3 or CloudWatch Logs.

KeyPairGA

EC2 key pair. Private key returned only at creation time and not stored in status.

LaunchTemplateGA

EC2 launch template. Creates new versions on spec change rather than replacing the template.

AutoScalingGroupGA

ASG with LaunchTemplate reference, scaling config, and subnet placement.

EC2InstanceGA

Single EC2 instance. Stores instance ID in status and terminates on delete.async

PlacementGroupGA

EC2 placement group for cluster, partition, or spread strategies.

ScalingPolicyGA

Target tracking, step, or simple scaling policy attached to an Auto Scaling Group.

SpotFleetGA

Spot Fleet request maintaining target capacity across instance types and AZs.

EBSVolumeGA

EBS volume with type, size, encryption, and optional attachment to an EC2 instance.

AMIGA

Custom AMI registration from a snapshot or existing instance. Manages deregistration lifecycle.

DBSubnetGroupGA

RDS subnet group referencing Subnet CRs or direct subnet IDs.

DBParameterGroupGA

RDS parameter group for DB instances. Supports apply method per parameter.

DBClusterParameterGroupGA

RDS cluster-level parameter group for Aurora clusters.

DBInstanceGA

RDS DB instance with full options: storage autoscaling, backup/maintenance windows, Performance Insights, Enhanced Monitoring, CloudWatch log exports, IAM auth, auto minor version upgrades, and IOPS/throughput settings.async

DBClusterGA

Aurora cluster with full config: backup/maintenance windows, CloudWatch exports, IAM auth, HTTP endpoint, engine mode (including Serverless v2 scaling config), backtrack window, network type, Performance Insights, and storage type.async

DBOptionGroupGA

RDS option group enabling engine-specific features such as Oracle OEM, SQL Server TDE, and MariaDB audit plugin.

DBSnapshotGA

Manual RDS snapshot with cross-region copy and share support.

DBProxyGA

RDS Proxy for connection pooling and failover management.

S3BucketGA

S3 bucket with full feature parity: versioning, SSE, block public access, lifecycle rules, CORS, event notifications (Lambda/SQS/SNS/EventBridge), static website hosting, Transfer Acceleration, Object Lock, server access logging, and tagging.

S3BucketPolicyGA

Resource-based IAM policy attached to an S3 bucket. References bucket by CR name or direct name.

S3BucketNotificationGA

Bucket event notifications to SQS, SNS, or Lambda on object create/delete.

S3BucketCORSGA

CORS configuration for web browser access to S3 bucket objects.

S3BucketLifecycleGA

Lifecycle rules for transitioning objects to Glacier or expiring old versions.

S3BucketReplicationGA

Cross-region or same-region replication configuration between S3 buckets.

EFSFileSystemGA

Elastic File System with performance mode, throughput mode, and KMS encryption.

EFSMountTargetGA

EFS mount target in a specific subnet and security group.

EFSAccessPointGA

EFS access point with POSIX user/group and root directory config for application isolation.

SQSQueueGA

Standard or FIFO SQS queue with visibility timeout, retention period, and redrive policy.

SNSTopicGA

SNS topic (standard or FIFO) with optional KMS encryption and resource policy.

SNSSubscriptionGA

Subscribes an endpoint (SQS, Lambda, HTTPS, email) to an SNS topic.

EventBusGA

Custom EventBridge event bus for decoupled event routing between services and accounts.

EventRuleGA

EventBridge rule matching scheduled or pattern-based events. References EventBus CRs and supports cron/rate expressions.

EventTargetGA

Wires targets (Lambda, SQS, SNS, Kinesis, Step Functions) to an EventBridge rule. Supports input transformation and IAM role ARN.

EventBridgePipeGA

Pipes connecting event sources to targets with optional filtering and enrichment.

SESEmailIdentityGA

SES domain or email address identity with DKIM and MAIL FROM configuration.

SESConfigurationSetGA

SES configuration set for tracking opens, clicks, bounces, and complaints.

ElastiCacheSubnetGroupGA

Subnet group for ElastiCache clusters. Cannot be deleted while in use by a replication group.

ElastiCacheReplicationGroupGA

Redis or Valkey replication group with automatic failover, TLS, and at-rest encryption.async

ElastiCacheParameterGroupGA

ElastiCache parameter group for Redis or Memcached engine configuration.

ElastiCacheServerlessCacheGA

ElastiCache Serverless cache that auto-scales capacity without managing nodes.async

MemoryDBClusterGA

MemoryDB for Redis cluster with multi-AZ durability and strong consistency.async

DAXClusterGA

DynamoDB Accelerator in-memory cache cluster with microsecond latency.

HostedZoneGA

Route 53 hosted zone (public or private). Deletion blocked if non-NS/SOA records exist.

RecordSetGA

DNS record set. Supports A, AAAA, CNAME, TXT, MX, alias records, and weighted routing.

HealthCheckGA

Route 53 health check (HTTP, HTTPS, TCP) with configurable interval and failure threshold.

ResolverRuleGA

Route 53 Resolver forwarding rule for hybrid DNS between on-premises and VPC.

ResolverEndpointGA

Inbound or outbound resolver endpoint with ENIs in specified subnets.

DelegationSignerRecordGA

DNSSEC delegation signer records for child hosted zones.

EKSClusterGA

EKS control plane with VPC config, logging, encryption, access config, Kubernetes network config (serviceIPv4CIDR, IP family), upgrade support policy, and bootstrap add-ons control.async 10–15m

EKSNodeGroupGA

Managed node group with scaling config, instance types, AMI type, capacity type, disk size, labels, taints, update config, launch template, remote access, and node repair config.async 3–5m

EKSAddonGA

EKS cluster addon (vpc-cni, kube-proxy, coredns, ebs-csi, etc.). Adopts pre-existing addons.

EKSFargateProfileGA

Fargate profile with namespace + label selectors for serverless pods.async ~2m

EKSAccessEntryGA

Maps an IAM principal to Kubernetes RBAC groups or cluster-access policies. Requires API auth mode.

EKSIdentityProviderConfigGA

OIDC identity provider configuration for Kubernetes authentication.

LambdaFunctionGA

Lambda function from S3 or container image with full config: runtime, handler, memory, timeout, VPC, layers, DLQ, X-Ray tracing, CloudWatch logging config, EFS mounts, SnapStart, container image config, and reserved concurrency.

LambdaEventSourceMappingGA

Wires an SQS queue, DynamoDB stream, or Kinesis stream to trigger a Lambda function.

LambdaPermissionGA

Resource-based policy statement allowing a service or account to invoke a Lambda function.

LambdaAliasGA

Lambda function alias pointing to a specific version with optional weighted traffic splitting.

LambdaLayerVersionGA

Lambda layer version for shared dependencies, runtimes, and configuration.

LambdaCodeSigningConfigGA

Code signing configuration ensuring only trusted code is deployed to Lambda.

LambdaFunctionURLGA

Lambda function URL providing a dedicated HTTPS endpoint without API Gateway.

ECSClusterGA

ECS cluster with capacity providers (FARGATE, FARGATE_SPOT, EC2).

ECSTaskDefinitionGA

Task definition with container definitions, CPU/memory, execution role, and log groups. Registers new revision on change.

ECSServiceGA

Long-running ECS service with desired count, load balancer config, and deployment circuit breaker.

ECSCapacityProviderGA

Capacity provider linking an Auto Scaling Group to an ECS cluster with managed scaling.

ECSScheduledTaskGA

Scheduled ECS task backed by EventBridge with cron or rate expression.

LoadBalancerGA

Application, Network, or Gateway Load Balancer with scheme, subnets, security groups, and attribute config.async

TargetGroupGA

Target group for routing to instances, IPs, Lambda, or ALB with health check config and stickiness.

ListenerGA

Load balancer listener with protocol, port, default forward/redirect/fixed-response actions, and SSL certificates.

ListenerRuleGA

Routing rule on an ALB listener based on host, path, header, or query conditions. References Listener CRs.

CertificateGA

ACM TLS certificate with DNS or email validation. Stores ARN and CertificateStatus in status.async

CertificateValidationGA

Polls an ACM Certificate until it reaches ISSUED state. Useful as a dependency gate for Listener CRs.

CloudFrontDistributionGA

CloudFront distribution with origins, cache behaviors, and SSL certificate.async ~15m

CloudFrontOriginAccessControlGA

OAC for granting CloudFront access to S3 origins without public bucket policies.

CloudFrontCachePolicyGA

Reusable cache policy controlling TTLs and cache key components.

CloudFrontFunctionGA

Lightweight JavaScript function running at the edge for URL rewrites and header manipulation.

SecretGA

Secrets Manager secret with optional KMS key, tags, and configurable recovery window. Value sourced from Kubernetes Secret.

SecretRotationGA

Automatic rotation schedule for a Secrets Manager secret using a Lambda rotation function. References Secret CRs.

SSMParameterGA

Systems Manager Parameter Store value (String, StringList, SecureString) with KMS encryption and tier selection.

SSMDocumentGA

SSM automation or command document for fleet operations and instance configuration.

KMSKeyGA

Customer-managed KMS key with key policy, optional automatic rotation, multi-region support, and scheduled deletion.

KMSAliasGA

Human-readable alias pointing to a KMS key for easier key reference. References KMSKey CRs.

KMSKeyPolicyGA

Sets the key policy document for a KMS key. References KMSKey CRs or direct key IDs.

KMSGrantGA

Grants specific KMS operations to a grantee principal on a per-key basis.

CloudFormationStackGA

CloudFormation stack from S3 template URL with parameters and rollback config.async

CloudFormationStackSetGA

StackSet for deploying CloudFormation stacks across multiple accounts and regions.

LogGroupGA

CloudWatch Logs group with configurable retention period and optional KMS encryption.

MetricFilterGA

Extracts metric values from log events and publishes them as custom CloudWatch metrics. References LogGroup CRs.

SubscriptionFilterGA

Subscription filter streaming log events to Lambda, Kinesis, or Firehose. References LogGroup CRs.

CloudWatchAlarmGA

Metric alarm triggering SNS notifications or Auto Scaling actions on threshold breach.

CloudWatchDashboardGA

CloudWatch dashboard with widgets defined as JSON body.

CompositeAlarmGA

Composite alarm combining multiple alarms with AND/OR logic.

ECRRepositoryGA

ECR private repository with image scanning, tag mutability, and KMS encryption. Stores ARN and repository URI in status.

ECRRepositoryPolicyGA

Resource-based policy granting cross-account pull access to an ECR repository. References ECRRepository CRs.

ECRLifecyclePolicyGA

Lifecycle policy expiring old or untagged images to control storage costs. References ECRRepository CRs.

ECRPullThroughCacheRuleDEV

Pull-through cache rule proxying public registries (Docker Hub, ECR Public, GCR) through ECR.

DynamoDBTableGA

DynamoDB table with partition key, sort key, GSIs, billing mode, SSE, and optional point-in-time recovery.

DynamoDBGlobalTableGA

Multi-region active-active DynamoDB global table with replica region configuration.

DynamoDBBackupGA

On-demand DynamoDB backup with point-in-time recovery support.

DynamoDBTablePolicyGA

Resource-based policy for cross-account access to a DynamoDB table.

UserPoolGA

Cognito User Pool with password policy, MFA configuration, email/phone auto-verification, and schema attributes.

UserPoolClientGA

App client for a Cognito User Pool. Configures OAuth flows, allowed scopes, callback URLs, and token validity. References UserPool CRs.

IdentityProviderGA

Federated identity provider (SAML, OIDC, social) attached to a Cognito User Pool. References UserPool CRs.

KinesisStreamGA

Kinesis Data Stream with shard count or on-demand capacity mode and KMS encryption.

KinesisStreamConsumerGA

Enhanced fan-out consumer for a Kinesis stream with dedicated throughput.

FirehoseDeliveryStreamGA

Kinesis Firehose delivery stream to S3, Redshift, OpenSearch, or HTTP endpoint.async

MSKClusterGA

Amazon MSK (Managed Kafka) cluster with broker config, storage, and TLS settings.async ~30m

MSKServerlessClusterGA

Serverless MSK cluster that scales automatically without managing brokers.async

MSKConfigurationGA

Reusable MSK configuration with Kafka broker properties.

OpenSearchDomainGA

OpenSearch Service domain with instance type, EBS, encryption, and VPC config.async ~15m

OpenSearchServerlessCollectionGA

OpenSearch Serverless collection with security policies and auto-scaling.async

OpenSearchAccessPolicyGA

Data access policy granting principals permissions on OpenSearch Serverless collections.

WebACLGA

WAFv2 Web ACL (REGIONAL or CLOUDFRONT scope) with managed rule groups, custom rules, and default allow/block action. Stores LockToken for safe updates.

IPSetGA

WAFv2 IP set of IPv4/IPv6 CIDRs used in WAF rules for allow or block matching. Stores LockToken for safe updates.

WAFRegexPatternSetGA

Regex pattern set for matching request components in WAF rules.

WAFRuleGroupGA

Reusable rule group that can be referenced from multiple Web ACLs.

ShieldProtectionGA

AWS Shield Advanced protection for a specific resource ARN.

StateMachineGA

Step Functions state machine (Standard or Express) with ASL definition and IAM role.

ActivityGA

Step Functions activity for worker-based task execution.

CodePipelineGA

CI/CD pipeline with source, build, and deploy stages across AWS and third-party providers.

CodeBuildProjectGA

CodeBuild project with build environment, source, artifacts, and cache config.

CodeDeployApplicationGA

CodeDeploy application for EC2, Lambda, or ECS blue/green deployments.

CodeDeployDeploymentGroupGA

Deployment group with traffic routing config, alarms, and rollback settings.

CodeCommitRepositoryGA

CodeCommit Git repository with triggers and approval rule templates.

Installation

Up and running in three steps

Bootstrap the operator IAM role with Terraform, install with Helm, then start declaring resources. Or try everything locally first with one script.

1
Bootstrap IAM Role (Terraform)
# terraform/accounts/dev/terraform.tfvars
account_id   = "123456789012"
cluster_name = "dev-eks"
environment  = "dev"
allowed_iam_resource_paths = "/"

$ terraform init \
    -backend-config=accounts/dev/backend.conf
$ terraform apply \
    -var-file=accounts/dev/terraform.tfvars
2
Install with Helm
$ git clone https://github.com/\
    konfig-io/konfig-konector.git
$ helm install konfig-konector \
  ./konfig-konector/helm/konfig-konector \
  --namespace konfig-system \
  --create-namespace \
  --set image.repository=<your-registry>/konfig-konector \
  --set aws.region=us-east-1 \
  --set operatorRoleArn=\
    arn:aws:iam::123456789012:\
    role/dev-konfig-konector-operator

# Verify
$ kubectl get pods -n konfig-system
NAME                          READY
konfig-konector-xxx-yyy       1/1
3
Declare your first resource
apiVersion: aws.konfig.io/v1alpha1
kind: IAMRole
metadata:
  name: my-app-role
  namespace: my-team
spec:
  roleName: Prod-my-app-role
  assumeRolePolicyDocument: |
    {"Version":"2012-10-17",
    "Statement":[{"Effect":"Allow",
    "Principal":{"Service":
    "pods.eks.amazonaws.com"},
    "Action":["sts:AssumeRole",
    "sts:TagSession"]}]}
  tags:
    team: my-team

$ kubectl apply -f role.yaml
$ kubectl get iamrole my-app-role \
    -n my-team -o yaml
4
Or try it locally: k3s + Argo CD + smoke test
# k3d cluster, in-cluster registry, Argo CD, operator — nothing pushed anywhere
$ AWS_PROFILE=scratch ./scripts/local-dev.sh up

# 93 free-tier resources as an Argo Application (IAM, VPC, SQS, DynamoDB,
# Logs, generated Cloud Control kinds...) — watch them turn green
$ ./scripts/local-dev.sh smoke
$ ./scripts/local-dev.sh argo-ui

# install more generated kinds, then clean up (deletes the AWS resources)
$ ./scripts/local-dev.sh bundles ec2 logs iam
$ ./scripts/local-dev.sh unsmoke
Architecture

How it fits into your cluster

YAML in Git
kubectl apply / Argo
konfig-konector
controller-runtime
Pod Identity
temp credentials
AWS APIs
IAM · EC2 · RDS · …
Watch
Kubernetes API server notifies on CR changes
Describe
Fetch live AWS state — no caching
Reconcile
Create or update to match spec
Status
Write ARN/ID + Ready condition to CR
Reconcile Loop

Predictable. Idempotent. Safe.

Every controller follows the same 5-step loop. You can read any controller in the codebase and immediately understand it.

1

Fetch the CR

Read the current CR from the Kubernetes API. If it's gone, return immediately — nothing to do.

2

Handle deletion

If deletionTimestamp is set, call the AWS delete API and remove the finalizer. The CR stays visible in Kubernetes until AWS confirms deletion.

3

Ensure finalizer

Add aws.konfig.io/finalizer if not present. This prevents the CR from being garbage-collected before the AWS resource is deleted.

4

Describe AWS state

Fetch the live AWS resource. If it doesn't exist, create it. If it does, compare spec against current state and apply only the delta — gated on observedGeneration to avoid expensive no-op API calls.

5

Update status & requeue

Write ARN/ID, Ready: True, and lastSyncTime to the CR status. Requeue after 5 minutes for drift detection.

Comparison

Why not ACK or Crossplane?

Feature konfig-konector AWS Controllers (ACK) Crossplane
Single binary for all services ✓ ✗ one pod per service partial providers
Multi-account from one instance ✓ AWSProvider per resource, namespace, or default ✗ ProviderConfig
Two-sided cross-account handshakes (peering, TGW, RAM, Route 53, PrivateLink) WIP implemented, second-account verification pending ✗ ✗
Long-tail coverage ✓ 815 typed kinds from CloudFormation via Cloud Control per-service controllers upjet from Terraform
EKS Pod Identity native auth ✓ IRSA only IRSA only
IAM role & policy management ✓ full ✓ limited ✓
EKS Pod Identity associations ✓ ✗ ✗
Route53 + health checks ✓ ✗ community
Automatic drift correction ✓ 5-min cycle ✓ ✓
Generation-gated updates ✓ ✗ ✗
Cross-resource CR references ✓ some ✓ Compositions
GitOps / ArgoCD compatible ✓ ✓ ✓
Reference Documentation

Everything documented

Full API reference for every CRD — spec fields, status fields, deletion behavior, and examples.