Permissions for the provisioning credential's service account
To allow Cloudera to access and provision resources in your Google Cloud project, you must create a service account in your Google Cloud project and assign the following roles or granular permissions. Next, generate a JSON access key that can later be provided to Cloudera. Cloudera will assume this service account via the service account access key provided during credential creation for provisioning resources for your environment.
- Project-level IAM: Assign the following IAM roles at the project level. This is a simpler option.
- Custom IAM: You can create custom IAM roles with the following granular IAM permissions assigned, and then assign the role to the service account at the project level. This allows you to minimize the number of permissions granted to Cloudera.
| IAM role | Scope | Description |
|---|---|---|
|
iam.serviceAccounts.list IAM permission |
Project |
This is required for Cloudera to list service account names that you created in your GCP project. You need to create a custom role to assign this permission. |
|
Compute Instance Admin (v1) |
Project |
This is required to provision Compute Engine instances, disks, and images in your VPC. |
|
Storage Admin |
Project |
This is required to create a storage bucket to store the Cloudbreak image objects. Delete permissions are not required. |
|
Compute Network Viewer |
Project |
This is required for read-only access to all networking resources. |
|
Compute Load Balancer Admin |
Project |
This role is required for FreeIPA load balancing and to have a static FreeIPA endpoint amongst upgrades. |
|
Cloud SQL Admin |
Project |
This is required for Cloudera to have permission to create and delete heavy-duty flow management Cloudera Data Hub clusters cleanly. |
|
Compute Network User |
Project |
This is required for shared VPC only. If you want to use a shared VPC, you need this additional role in the scope of the host project of the VPC. |
|
Compute Public IP Admin |
Project |
This is required only when not using Cluster Connectivity Manager (CCM). This additional role is required only if you plan to disable CCM for your environment. |
| Granular IAM permissions | Scope | Description |
|---|---|---|
| Required for data encryption and decryption. | ||
|
cloudkms.cryptoKeys.list |
Project |
List all the keys inside any key ring. |
|
cloudkms.keyRings.list |
Project |
List all the available key rings in the project. |
|
cloudkms.cryptoKeyVersions.useToEncrypt |
Project |
Use a key to encrypt data. |
|
cloudkms.cryptoKeyVersions.useToDecrypt |
Project |
Use a key to decrypt data. |
| Required to create, stop, start, and delete an external database from the Data Hub clusters. | ||
|
cloudsql.instances.create |
Project |
Create a new Cloud SQL instance. |
|
cloudsql.instances.delete |
Project |
Delete a Cloud SQL instance. |
|
cloudsql.instances.get |
Project |
View details of a Cloud SQL instance. |
|
cloudsql.instances.list |
Project |
List all the Cloud SQL instances. |
|
cloudsql.instances.update |
Project |
Update a Cloud SQL instance. |
|
cloudsql.users.create |
Project |
Create a new user on a Cloud SQL instance. |
|
cloudsql.instances.startReplica |
Project |
Enables the creation of a read replica of an existing Cloud SQL instance. |
|
cloudsql.instances.stopReplica |
Project |
Stop the replication process. |
|
cloudsql.instances.restart |
Project |
Enable the restart process of a Cloud SQL instance. |
| Required to create VMs from images in your VPC. | ||
|
compute.addresses.create |
Project |
Create external IP addresses that can be assigned to Google Cloud resources such as virtual machine (VM) instances, load balancers, etc. |
|
compute.addresses.get |
Project |
Display both internal and external IP addresses. |
|
compute.addresses.use |
Project |
Use both internal and external IP addresses. |
|
compute.disks.create |
Project |
Create disks for the VM instances. |
|
compute.disks.delete |
Project |
Clean up the disks. |
|
compute.disks.setLabels |
Project |
Set or modify disk labels (you or a service account). |
|
compute.disks.use |
Project |
Use the disk. |
|
compute.firewalls.list |
Project |
List the firewall rules associated with a project (you or a service account). |
|
compute.forwardingRules.create |
Project |
Create forwarding rules. |
|
compute.forwardingRules.delete |
Project |
Delete forwarding rules. |
|
compute.forwardingRules.list |
Project |
List all forwarding rules. |
|
compute.globalOperations.get |
Project |
View the status of global operations in Google Cloud, such as creating or deleting global resources. |
|
compute.images.get |
Project |
View details of a specific image (you or a service account). |
|
compute.images.useReadOnly |
Project |
Use an image, but only in read-only mode. |
|
compute.instanceGroups.create |
Project |
Create instance groups. |
|
compute.instanceGroups.delete |
Project |
Delete instance groups. |
|
compute.instanceGroups.get |
Project |
Get information about a particular instance group. |
|
compute.instanceGroups.update |
Project |
Update an instance group. |
|
compute.instanceGroups.use |
Project |
Use an instance group. |
|
compute.instances.create |
Project |
Create VM instances. |
|
compute.instances.delete |
Project |
Delete VM instances, |
|
compute.instances.get |
Project |
Get information about a particular instance. |
|
compute.instances.setLabels |
Project |
Set or modify labels on a VM instance. |
|
compute.instances.setMetadata |
Project |
Set or update the metadata of a VM instance. |
|
compute.instances.setServiceAccount |
Project |
Set or update the service account associated with a VM. |
|
compute.instances.setTags |
Project |
Set or modify tags on a VM instance. |
|
compute.instances.start |
Project |
Start the instances. |
|
compute.instances.stop |
Project |
Stop the instances. |
|
compute.instances.update |
Project |
Modify the configuration of a specific instance. Useful for vertical scaling. |
|
compute.instances.use |
Project |
Use a VM instance. |
|
compute.machineTypes.list |
Project |
List the virtual hardware configuration for a VM. |
|
compute.networks.list |
Project |
List all the available networks. |
|
compute.regionBackendServices.create |
Project |
Create a regional backend service. A regional backend service is part of the infrastructure that routes traffic to backend instances or groups within a specific region. This is useful for load balancers. |
|
compute.regionBackendServices.delete |
Project |
Delete a regional backend service. |
|
compute.regionBackendServices.use |
Project |
Use a regional backend service. |
|
compute.regionHealthChecks.create |
Project |
Create health checks that monitor the health of the backend services, an important feature for load balancers. |
|
compute.regionHealthChecks.delete |
Project |
Delete health checks. |
|
compute.regionHealthChecks.useReadOnly |
Project |
Use health checks restricted to read-only mode. |
|
compute.regionOperations.get |
Project |
View the status of region operations in Google Cloud. This is required regardless of globalOperations get permissions because both have different scopes. |
|
compute.regions.get |
Project |
Get information about a specific region. |
|
compute.regions.list |
Project |
List all the regions in the project. |
|
compute.subnetworks.list |
Project |
List all the subnets in the project. |
|
compute.subnetworks.use |
Project |
Use subnets. |
|
compute.subnetworks.useExternalIp |
Project |
Assign external IP addresses to VM instances. If this is enabled, attempting to create a VM instance with an external IP address will fail. |
|
compute.zoneOperations.get |
Project |
View zone operations statuses in Google Cloud. This is required for both global and regional level permissions. |
|
compute.images.create |
Project |
Create a new image. This is required if you want to use a custom image. |
|
compute.addresses.delete |
Project |
Delete static IP addresses that are allocated within a specific region or globally in Google Cloud (you or a service account). |
|
compute.forwardingRules.setLabels |
Project |
Set or update forwarding rules labels. |
|
compute.forwardingRules.use |
Project |
Use forwarding rules, most often used by load balancers to balance the traffic to backend services. |
|
compute.regionHealthChecks.update |
Project |
Update the health checks that monitor the backend services. |
|
compute.addresses.createInternal |
Project |
Create internal IP addresses within a Virtual Private Cloud (VPC). These internal IP addresses are used for private communication within your network, not exposed to the Internet. |
|
compute.firewalls.create |
Project |
Create firewall rules (you or a service account). |
|
compute.firewalls.delete |
Project |
Delete firewall rules (you or a service account). |
|
compute.subnetworks.get |
Project |
Get details about a specific subnet. |
|
compute.networks.get |
Project |
Get details about a specific network. |
| These are required for Cloudera to access the service accounts that you created. | ||
|
iam.serviceAccounts.actAs |
Project |
Allows you or a service account to impersonate a service account. |
|
iam.serviceAccounts.list |
Project |
List all the service accounts within a specific project. |
| (Optional) By default, Cloudera creates this bucket, but you can pre-create it. This is not required if you are planning to pre-create the GCS bucket for storing OS images for VMs. See Storage bucket for OS images. | ||
|
storage.buckets.get |
Project |
Get all the storage buckets from a specific project. |
|
storage.objects.create |
Project |
Upload objects to the storage accounts. |
|
storage.objects.delete |
Project |
Delete objects from the storage accounts. |
|
storage.objects.get |
Project |
Retrieve objects from the storage account. This does not allow the listing of objects in the storage bucket. |
