New to KubeVault? Please start here.

GCPRole

What is GCPRole

A GCPRole is a Kubernetes CustomResourceDefinition (CRD) which allows a user to create a GCP secret engine role in a Kubernetes native way.

When a GCPRole is created, the KubeVault operator configures a Vault roleset. The rolesets determine the permissions that Service Account credentials generated by Vault will have on GCP resources. If the user deletes the GCPRole CRD, then the respective role will also be deleted from Vault.

For maintaining similarity with other secret engines we will refer roleset as role in the following description.

GCPRole CRD

GCPRole CRD Specification

Like any official Kubernetes resource, a GCPRole object has TypeMeta, ObjectMeta, Spec and Status sections.

A sample GCPRole object is shown below:

apiVersion: engine.kubevault.com/v1alpha1
kind: GCPRole
metadata:
  name: gcp-role
  namespace: demo
spec:
  secretEngineRef:
    name: gcp-secret-engine
  secretType: access_token
  project: ackube
  bindings: 'resource "//cloudresourcemanager.googleapis.com/projects/ackube" {
    roles = ["roles/viewer"]
    }'
  tokenScopes: ["https://www.googleapis.com/auth/cloud-platform"]
status:
  observedGeneration: 1
  phase: Success

Note: To resolve the naming conflict, name of the role in Vault will follow this format: k8s.{clusterName}.{metadata.namespace}.{metadata.name}

Here, we are going to describe the various sections of the GCPRole crd.

GCPRole Spec

GCPRole spec contains the necessary information required to create a GCP secret engine role.

spec:
  secretEngineRef:
    name: <gcp-secret-engine>
  path: <gcp-secret-engine-path>
  secretType: <generated-secret-type>
  project: <svc-ac-owner-project>
  bindings: <bindings>
  tokenScopes: <OAuth-scopes>

GCPRole spec has the following fields:

spec.secretEngineRef

spec.secretEngineRef is a required field that specifies the name of a SecretEngine.

spec:
  secretEngineRef:
    name: gcp-secret-engine

spec.secretType

spec.secretType is a required field that specifies the type of secret generated for this roleset. Accepted values: access_token, service_account_key.

spec:
  secretType: access_token

spec.project

spec.project is a required field that specifies the name of the GCP project where roleset’s service account belongs to.

spec:
  project: ackube

spec.bindings

spec.bindings is a required field that specifies the bindings configuration string.

spec:
  bindings: 'resource "//cloudresourcemanager.googleapis.com/projects/ackube" {
    roles = ["roles/viewer"]
    }'

spec.tokenScopes

spec.tokenScopes is an optional field that specifies the list of OAuth scopes to assign to access_token secrets generated under this role set (access_token role sets only)

spec:
  tokenScopes: ["https://www.googleapis.com/auth/cloud-platform"]

GCPRole Status

status shows the status of the GCPRole. It is managed by the KubeVault operator. It contains the following fields:

  • observedGeneration: Specifies the most recent generation observed for this resource. It corresponds to the resource’s generation, which is updated on mutation by the API Server.

  • phase: Indicates whether the role successfully applied to Vault or not.

  • conditions : Represent observations of a GCPRole.