Google Service Account
Service Accounts
You can automatically create the Google Service Account associated with the GKE Workload Identity.
Here’s a Kubes hook that creates a service account:
.kubes/config/hooks/kubes.rb
service_account = KubesGoogle::ServiceAccount.new(
app: "demo",
namespace: "demo-#{Kubes.env}", # defaults to APP-ENV when not set. IE: demo-dev
roles: ["cloudsql.client", "secretmanager.viewer"], # defaults to empty when not set
)
before("apply",
label: "create service account",
execute: service_account,
)
The corresponding Kubernetes Service account looks like this:
.kubes/resources/shared/service_account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
iam.gke.io/gcp-service-account: demo-<%= Kubes.env %>@<%= ENV['GOOGLE_PROJECT'] %>.iam.gserviceaccount.com
name: demo
labels:
app: demo
The role permissions are currently always added to the existing permissions. So removing roles that were previously added does not remove them.
Variables
ServiceAccount#initialize options:
Variable | Description | Default |
---|---|---|
app | The app name. It’s used to set other variables conventionally. This is required. | nil |
gsa | The Google Service Account name. The conventional name is APP-ENV. IE: demo-dev. | APP-ENV |
ksa | The Kubernetes Service Account name. The conventional name is APP. IE: demo | APP |
namespace | The Kubernetes namespace. Defaults to the APP-ENV. IE: demo-dev. | APP-ENV |
roles | Google IAM roles to add. This adds permissions to the Google service account. | [] |
Relevant environment variables:
Name | Description |
---|---|
GOOGLE_PROJECT | Google project id. This is required as it’s used to build the full service account name. |