Skip to content

Commit 0f5d21c

Browse files
author
Kyle Schultheiss
committed
Add ACME resources: AcmeEndpoint, AcmeExternalAccountBinding, AcmeDomainValidation
Add support for ACM's ACME protocol resources. This enables Kubernetes users to manage ACME endpoints, domain validations, and external account bindings as native Kubernetes resources. New CRDs: - AcmeEndpoint: managed ACME server with unique endpoint URL - AcmeExternalAccountBinding: EAB credentials for ACME client auth - AcmeDomainValidation: DNS prevalidation for domain authorization Key features: - EAB credentials are retrieved via GetAcmeExternalAccountBindingCredentials and written into a user-specified, pre-existing Secret (keyId and macKey); the Secret must exist first, following the same pattern as the Certificate resource's exportTo field - The non-sensitive key identifier is also surfaced in status.keyID so ACME clients can reference it without reading the Secret - Cross-resource references between EAB/DomainValidation and Endpoint - Status fields expose endpointURL for ACME client configuration SDK bumped from v1.33.0 to v1.42.0 to include ACME operations added in the 2026-06-30 SDK release.
1 parent 0a84244 commit 0f5d21c

59 files changed

Lines changed: 9843 additions & 459 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,80 @@ spec:
8383
```
8484
If you are issuing a privately trusted certificate, please also consider using this cert-manager plugin: https://github.com/cert-manager/aws-privateca-issuer/.
8585

86+
## ACME Resources
87+
88+
This controller also manages ACME (Automatic Certificate Management Environment) resources for ACM. ACME enables standards-based certificate automation using any ACME-compatible client (cert-manager, Certbot, acme.sh, etc.).
89+
90+
### AcmeEndpoint
91+
92+
Creates a managed ACME server endpoint with a unique URL for certificate automation.
93+
94+
```yaml
95+
apiVersion: acm.services.k8s.aws/v1alpha1
96+
kind: AcmeEndpoint
97+
metadata:
98+
name: my-acme-endpoint
99+
spec:
100+
authorizationBehavior: PRE_APPROVED
101+
certificateAuthority:
102+
publicCertificateAuthority: {}
103+
contact: NOT_REQUIRED
104+
```
105+
106+
After creation, `status.endpointURL` contains the ACME directory URL (e.g., `https://acm-acme-enroll.us-east-1.api.aws/<id>/directory`).
107+
108+
### AcmeDomainValidation
109+
110+
Authorizes an ACME endpoint to issue certificates for specific domain names.
111+
112+
```yaml
113+
apiVersion: acm.services.k8s.aws/v1alpha1
114+
kind: AcmeDomainValidation
115+
metadata:
116+
name: my-domain-validation
117+
spec:
118+
acmeEndpointARN: arn:aws:acm:us-east-1:123456789012:acme-endpoint/abc-123
119+
domainName: example.com
120+
prevalidationOptions:
121+
dnsPrevalidation:
122+
hostedZoneId: Z0123456789ABC
123+
domainScope:
124+
exactDomain: ENABLED
125+
subdomains: ENABLED
126+
wildcards: ENABLED
127+
```
128+
129+
### AcmeExternalAccountBinding
130+
131+
Creates EAB credentials that authorize ACME clients to register accounts with the endpoint.
132+
133+
You must create the target Secret before creating the resource — the controller
134+
populates an existing Secret rather than creating one (the same pattern as the
135+
`Certificate` resource's `exportTo` field).
136+
137+
```yaml
138+
apiVersion: v1
139+
kind: Secret
140+
metadata:
141+
name: my-eab-credentials
142+
namespace: default
143+
type: Opaque
144+
---
145+
apiVersion: acm.services.k8s.aws/v1alpha1
146+
kind: AcmeExternalAccountBinding
147+
metadata:
148+
name: my-eab
149+
spec:
150+
acmeEndpointARN: arn:aws:acm:us-east-1:123456789012:acme-endpoint/abc-123
151+
roleARN: arn:aws:iam::123456789012:role/AcmeAccountRole
152+
credentialsOutput:
153+
namespace: default
154+
name: my-eab-credentials
155+
key: keyId
156+
```
157+
158+
After creation, the controller writes the EAB credentials (`keyId` and `macKey`) into the specified Kubernetes Secret. The Secret must already exist. If `namespace` is omitted, the resource's namespace is used.
159+
86160
## Contributing
87161

88162
We welcome community contributions and pull requests.
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ack_generate_info:
2-
build_date: "2026-07-07T21:56:48Z"
3-
build_hash: 0a6b791fa10a6140d862be334a6891868ee588eb
4-
go_version: go1.26.4
5-
version: v0.61.0
6-
api_directory_checksum: 1f8c794be4a652f9a9cbd936b859e8f103e9291e
2+
build_date: No Build Date Provided.
3+
build_hash: No Git-hash Provided.
4+
go_version: go1.26.1
5+
version: (Unknown Version)
6+
api_directory_checksum: eb74a11e81b7bc3881f7b72f37cc9c196330da3d
77
api_version: v1alpha1
8-
aws_sdk_go_version: v1.32.6
8+
aws_service_sdk_version: v1.42.0
99
generator_config_info:
10-
file_checksum: bd0a12d0529ef1e66f351dc61be00f8956aa966e
10+
file_checksum: 0865847350405478d479fc3feafc9f92aeb6ff61
1111
original_file_name: generator.yaml
1212
last_modification:
1313
reason: API generation

apis/v1alpha1/acme_domain_validation.go

Lines changed: 110 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/v1alpha1/acme_endpoint.go

Lines changed: 110 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)