Skip to content

Conversation

@aleksandarss
Copy link

@aleksandarss aleksandarss commented Nov 15, 2025

Problem Statement

External Secrets Operator currently has no support for AWS Certificate Manager (ACM) as a provider. This makes it impossible to directly consume certificates that are managed in ACM from within Kubernetes.

AWS now supports exportable certificates in ACM, which means certificates (including private keys) can be retrieved via the AWS API. Despite this, users still cannot use ACM as a source of truth in ESO and are forced into workarounds such as exporting certificates manually or copying them into Secrets Manager first.

These workarounds introduce unnecessary complexity, additional moving parts, and operational overhead, and they go against the declarative secrets management model that ESO aims to provide.

The lack of native ACM support prevents users from managing TLS certificates in a clean and consistent way when AWS ACM is already their primary certificate authority.

Related Issue

Fixes #4936

Proposed Changes

This PR adds native support for AWS Certificate Manager (ACM) as a provider in External Secrets Operator.

Specifically:

  • Extend the AWS provider enum with a new value CertificateManager, allowing ACM to be configured in SecretStore and ClusterSecretStore.

  • Introduce a new provider implementation under providers/v1/aws/certificatemanager:

    • Implements the GetSecret method using AWS ACM DescribeCertificate and ExportCertificate APIs.
    • Retrieves exportable certificates directly from ACM using the certificate ARN provided via remoteRef.key.
    • Returns a single secret payload containing the certificate, certificate chain (if present), and private key.
  • Explicitly mark unsupported operations (push, delete, list, map, existence checks) as errors, since ACM is treated as a read-only source.

  • Add the required AWS SDK v2 dependency (github.com/aws/aws-sdk-go-v2/service/acm) to support ACM API calls.

This implementation allows ACM to be used as a source of truth for TLS certificates in ESO without requiring intermediate storage, while keeping the scope intentionally limited to read-only certificate retrieval.

Format

Please ensure that your PR follows the following format for the title:

feat(scope): add new feature
fix(scope): fix bug
docs(scope): update documentation
chore(scope): update build tool or dependencies
ref(scope): refactor code
clean(scope): provider cleanup
test(scope): add tests
perf(scope): improve performance
desig(scope): improve design

Where scope is optionally one of:

  • charts
  • release
  • testing
  • security
  • templating

Checklist

  • I have read the contribution guidelines
  • All commits are signed with git commit --signoff
  • My changes have reasonable test coverage
  • All tests pass with make test
  • I ensured my PR is ready for review with make reviewable
  • Adds AWS Certificate Manager (ACM) provider "CertificateManager" to External Secrets Operator for read-only retrieval of exportable certificates (certificate, certificate chain, private key) from ACM into Kubernetes Secrets.
  • New provider implementation at providers/v1/aws/certificatemanager:
    • GetSecret uses ACM DescribeCertificate and ExportCertificate to fetch and assemble a single secret payload.
    • Unsupported operations (Push, Delete, GetAll, GetSecretMap, SecretExists) return explicit not-supported errors.
    • Includes constructor New, Validate (credential checks), Close (no-op), error sanitization, a custom ACM endpoint resolver (AWS_ACM_ENDPOINT), unit tests, and a fake ACM client for testing.
  • API/CRD/docs updated to add AWSServiceType value "CertificateManager" across SecretStore, ClusterSecretStore, ExternalSecret, generators, and related schemas.
  • Adds AWS SDK v2 ACM dependency (github.com/aws/aws-sdk-go-v2/service/acm) and corresponding go.mod updates.
  • Purpose: allow ACM to be treated as the source of truth for TLS certificates without intermediate storage (read-only). Fixes AWS Certificate manager provider for exportable certificates #4936.

@github-actions github-actions bot added kind/dependency dependabot and upgrades size/m labels Nov 15, 2025
@aleksandarss aleksandarss force-pushed the aws-certificate-manager-provider-for-exportable-certificates branch 3 times, most recently from 65fa867 to 0444696 Compare November 15, 2025 20:38
@aleksandarss aleksandarss changed the title Aws certificate manager provider for exportable certificates feat: Aws certificate manager provider for exportable certificates Nov 16, 2025
@github-actions github-actions bot added the kind/feature Categorizes issue or PR as related to a new feature. label Nov 16, 2025
@github-actions github-actions bot added kind/documentation Categorizes issue or PR as related to documentation. size/l labels Nov 30, 2025
@coderabbitai
Copy link

coderabbitai bot commented Dec 18, 2025

Walkthrough

Adds AWS Certificate Manager support: new ACM provider implementation, fake client and endpoint resolver, unit tests; updates API types, CRD schemas, docs to accept "CertificateManager"; and updates module dependencies to include AWS ACM SDK.

Changes

Cohort / File(s) Summary
API & CRD enums
apis/externalsecrets/v1/secretstore_aws_types.go, config/crds/bases/external-secrets.io_clustersecretstores.yaml, config/crds/bases/external-secrets.io_secretstores.yaml, deploy/crds/.../bundle.yaml, tests/__snapshot__/clustersecretstore-v1.yaml, tests/__snapshot__/secretstore-v1.yaml
Added CertificateManager to AWS service enums and exported constant AWSServiceCertificateManager; expanded CRD/openAPI schema enum lists and updated example snapshot comments.
ACM provider implementation
providers/v1/aws/certificatemanager/certificatemanager.go, providers/v1/aws/certificatemanager/resolver.go
New CertificateManager type and constructor New; GetSecret, Validate, Close and unsupported-operation stubs; custom endpoint resolver with AWS_ACM_ENDPOINT override.
ACM tests & fakes
providers/v1/aws/certificatemanager/certificatemanager_test.go, providers/v1/aws/certificatemanager/fake/fake.go
Added comprehensive unit tests and a fake ACM client with function-field mocks and helpers for ACM API operations.
Provider integration
providers/v1/aws/provider.go, providers/v1/aws/provider_test.go
Integrated CertificateManager into provider validation and client creation paths; added a validation test case for certificate manager region handling.
Module dependency updates
go.mod, providers/v1/aws/go.mod
Added github.com/aws/aws-sdk-go-v2/service/acm v1.37.13 and adjusted related dependency versions and transitive modules.
Documentation
docs/api/spec.md
Documented CertificateManager value in the AWSServiceType enum.

Pre-merge checks

✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed PR successfully implements all objectives from issue #4936: adds AWS ACM as a provider to sync certificates from ACM to Kubernetes secrets with read-only retrieval via GetSecret, supporting exportable certificates.
Out of Scope Changes check ✅ Passed All changes align with the stated objective of adding ACM certificate provider support. Type definitions, enums, CRD updates, documentation, dependencies, and provider implementation are all directly required for the feature.

Comment @coderabbitai help to get the list of available commands and usage tips.

@aleksandarss aleksandarss force-pushed the aws-certificate-manager-provider-for-exportable-certificates branch from efe12e2 to 6bf24e9 Compare December 18, 2025 19:23
@aleksandarss aleksandarss marked this pull request as ready for review December 18, 2025 19:38
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (8)
config/crds/bases/external-secrets.io_clustersecretstores.yaml (1)

645-652: Enum update for AWS service to include CertificateManager looks correct

Adding CertificateManager to the aws.service enum is consistent with the new ACM provider and simply broadens allowed values without breaking existing manifests. One optional follow‑up you might consider (in this or a later PR) is adjusting the nearby aws description string (Line 469) so it no longer reads only as “Secret Manager provider,” since the service can now be SecretsManager, ParameterStore, or CertificateManager.

providers/v1/aws/provider.go (1)

17-18: Update the package comment to include CertificateManager.

The package documentation should reflect all supported services, including the newly added Certificate Manager.

🔎 Apply this diff to update the package comment:
-// Package aws implements AWS provider interfaces for External Secrets Operator,
-// supporting SecretManager and ParameterStore services.
+// Package aws implements AWS provider interfaces for External Secrets Operator,
+// supporting SecretsManager, ParameterStore, and CertificateManager services.
go.mod (1)

405-405: Consider updating to the latest ACM SDK version.

v1.37.13 is not the latest version of the module. While no known security vulnerabilities exist for this version and the package maintains healthy release cadence, a more recent version may be available. Review the latest release notes to determine if an update is warranted.

