Skip to content

[Feature Request]: Assume role per Issuer #361

@EnriqueLop

Description

@EnriqueLop

Describe why this change is needed

Currently, this project cannot assume different IAM roles based on the Issuer configuration. This limitation makes it challenging to use AWS PCA instances stored in multiple AWS accounts, as there is no built-in mechanism to define an assumable role per Issuer.

In multi-account setups, organizations may have AWS PCA instances residing in different AWS accounts while their Kubernetes clusters exist in a separate centralized account. However, since AWS PCA Issuers do not currently support assuming a role per Issuer, it is impossible to authenticate against different AWS accounts dynamically.

Allowing an Issuer to specify an IAM role to assume would enable seamless integration with AWS PCA across different accounts. This would be particularly useful for scenarios where:

  • Each AWS PCA instance is hosted in a separate AWS account.
  • The cluster account needs to authenticate against these AWS PCA instances dynamically.
  • A specific role assumption strategy is required per Issuer.

Describe solutions and alternatives considered (optional)

Introduce an option in the Issuer configuration that allows specifying an IAM role to assume, similar to how native cert-manager supports role assumption.

This feature would align AWS PCA Cert Manager with other Kubernetes authentication patterns that leverage IAM role assumption. It would also improve security by following the principle of least privilege while enabling better multi-account AWS PCA management.

---
apiVersion: awspca.cert-manager.io/v1beta1
kind: AWSPCAClusterIssuer
metadata:
  name: issuer-A
spec:
  arn: awspca-account-A
  role: role-account-A
---
apiVersion: awspca.cert-manager.io/v1beta1
kind: AWSPCAClusterIssuer
metadata:
  name: issuer-B
spec:
  arn: awspca-account-B
  role: role-account-B

With this configuration, on the ClusterIssuer reconciliation it will assume a role based on the value of role.

cert-manager, external-secrets and external-dns do support assume role.

Is there anything else you would like to add?

I see that some test uses assume role but I can not find how to use it in production environment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions