To use Dynamic Provider credentials we need to genera a public and private key that will be use to generate a validate the federated tokens, we can use the following commands
You need to make sure the private key starts with "-----BEGIN PRIVATE KEY-----" if not the following command can be used to transform the private key to the correct format
The public and private key need to be mounted inside the container and the path should be specify in the following environment variables
DynamicCredentialPublicKeyPath
DynamicCredentialPrivateKeyPath
Kubernetes Deployment
To enable dynamic credentials when using the helm chart add the following values.
api:dynamicCredentials:enabled:truepublicKey:| -----BEGIN PUBLIC KEY----- REDACTED -----END PUBLIC KEY-----privateKey:| -----BEGIN PRIVATE KEY----- REDACTED -----END PRIVATE KEY-----volumes:-name:dynamic-credentialssecret:secretName:terrakube-dynamic-credentialsitems:-key:public-key.pempath:public-key.pem-key:private-key.pempath:private-key.pemvolumeMounts:-name:dynamic-credentialsmountPath:/etc/terrakube/credentialsreadOnly:true
Public Endpoints Requirements
To use Dynamic Provider credentials the following public endpoints were added. This endpoint needs to be accessible for your different cloud providers.
Terrakube Environment Variables:
The following environment variables can be used to customize the dynamic credentials configuration:
DynamicCredentialId = This will be the kid in the JWKS endpoint (Default value: 03446895-220d-47e1-9564-4eeaa3691b42)
DynamicCredentialTtl= The TTL for the federated token generated internally in Terrakube (Defafult: 30)
DynamicCredentialPublicKeyPath= The path to the public key to validate the federated tokens
DynamicCredentialPrivateKeyPath=The path to the private key to generate the federated tokens
Token structure
Terrakube will generate a JWT token internally, this token will be used to authenticate to your cloud provider.
The token structure looks like the following for Azure
The token structure looks like the following for GCP
The token structure looks like the following for AWS