Add all built in BundlePublishers (#430)

* Add all built in BundlePublishers

Signed-off-by: Kevin Fox <[email protected]>

* Add secret management

Signed-off-by: Kevin Fox <[email protected]>

* Fix typo

Signed-off-by: Kevin Fox <[email protected]>

* Update charts/spire/charts/spire-server/values.yaml

Co-authored-by: Faisal Memon <[email protected]>
Signed-off-by: kfox1111 <[email protected]>

---------

Signed-off-by: Kevin Fox <[email protected]>
Signed-off-by: kfox1111 <[email protected]>
Co-authored-by: Faisal Memon <[email protected]>
This commit is contained in:
kfox1111
2024-08-27 12:35:23 -07:00
committed by GitHub
co-authored by Faisal Memon
parent 532852d907
commit e72b94fc13
6 changed files with 127 additions and 19 deletions
@@ -348,6 +348,18 @@ In order to run Tornjak with simple HTTP Connection only, make sure you don't cr
| `nodeAttestor.tpmDirect.pluginPath` | The filename in the container of the plugin | `/app/tpm_attestor_server` | | `nodeAttestor.tpmDirect.pluginPath` | The filename in the container of the plugin | `/app/tpm_attestor_server` |
| `nodeAttestor.tpmDirect.cas` | A dictionary of TPM CA PEM or DER files that are allowed to connect. | `{}` | | `nodeAttestor.tpmDirect.cas` | A dictionary of TPM CA PEM or DER files that are allowed to connect. | `{}` |
| `nodeAttestor.tpmDirect.hashes` | A list of TPM hashes that are allowed to connect. | `[]` | | `nodeAttestor.tpmDirect.hashes` | A list of TPM hashes that are allowed to connect. | `[]` |
| `bundlePublisher.awsRolesAnywhereTrustAnchor.enabled` | Enable the AWS S3 bundle publisher | `false` |
| `bundlePublisher.awsRolesAnywhereTrustAnchor.region` | AWS region to store the trust bundle | `""` |
| `bundlePublisher.awsRolesAnywhereTrustAnchor.trustAnchorID` | AWS trust anchor ID to publish to | `""` |
| `bundlePublisher.awsS3.enabled` | Enable the AWS S3 bundle publisher | `false` |
| `bundlePublisher.awsS3.region` | AWS region to store the trust bundle | `""` |
| `bundlePublisher.awsS3.bucket` | AWS S3 bucket name to which the trust bundle is uploaded | `""` |
| `bundlePublisher.awsS3.objectKey` | AWS S3 object key inside the bucket | `""` |
| `bundlePublisher.awsS3.format` | Format in which the trust bundle is stored. Valid options [spiffe, jwks, pem] | `""` |
| `bundlePublisher.gcpCloudStorage.enabled` | Enable the Google Cloud Storage bundle publisher | `false` |
| `bundlePublisher.gcpCloudStorage.bucketName` | Google Cloud Storage bucket name to which the trust bundle is uploaded | `""` |
| `bundlePublisher.gcpCloudStorage.objectName` | Google Cloud Storage object name | `""` |
| `bundlePublisher.gcpCloudStorage.format` | Format in which the trust bundle is stored. Valid options [spiffe, jwks, pem] | `""` |
### Tornjak ### Tornjak
@@ -387,6 +399,9 @@ In order to run Tornjak with simple HTTP Connection only, make sure you don't cr
| `tornjak.config.clientCA.name` | Name of the resource secret or configMap with user CA for TLS | `tornjak-client-ca` | | `tornjak.config.clientCA.name` | Name of the resource secret or configMap with user CA for TLS | `tornjak-client-ca` |
| `tornjak.resources` | Resource requests and limits | `{}` | | `tornjak.resources` | Resource requests and limits | `{}` |
| `tornjak.securityContext` | Security Context to use | `{}` | | `tornjak.securityContext` | Security Context to use | `{}` |
| `secrets.aws.accessKeyID` | AWS Access Key ID | `""` |
| `secrets.aws.secretAccessKey` | AWS Secret Access Key | `""` |
| `secrets.gcp.applicationCredentials` | Google Application Credentials | `""` |
| `customPlugins.bundlePublisher` | Custom plugins of type BundlePublisher are configured here | `{}` | | `customPlugins.bundlePublisher` | Custom plugins of type BundlePublisher are configured here | `{}` |
| `customPlugins.credentialComposer` | Custom plugins of type CredentialComposer are configured here | `{}` | | `customPlugins.credentialComposer` | Custom plugins of type CredentialComposer are configured here | `{}` |
| `customPlugins.keyManager` | Custom plugins of type KeyManager are configured here | `{}` | | `customPlugins.keyManager` | Custom plugins of type KeyManager are configured here | `{}` |
@@ -1,17 +0,0 @@
{{- $root := . }}
{{- with .Values.keyManager.awsKMS }}
{{- if or (ne .accessKeyID "") (ne .secretAccessKey "") }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "spire-server.fullname" $root }}-aws-kms
namespace: {{ include "spire-server.namespace" $root }}
data:
{{- if ne .accessKeyID "" }}
AWS_KMS_ACCESS_KEY_ID: {{ .accessKeyID | b64enc }}
{{- end }}
{{- if ne .secretAccessKey "" }}
AWS_KMS_SECRET_ACCESS_KEY: {{ .secretAccessKey | b64enc }}
{{- end }}
{{- end }}
{{- end }}
@@ -0,0 +1,24 @@
{{- $root := . }}
{{- if or (ne .Values.keyManager.awsKMS.accessKeyID "") (ne .Values.keyManager.awsKMS.secretAccessKey "") (ne .Values.secrets.aws.accessKeyID "") (ne .Values.secrets.aws.secretAccessKey "") (ne .Values.secrets.gcp.applicationCredentials "") }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "spire-server.fullname" $root }}-cloud
namespace: {{ include "spire-server.namespace" $root }}
data:
{{- if ne .Values.keyManager.awsKMS.accessKeyID "" }}
AWS_KMS_ACCESS_KEY_ID: {{ .Values.keyManager.awsKMS.accessKeyID | b64enc }}
{{- end }}
{{- if ne .Values.keyManager.awsKMS.secretAccessKey "" }}
AWS_KMS_SECRET_ACCESS_KEY: {{ .Values.keyManager.awsKMS.secretAccessKey | b64enc }}
{{- end }}
{{- if ne .Values.secrets.aws.accessKeyID "" }}
AWS_ACCESS_KEY_ID: {{ .Values.secrets.aws.accessKeyID | b64enc }}
{{- end }}
{{- if ne .Values.secrets.aws.secretAccessKey "" }}
AWS_SECRET_ACCESS_KEY: {{ .Values.secrets.aws.secretAccessKey | b64enc }}
{{- end }}
{{- if ne .Values.secrets.gcp.applicationCredentials "" }}
GOOGLE_APPLICATION_CREDENTIALS: {{ .Values.secrets.gcp.applicationCredentials | b64enc }}
{{- end }}
{{- end }}
@@ -247,6 +247,31 @@ plugins:
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- if or .Values.bundlePublisher.awsRolesAnywhereTrustAnchor.enabled .Values.bundlePublisher.awsS3.enabled .Values.bundlePublisher.gcpCloudStorage.enabled }}
BundlePublisher:
{{- if .Values.bundlePublisher.awsRolesAnywhereTrustAnchor.enabled }}
aws_rolesanywhere_trustanchor:
plugin_data:
region: {{ .Values.bundlePublisher.awsRolesAnywhereTrustAnchor.region | quote }}
trust_anchor_id: {{ .Values.bundlePublisher.awsRolesAnywhereTrustAnchor.trustAnchorID | quote }}
{{- end }}
{{- if .Values.bundlePublisher.awsS3.enabled }}
aws_s3:
plugin_data:
region: {{ .Values.bundlePublisher.awsS3.region | quote }}
bucket: {{ .Values.bundlePublisher.awsS3.bucket | quote }}
object_key: {{ .Values.bundlePublisher.awsS3.objectKey | quote }}
format: {{ .Values.bundlePublisher.awsS3.format | quote }}
{{- end }}
{{- if .Values.bundlePublisher.gcpCloudStorage.enabled }}
gcp_cloudstorage:
plugin_data:
bucket_name: {{ .Values.bundlePublisher.gcpCloudStorage.bucketName | quote }}
object_name: {{ .Values.bundlePublisher.gcpCloudStorage.objectName | quote }}
format: {{ .Values.bundlePublisher.awsS3.format | quote }}
{{- end }}
{{- end }}
{{- with .Values.upstreamAuthority.disk }} {{- with .Values.upstreamAuthority.disk }}
{{- if eq (.enabled | toString) "true" }} {{- if eq (.enabled | toString) "true" }}
{{- $upstreamAuthorityUsed = add1 $upstreamAuthorityUsed }} {{- $upstreamAuthorityUsed = add1 $upstreamAuthorityUsed }}
@@ -174,16 +174,37 @@ spec:
- name: AWS_KMS_ACCESS_KEY_ID - name: AWS_KMS_ACCESS_KEY_ID
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ $fullname }}-aws-kms name: {{ $fullname }}-cloud
key: AWS_KMS_ACCESS_KEY_ID key: AWS_KMS_ACCESS_KEY_ID
{{- end }} {{- end }}
{{- if ne .Values.keyManager.awsKMS.secretAccessKey "" }} {{- if ne .Values.keyManager.awsKMS.secretAccessKey "" }}
- name: AWS_KMS_SECRET_ACCESS_KEY - name: AWS_KMS_SECRET_ACCESS_KEY
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ $fullname }}-aws-kms name: {{ $fullname }}-cloud
key: AWS_KMS_SECRET_ACCESS_KEY key: AWS_KMS_SECRET_ACCESS_KEY
{{- end }} {{- end }}
{{- if ne .Values.secrets.aws.accessKeyID "" }}
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ $fullname }}-cloud
key: AWS_ACCESS_KEY_ID
{{- end }}
{{- if ne .Values.secrets.aws.secretAccessKey "" }}
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ $fullname }}-cloud
key: AWS_SECRET_ACCESS_KEY
{{- end }}
{{- if ne .Values.secrets.gcp.applicationCredentials "" }}
- name: GOOGLE_APPLICATION_CREDENTIALS
valueFrom:
secretKeyRef:
name: {{ $fullname }}-cloud
key: GOOGLE_APPLICATION_CREDENTIALS
{{- end }}
ports: ports:
- name: grpc - name: grpc
containerPort: 8081 containerPort: 8081
@@ -849,6 +849,36 @@ nodeAttestor:
## @param nodeAttestor.tpmDirect.hashes A list of TPM hashes that are allowed to connect. ## @param nodeAttestor.tpmDirect.hashes A list of TPM hashes that are allowed to connect.
hashes: [] hashes: []
# The secrets needed for this plugin are configured in the secrets: section
bundlePublisher:
awsRolesAnywhereTrustAnchor:
## @param bundlePublisher.awsRolesAnywhereTrustAnchor.enabled Enable the AWS S3 bundle publisher
enabled: false
## @param bundlePublisher.awsRolesAnywhereTrustAnchor.region AWS region to store the trust bundle
region: ""
## @param bundlePublisher.awsRolesAnywhereTrustAnchor.trustAnchorID AWS trust anchor ID to publish to
trustAnchorID: ""
awsS3:
## @param bundlePublisher.awsS3.enabled Enable the AWS S3 bundle publisher
enabled: false
## @param bundlePublisher.awsS3.region AWS region to store the trust bundle
region: ""
## @param bundlePublisher.awsS3.bucket AWS S3 bucket name to which the trust bundle is uploaded
bucket: ""
## @param bundlePublisher.awsS3.objectKey AWS S3 object key inside the bucket
objectKey: ""
## @param bundlePublisher.awsS3.format Format in which the trust bundle is stored. Valid options [spiffe, jwks, pem]
format: ""
gcpCloudStorage:
## @param bundlePublisher.gcpCloudStorage.enabled Enable the Google Cloud Storage bundle publisher
enabled: false
## @param bundlePublisher.gcpCloudStorage.bucketName Google Cloud Storage bucket name to which the trust bundle is uploaded
bucketName: ""
## @param bundlePublisher.gcpCloudStorage.objectName Google Cloud Storage object name
objectName: ""
## @param bundlePublisher.gcpCloudStorage.format Format in which the trust bundle is stored. Valid options [spiffe, jwks, pem]
format: ""
## @section Tornjak ## @section Tornjak
tornjak: tornjak:
## @param tornjak.enabled Deploys Tornjak API (backend) (Not for production) ## @param tornjak.enabled Deploys Tornjak API (backend) (Not for production)
@@ -964,6 +994,16 @@ tornjak:
## @param tornjak.securityContext [object] Security Context to use ## @param tornjak.securityContext [object] Security Context to use
securityContext: {} securityContext: {}
secrets:
aws:
## @param secrets.aws.accessKeyID AWS Access Key ID
accessKeyID: ""
## @param secrets.aws.secretAccessKey AWS Secret Access Key
secretAccessKey: ""
gcp:
## @param secrets.gcp.applicationCredentials Google Application Credentials
applicationCredentials: ""
# NOTE: This is unsupported and only to configure currently supported spire built in plugins but plugins unsupported by the chart. # NOTE: This is unsupported and only to configure currently supported spire built in plugins but plugins unsupported by the chart.
# Upgrades wont be tested for anything under this config. If you need this, please let the chart developers know your needs so we # Upgrades wont be tested for anything under this config. If you need this, please let the chart developers know your needs so we
# can prioritize proper support. # can prioritize proper support.