config/crds/bases/external-secrets.io_secretstores.yaml (1)

645-652: ACM enum addition looks correct; consider aligning the AWS provider description.

Adding CertificateManager to spec.provider.aws.service.enum is consistent with the new ACM provider and will let v1 SecretStore objects validate correctly. No schema issues here.

Since aws.service now supports SecretsManager, ParameterStore, and CertificateManager, the aws description ("sync secrets using AWS Secret Manager provider") above is slightly misleading; consider updating it to reflect that this block configures AWS as a provider and the specific service is selected via the service field.

providers/v1/aws/certificatemanager/certificatemanager_test.go (1)

166-189: Rename successCases and consider using subtests.

The slice successCases contains both success and error scenarios, making the name misleading. Additionally, using numeric indices in error messages makes debugging difficult.

🔎 Consider these improvements:
  1. Rename the slice:
-	successCases := []*certificateManagerTestCase{
+	testCases := []*certificateManagerTestCase{
  1. Add descriptive names and use subtests for better isolation:
testCases := []struct {
	name string
	tc   *certificateManagerTestCase
}{
	{"valid certificate with all fields", makeValidCertificateManagerTestCaseCustom(setValidCertificate)},
	{"certificate only", makeValidCertificateManagerTestCaseCustom(setCertificateOnly)},
	{"certificate and chain", makeValidCertificateManagerTestCaseCustom(setCertificateAndChain)},
	{"no data returned error", makeValidCertificateManagerTestCaseCustom(setNoDataReturned)},
	{"export certificate failure", makeValidCertificateManagerTestCaseCustom(setExportCertFail)},
	{"describe certificate failure", makeValidCertificateManagerTestCaseCustom(setDescribeCertFail)},
	{"empty ARN error", makeValidCertificateManagerTestCaseCustom(setEmptyARN)},
}

for _, tt := range testCases {
	t.Run(tt.name, func(t *testing.T) {
		// test logic here using tt.tc
	})
}

This improves debuggability by showing which specific test case failed by name rather than index.

providers/v1/aws/certificatemanager/resolver.go (1)

37-49: Avoid shadowing the url package name.

Line 40 declares a variable named url that shadows the imported url package. While this code works, it reduces readability and could cause confusion.

🔎 Apply this diff to use a more descriptive variable name:
 func (c customEndpointResolver) ResolveEndpoint(ctx context.Context, params acm.EndpointParameters) (smithyendpoints.Endpoint, error) {
 	endpoint := smithyendpoints.Endpoint{}
 	if v := os.Getenv(ACMEndpointEnv); v != "" {
-		url, err := url.Parse(v)
+		parsedURL, err := url.Parse(v)
 		if err != nil {
 			return endpoint, fmt.Errorf("failed to parse acm endpoint %s: %w", v, err)
 		}
-		endpoint.URI = *url
+		endpoint.URI = *parsedURL
 		return endpoint, nil
 	}
 	defaultResolver := acm.NewDefaultEndpointResolverV2()
 	return defaultResolver.ResolveEndpoint(ctx, params)
 }
providers/v1/aws/certificatemanager/certificatemanager.go (2)

32-49: Unused field and interface methods.

  • The prefix field (line 37) is stored but never used in any method implementation.
  • ACMInterface defines ListCertificates, GetCertificate, AddTagsToCertificate, and RemoveTagsFromCertificate, but none of these are called by the provider.

Consider removing unused code to reduce maintenance overhead.

🔎 Suggested diff
 type CertificateManager struct {
 	cfg          *aws.Config
 	client       ACMInterface
 	referentAuth bool
-	prefix       string
 }

 // ACMInterface defines the subset of ACM API methods used by the provider.
 // see: https://docs.aws.amazon.com/sdk-for-go/api/service/acm/
 type ACMInterface interface {
 	DescribeCertificate(ctx context.Context, input *acm.DescribeCertificateInput, opts ...func(*acm.Options)) (*acm.DescribeCertificateOutput, error)
 	ExportCertificate(ctx context.Context, input *acm.ExportCertificateInput, opts ...func(*acm.Options)) (*acm.ExportCertificateOutput, error)
-	ListCertificates(ctx context.Context, input *acm.ListCertificatesInput, opts ...func(*acm.Options)) (*acm.ListCertificatesOutput, error)
-	GetCertificate(ctx context.Context, input *acm.GetCertificateInput, opts ...func(*acm.Options)) (*acm.GetCertificateOutput, error)
-	AddTagsToCertificate(ctx context.Context, input *acm.AddTagsToCertificateInput, opts ...func(*acm.Options)) (*acm.AddTagsToCertificateOutput, error)
-	RemoveTagsFromCertificate(ctx context.Context, input *acm.RemoveTagsFromCertificateInput, opts ...func(*acm.Options)) (*acm.RemoveTagsFromCertificateOutput, error)
 }

84-99: Consider supporting remoteRef.Property for component selection.

The current implementation concatenates all components (certificate, chain, private key) into a single value. For Kubernetes TLS secrets, users typically need separate tls.crt and tls.key fields.

Supporting ref.Property would allow users to extract individual components:

  • certificate → just the certificate
  • chain → just the certificate chain
  • privateKey → just the private key
  • empty/default → all concatenated (current behavior)

This would improve flexibility for secret templating.

🔎 Example implementation
switch ref.Property {
case "certificate":
    if exportOut.Certificate != nil {
        return []byte(*exportOut.Certificate), nil
    }
    return nil, fmt.Errorf("certificate not available")
case "chain":
    if exportOut.CertificateChain != nil {
        return []byte(*exportOut.CertificateChain), nil
    }
    return nil, fmt.Errorf("certificate chain not available")
case "privateKey":
    if exportOut.PrivateKey != nil {
        return []byte(*exportOut.PrivateKey), nil
    }
    return nil, fmt.Errorf("private key not available")
default:
    // Current behavior - return all concatenated
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 77cc123 and 6bf24e9.

⛔ Files ignored due to path filters (2)
  • go.sum is excluded by !**/*.sum
  • providers/v1/aws/go.sum is excluded by !**/*.sum
📒 Files selected for processing (14)
  • apis/externalsecrets/v1/secretstore_aws_types.go (2 hunks)
  • config/crds/bases/external-secrets.io_clustersecretstores.yaml (1 hunks)
  • config/crds/bases/external-secrets.io_secretstores.yaml (1 hunks)
  • deploy/crds/bundle.yaml (2 hunks)
  • docs/api/spec.md (1 hunks)
  • go.mod (1 hunks)
  • providers/v1/aws/certificatemanager/certificatemanager.go (1 hunks)
  • providers/v1/aws/certificatemanager/certificatemanager_test.go (1 hunks)
  • providers/v1/aws/certificatemanager/fake/fake.go (1 hunks)
  • providers/v1/aws/certificatemanager/resolver.go (1 hunks)
  • providers/v1/aws/go.mod (4 hunks)
  • providers/v1/aws/provider.go (4 hunks)
  • tests/__snapshot__/clustersecretstore-v1.yaml (1 hunks)
  • tests/__snapshot__/secretstore-v1.yaml (1 hunks)
👮 Files not reviewed due to content moderation or server errors (1)
  • docs/api/spec.md
🧰 Additional context used
🧬 Code graph analysis (2)
providers/v1/aws/provider.go (2)
apis/externalsecrets/v1/secretstore_aws_types.go (1)
  • AWSServiceCertificateManager (67-67)
providers/v1/aws/certificatemanager/certificatemanager.go (1)
  • New (52-61)
providers/v1/aws/certificatemanager/fake/fake.go (1)
providers/v1/aws/certificatemanager/certificatemanager.go (1)
  • New (52-61)
🔇 Additional comments (18)
providers/v1/aws/go.mod (3)

3-11: Verify Go version downgrade and AWS SDK compatibility.

The Go version has been downgraded to 1.25.1 (line 3). If this is a minimum version requirement, clarify in the commit message. Additionally, ensure the AWS SDK versions across config, credentials, secretsmanager, ssm, and sts are compatible and have not introduced breaking changes.


45-45: LGTM on ACM SDK addition.

The direct require for github.com/aws/aws-sdk-go-v2/service/acm v1.37.13 looks appropriate for the new ACM provider implementation.

Also applies to: 45-45


29-49: Verify transitive dependencies of ACM SDK v1.37.13.

The dependencies flagged—oracle/oci-go-sdk/v65, sony/gobreaker, gofrs/flock, and golang.org/x/mod—are confirmed present in lines 29-34 and 46-49. Confirm that ACM SDK v1.37.13 provides the required DescribeCertificate and ExportCertificate APIs, but determine whether these indirect dependencies are genuinely transitive from ACM or represent unrelated module changes. oracle/oci-go-sdk particularly warrants clarification for an AWS-only feature.

tests/__snapshot__/clustersecretstore-v1.yaml (1)

94-94: Documentation update aligns with ACM provider addition.

The service enum comment correctly reflects that CertificateManager is now an available option alongside SecretsManager and ParameterStore. This snapshot update properly documents the new provider capability.

Also applies to: 94-94

tests/__snapshot__/secretstore-v1.yaml (1)

94-94: LGTM!

The comment correctly documents the new CertificateManager enum value alongside the existing options.

apis/externalsecrets/v1/secretstore_aws_types.go (1)

55-67: LGTM!

The enum extension follows the established pattern and includes proper documentation. The kubebuilder validation annotation is correctly updated to include the new CertificateManager service type.

providers/v1/aws/provider.go (1)

167-168: LGTM!

The CertificateManager integration follows the established pattern for both referent auth and normal auth scenarios. The calls to certificatemanager.New() correctly pass the required configuration, prefix, and referentAuth flag.

Also applies to: 224-225

providers/v1/aws/certificatemanager/certificatemanager_test.go (6)

37-46: LGTM - Test data setup is appropriate.

The test constants provide reasonable fixtures for unit testing. The truncated certificate strings are sufficient for testing the concatenation and formatting logic without bloating the test file.


48-109: LGTM - Well-structured test case factories.

The factory functions and functional options pattern make test cases easy to construct and customize. This approach enhances test readability and maintainability.


111-121: LGTM - Endpoint resolver test is correct.

The test properly validates the custom endpoint resolution behavior and uses t.Setenv for automatic cleanup.


192-240: LGTM - Unsupported operations correctly tested.

The tests appropriately verify that unsupported operations return errors with clear messages. The consistent pattern across all tests is good.


242-291: LGTM - Lifecycle and validation tests are appropriate.

The tests provide adequate coverage for validation, close, and constructor functionality with clear assertions.


293-349: LGTM - Test helpers and mocks are well-implemented.

The helper functions and mock implementations are minimal, focused, and appropriate for the test requirements.

providers/v1/aws/certificatemanager/resolver.go (1)

30-31: LGTM - Environment variable constant is well-defined.

Exporting the constant allows tests to reference it, ensuring consistency.

providers/v1/aws/certificatemanager/certificatemanager.go (1)

102-142: LGTM for unsupported operations and lifecycle methods.

The unsupported operations (DeleteSecret, GetAllSecrets, GetSecretMap, SecretExists, PushSecret) appropriately return explicit errors, aligning with the read-only design of this provider.

Minor note: Validate (line 113) uses context.Background() instead of accepting a context parameter. This is consistent with other providers in the codebase, so it's acceptable.

providers/v1/aws/certificatemanager/fake/fake.go (3)

29-56: LGTM!

The Client struct and function types follow the standard fake client pattern, properly mirroring the ACMInterface for test mocking.


57-137: LGTM!

The method implementations correctly delegate to their respective function fields. The constructor helpers provide convenient ways to create mock behaviors.

Note: Calling any method without first setting its corresponding function field will panic due to nil function call. This is standard for test fakes and acceptable since tests should configure all used mock methods.


139-147: LGTM!

The WithValue helper provides strict input validation for ExportCertificate mocking, which is useful for verifying that the provider passes correct parameters. The use of cmpopts.IgnoreUnexported appropriately handles AWS SDK internal fields.

If needed in the future, similar helpers could be added for other methods.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
providers/v1/aws/certificatemanager/certificatemanager_test.go (1)

173-197: Consider renaming test cases array and using subtests.

The variable successCases (line 173) contains both success and error test cases (lines 177-181 are error scenarios), which is misleading. Additionally, using subtests with t.Run would improve test output clarity and make it easier to identify which specific scenario fails.

💡 Suggested improvements

Rename the test cases array:

-	successCases := []*certificateManagerTestCase{
+	testCases := []*certificateManagerTestCase{

Consider restructuring with subtests for better test organization:

testCases := map[string]struct {
	setup          func(*certificateManagerTestCase)
	expectedSecret string
	expectError    string
}{
	"valid certificate with all fields": {
		setup:          setValidCertificate,
		expectedSecret: testCertWithAll,
	},
	"certificate only": {
		setup:          setCertificateOnly,
		expectedSecret: testCertificate + "\n",
	},
	// ... other cases
}

for name, tc := range testCases {
	t.Run(name, func(t *testing.T) {
		// test logic
	})
}
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cb38694 and d4d5a3a.

📒 Files selected for processing (2)
  • providers/v1/aws/certificatemanager/certificatemanager.go (1 hunks)
  • providers/v1/aws/certificatemanager/certificatemanager_test.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • providers/v1/aws/certificatemanager/certificatemanager.go
🧰 Additional context used
🧬 Code graph analysis (1)
providers/v1/aws/certificatemanager/certificatemanager_test.go (3)
providers/v1/aws/certificatemanager/fake/fake.go (3)
  • Client (30-37)
  • DescribeCertificateFn (40-40)
  • NewDescribeCertificateFn (63-67)
providers/v1/aws/certificatemanager/resolver.go (1)
  • ACMEndpointEnv (31-31)
providers/v1/aws/certificatemanager/certificatemanager.go (2)
  • New (52-61)
  • CertificateManager (33-38)

…anager and ParameterStore

Signed-off-by: aleksandarss <[email protected]>
@sonarqubecloud
Copy link

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
providers/v1/aws/provider_test.go (1)

474-488: LGTM! Consider adding CertificateManager client creation test.

The test case correctly validates the CertificateManager service with a valid region, following the established pattern. However, TestProvider (lines 39-153) lacks a test case for creating a CertificateManager client, unlike SecretsManager and ParameterStore which have dedicated cases verifying expType. Consider adding:

{
    test:    "should create certificate manager client",
    expErr:  false,
    expType: &certificatemanager.CertificateManager{},
    store: &esv1.SecretStore{
        Spec: esv1.SecretStoreSpec{
            Provider: &esv1.SecretStoreProvider{
                AWS: &esv1.AWSProvider{
                    Service: esv1.AWSServiceCertificateManager,
                },
            },
        },
    },
},
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d4d5a3a and 1526970.

📒 Files selected for processing (2)
  • providers/v1/aws/provider.go (4 hunks)
  • providers/v1/aws/provider_test.go (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
providers/v1/aws/provider_test.go (2)
providers/v1/aws/provider.go (1)
  • Provider (48-48)
apis/externalsecrets/v1/secretstore_aws_types.go (1)
  • AWSServiceCertificateManager (67-67)
providers/v1/aws/provider.go (2)
apis/externalsecrets/v1/secretstore_aws_types.go (1)
  • AWSServiceCertificateManager (67-67)
providers/v1/aws/certificatemanager/certificatemanager.go (1)
  • New (52-61)
🔇 Additional comments (4)
providers/v1/aws/provider.go (4)

29-29: LGTM!

The new imports for the ACM SDK and certificatemanager package are correctly added and necessary for the new functionality.

Also applies to: 37-37


128-136: LGTM!

The region validation for CertificateManager correctly mirrors the pattern used for SecretsManager and ParameterStore, using acm.NewDefaultEndpointResolverV2() for early region validation. This addresses the previous review feedback.


175-176: LGTM!

The CertificateManager client creation in the referent auth path correctly follows the established pattern, passing referentAuth=true and the appropriate prefix.


232-233: LGTM!

The CertificateManager client creation in the standard path correctly uses the authenticated config and passes referentAuth=false. The implementation is consistent with SecretsManager and ParameterStore.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/dependency dependabot and upgrades kind/documentation Categorizes issue or PR as related to documentation. kind/feature Categorizes issue or PR as related to a new feature. size/l size/m

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

AWS Certificate manager provider for exportable certificates

1 participant