konfig-konector API Reference
48 live CRDs covering IAM, Networking, Compute, Database, Storage, Messaging, ElastiCache, Route53, EKS, Lambda, and ECS.
All resources use the API group aws.konfig.io/v1alpha1.
aws.konfig.io/v1alpha1
IAM (11 kinds)
Compute (4 kinds)
Database (RDS) (5 kinds)
Storage (S3) (2 kinds)
Messaging (3 kinds)
Route53 / DNS (3 kinds)
Lambda & ECS (6 kinds)
All Live Resources
| Kind | AWS Service | Async | Deletion Behavior |
|---|---|---|---|
| IAMRole | IAM | Detaches policies, deletes inline policies, then deletes role | |
| IAMPolicy | IAM | Fails if policy is still attached — delete attachments first | |
| IAMPolicyAttachment | IAM | Immediate — detaches the policy | |
| IAMRolePolicy | IAM | Immediate — deletes the inline policy | |
| PodIdentityAssociation | EKS / IAM | Immediate | |
| IAMUser | IAM | Fails if user has policies, memberships, or access keys | |
| IAMGroup | IAM | Fails if group has users or attached policies | |
| IAMGroupPolicyAttachment | IAM | Immediate | |
| IAMGroupMembership | IAM | Immediate | |
| IAMSAMLProvider | IAM | Immediate | |
| IAMOIDCProvider | IAM | Immediate | |
| VPC | EC2 | Fails if VPC has subnets, SGs, route tables, or gateways | |
| Subnet | EC2 | Fails if subnet has ENIs attached | |
| InternetGateway | EC2 | Detaches from VPC first, then deletes | |
| RouteTable | EC2 | Disassociates subnets first, then deletes (main RT is no-op) | |
| NatGateway | EC2 | ~60–90s | Async — polls until deleted, then releases EIP |
| SecurityGroup | EC2 | Fails if SG is in use by ENIs or referenced by other SG rules | |
| VPCEndpoint | EC2 | Immediate | |
| KeyPair | EC2 | Immediate | |
| LaunchTemplate | EC2 | Immediate | |
| AutoScalingGroup | Auto Scaling | Force-terminates all instances | |
| EC2Instance | EC2 | 30–120s | Terminates instance |
| DBSubnetGroup | RDS | Fails if in use | |
| DBParameterGroup | RDS | Fails if in use | |
| DBClusterParameterGroup | RDS | Fails if in use | |
| DBInstance | RDS | several min | May take several minutes if skipFinalSnapshot: false |
| DBCluster | RDS | several min | Fails if cluster has instances |
| S3Bucket | S3 | Fails if bucket not empty | |
| S3BucketPolicy | S3 | Immediate | |
| SQSQueue | SQS | Immediate — in-flight messages permanently lost | |
| SNSTopic | SNS | Immediate — all subscriptions deleted with topic | |
| SNSSubscription | SNS | Immediate | |
| ElastiCacheSubnetGroup | ElastiCache | Fails if in use | |
| ElastiCacheReplicationGroup | ElastiCache | several min | Immediate — no final snapshot, cached data lost |
| HostedZone | Route 53 | Fails if zone has non-NS/SOA records | |
| RecordSet | Route 53 | Immediate | |
| HealthCheck | Route 53 | Immediate | |
| EKSCluster | EKS | 10–15 min | Must delete node groups, Fargate profiles, and addons first |
| EKSNodeGroup | EKS | 3–5 min | EKS drains pods and terminates EC2 instances |
| EKSAddon | EKS | Immediate | |
| EKSFargateProfile | EKS | ~2 min | ~2 min async |
| EKSAccessEntry | EKS | Immediate | |
| LambdaFunction | Lambda | polls ~5s | Immediate |
| LambdaEventSourceMapping | Lambda | Immediate | |
| LambdaPermission | Lambda | Immediate | |
| ECSCluster | ECS | Immediate | |
| ECSTaskDefinition | ECS | Deregisters active revision | |
| ECSService | ECS | Force-deleted immediately |
Common Concepts
Common Status Fields
Every resource exposes the following status fields:
conditions— Standard Kubernetes conditions array. The key condition istype: Readywithstatus: "True"or"False".observedGeneration— Themetadata.generationthat was last reconciled. Used to gate update calls — ifobservedGeneration == generation, expensive describe + diff logic is skipped on re-queues triggered by drift detection.lastSyncTime— RFC3339 timestamp of the most recent successful reconciliation.- Resource-specific fields such as
arn,id,endpoint, etc. are documented per resource.
Cross-Resource References
Resources can reference other CRs by name instead of hardcoding AWS IDs. For example, a Subnet can reference a VPC CR:
vpcRef.name: my-vpc— looks up the VPC CR in the same namespace and reads itsstatus.vpcId.- If the referenced CR does not exist or is not yet Ready, the controller re-queues and waits. No polling loop is needed in your manifests.
- You can also use a direct AWS ID or ARN (e.g.
vpcRef.id: vpc-0abc123) to reference resources not managed by konfig-konector.
Ready Condition Reasons
The Ready condition's reason field conveys the current reconciliation state:
Synced— Resource exists in AWS and matches spec.Creating— AWS API call in progress (async resources).Updating— Update API call in progress.Deleting— Deletion in progress, waiting for AWS to confirm.DependencyNotReady— A referenced CR (e.g. VPC, IAMRole) is not yet Ready.Error— AWS API returned a non-retryable error. Checkmessagefield for details.Throttled— AWS rate limit hit; controller will back off and retry automatically.
Deletion Behavior Patterns
All resources use a Kubernetes finalizer (aws.konfig.io/finalizer) to ensure the AWS resource is deleted before the CR is garbage-collected. There are three common patterns:
- Immediate — The AWS delete API call returns quickly. The finalizer is removed and the CR disappears within seconds.
- Async — The delete is initiated but takes time (e.g. NatGateway, EKS). The controller polls until the resource is fully deleted, then removes the finalizer. The CR stays in a
Deletingstate during this time. - Blocked — AWS refuses to delete because the resource is in use or has dependents (e.g. non-empty S3 bucket, VPC with subnets). The CR stays with
Ready: False, reason: Error. Delete dependents first, then re-trigger deletion.
Drift Detection
Every controller re-queues after 5 minutes. On each reconcile, it fetches the live AWS resource and compares it against spec.
If AWS state has drifted (e.g. someone manually changed a tag or a security group rule), the controller re-applies the desired state.
Updates are gated on observedGeneration: if the spec has not changed since last sync, only a describe call is made — no update API calls unless drift is detected.
Secrets & Passwords
Database passwords (for DBInstance and DBCluster) are read from Kubernetes Secrets at reconcile time via masterUserPasswordRef.name and masterUserPasswordRef.key.
The password value is never written to status fields, events, or logs. On updates, the password is re-read and compared; if it has changed, the controller calls ModifyDBInstance to rotate it.