This page explains the Google Cloud service accounts and keys that you need to install GKE on-prem.
Overview of service accounts
Before you install GKE on-prem, you need to have these service accounts:
- Allowlisted service account
- Connect-register service account
- Connect-agent service account
- Logging-monitoring service account
Depending on the features you want to enable, you might also need to have some optional service accounts.
Understanding service accounts and Google Cloud projects
When you create a service account, you create it in a Google Cloud project. The Google Cloud project where you create a service account is called the parent project of the service account. The service account is a member of its parent project.
You can determine the parent project of a service account by looking at the
email address of the service account. For example, here is the email address
of a service account named logger
. The parent project is alice-123
.
logger@alice-123.iam.gserviceaccount.com
When you grant an Identity and Access Management (IAM) role to a service account, you grant the role to the service account on a particular Google Cloud project.This follows the general pattern of granting a role to an identity on a resource.
For example, you could grant the bigquery.dataEditor
role to the
logger@alice-123.iam.gserviceaccount.com
service account on the
bob-456
project. In this case, the service account is the identity, and the
Google Cloud project is the resource.
It is important to understand that you can grant a role to a service account on a project that is not the parent project of the service account.
Allowlisted service account
You already have an allowlisted service account.
If you have not already created a JSON key file for your allowlisted service account, create one now:
gcloud iam service-accounts keys create whitelisted-key.json \ --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]
where [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL] is the email address of your allowlisted service account.
Granting roles to your allowlisted service account
The GKE on-prem configuration file has several fields that specify a Google Cloud project ID.
usercluster: usagemetering: bigqueryprojectid: "" ... gkeconnect: projectid: "" ... stackdriver: projectid: "" ... cloudauditlogging: projectid: ""
The project IDs in your GKE on-prem configuration file do not have
to be distinct. For example gkeconnect.projectid
could be the same as
stackdriver.projectid
. In fact, all of the project IDs in your configuration
file could be the same.
Your allowlisted service account must be granted the following IAM roles on each project that is specified in your GKE on-prem configuration file:
- serviceusage.serviceUsageViewer
- iam.serviceAccountCreator
- iam.roleViewer
If you used gkeadm
to create your admin workstation, then gkeadm
set the
following fields in your GKE on-prem configuration file to the ID of
the parent project of your allowlisted service account.
gkeconnect.projectid
stackdriver.projectid
Also, gkeadm
granted your allowlisted service account the required roles on the
parent project of your allowlisted service account.
If you did not use gkeadm
to create your admin workstation, then you must
grant the roles yourself.
For each project that is specified in your GKE on-prem configuration file, grant your allowlisted service account the required roles:
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/iam.serviceAccountCreator"
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/iam.roleViewer"
where [PROJECT_ID] is the ID of one of the projects you specified in your GKE on-prem configuration file.
Other required service accounts
Recall that in addition to your allowlisted service account, you need these service accounts:
- connect-register service account
- connect-agent service account
- logging-monitoring service account
Depending on how you created your admin workstation, you might already have these service accounts.
Case 1: gkeadm created service accounts for you.
If you used gkeadm
to create your admin workstation and you passed the
--auto-create-service-accounts
flag, then gkeadm
did the following for you:
Created a connect-register service account. Granted the appropriate IAM roles to the connect-register service account. Created a JSON key file for the connect-register service account. Copied the JSON key file to your admin workstation.
Created a connect-agent service account. Granted the appropriate IAM roles to the connect-agent service account. Created a JSON key file for the connect-agent service account. Copied the JSON key file to your admin workstation.
Created a logging-monitoring service account. Granted the appropriate IAM roles to the logging-monitoring service account. Created a JSON key file for the logging-monitoring service account. Copied the JSON key file to your admin workstation.
When gkeadm
creates service accounts for you, it creates the accounts in the
Google Cloud project that is the parent of your allowlisted service account.
Also, gkeadm
grants roles to the service accounts on that same project. For
information about using more than one Google Cloud project, see
Using multiple Google Cloud projects.
Case 2: gkeadm did not create service accounts for you.
If you did not use gkeadm
with the --auto-create-service-accounts
flag to
create your admin workstation, then you must create your own service accounts.
Also, for each service account, you must create a JSON key file and grant the
appropriate IAM roles.
Creating your own service accounts
If you already have service accounts as described in Case 1, you can skip this section.
This section shows how to create the service accounts that you need to install and use GKE on-prem. It also shows how to create JSON key files for your service accounts and how to grant the appropriate IAM roles to your service accounts.
Connect-register service account
Connect uses this service account to register your GKE on-prem clusters with Google Cloud.
Create your connect-register service account::
gcloud iam service-accounts create connect-register-svc-account --project [PARENT_PROJECT_ID]
where [PARENT_PROJECT_ID] is the ID of the project that you want to be the parent of your connect-register service account.
Create a key for your connect-register service account:
gcloud iam service-accounts keys create connect-register-key.json \ --iam-account [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]
where [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL] is the email address of your connect-register service account.
Grant the gkehub.admin
role to your connect-register service account:
gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \ --member "serviceAccount:[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/gkehub.admin"
here [CONNECT_PROJECT_ID] is the ID of your connect project. This is the project where you want to register and maintain a connection to your GKE on-prem clusters.
Connect-agent service account
Connect uses this service account to maintain a connection between GKE on-prem and Google Cloud.
Create your connect-agent service account:
gcloud iam service-accounts create connect-agent-svc-account --project [PARENT_PROJECT_ID]
where [PARENT_PROJECT_ID] is the ID of the project that you want to be the parent of your connect-agent service account.
Create a key for your connect-agent service account:
gcloud iam service-accounts keys create connect-agent-key.json \ --iam-account [CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]
where [CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL] is the email address of your connect-agent service account.
Grant the gkehub.connect
role to your connect-agent service account:
gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \ --member "serviceAccount:[CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/gkehub.connect"
where [CONNECT_PROJECT_ID] is the ID of your connect project. This is the project where you want to register and maintain a connection to your GKE on-prem clusters.
Logging-monitoring service account
Connect uses this service account to export logs from clusters to Cloud Logging.
Create your logging-monitoring service account:
gcloud iam service-accounts create logging-monitoring-svc-account --project [PARENT_PROJECT_ID]
where [PARENT_PROJECT_ID] is the ID of the project that you want to be the parent of your logging-monitoring service account.
Create a key for your logging-monitoring service account:
gcloud iam service-accounts keys create logging-monitoring-key.json \ --iam-account [LOG_MON_SERVICE_ACCOUNT_EMAIL]
where [LOG_MON_SERVICE_ACCOUNT_EMAIL] is the email address of your logging-monitoring service account.
Grant the stackdriver.resourceMetadata.writer
, logging.logWriter
, and
monitoring.metricWriter
roles to your logging-monitoring service account:
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \ --member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/stackdriver.resourceMetadata.writer"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \ --member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \ --member "serviceAccount:[LOG_MON_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/monitoring.metricWriter"
where [LOG_MON_PROJECT_ID] is the ID of your logging-monitoring project. This is the project where you want to view logs for your GKE on-prem clusters.
Optional service accounts
Usage metering service account
GKE usage metering uses this service account to store usage data in a BigQuery dataset.
If you want to enable GKE usage metering for a cluster, you need
to have a usage metering service account. The gkeadm
tool does not create this
service account for you, so you must create it yourself.
Create your usage metering service account:
gcloud iam service-accounts create usage-metering-svc-account --project [PARENT_PROJECT_ID]
where [PARENT_PROJECT_ID] is the ID of the project that you want to be the parent of your usage metering service account.
Create a key for your usage metering service account:
gcloud iam service-accounts keys create usage-metering-key.json \ --iam-account [USAGE_METERING_SERVICE_ACCOUNT_EMAIL]
where [USAGE_METERING_SERVICE_ACCOUNT_EMAIL] is the email address of your usage metering service account.
Grant the bigquery.dataEditor
role to your usage metering service account:
gcloud projects add-iam-policy-binding [USAGE_METERING_PROJECT_ID] \ --member "serviceAccount:[USAGE_METERING_SERVICE_ACCOUNT_EMAIL]" \ --role "roles/bigquery.dataEditor"
where [USAGE_METERING_PROJECT_ID] is the ID of your usage metering project. This is the project where you want to view usage data for your GKE on-prem cluster.
Audit logging service account
GKE on-prem uses this service account to send Kubernetes audit logs from your cluster to Cloud Audit Logs.
If you want to enable Cloud Audit Logs for your GKE on-prem
installation, you need to have an audit logging service account. The gkeadm
tool does not create this service account for you, so you must create it
yourself.
Create your audit logging service account:
gcloud iam service-accounts create audit-logging-svc-account --project [PARENT_PROJECT_ID]
where [PARENT_PROJECT_ID] is the ID of the Google Cloud project that you want to be the parent of your audit logging service account.
Create a key for your audit logging service account:
gcloud iam service-accounts keys create audit-logging-key.json \ --iam-account [AUDIT_LOGGINGSERVICE_ACCOUNT_EMAIL]
where [AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL] is the email address of your audit logging service account.
You do not need to grant any roles to your audit logging service account.