This document includes the best practices and guidelines for building a secure enterprise foundation when running generative AI workloads that use Google Cloud. A secure enterprise foundation includes controls for the following:
- Authentication and authorization
- Organization
- Networking
- Logging, monitoring, and alerting
- Key and secret management
- Security posture and analytics
Authentication and authorization
This section includes the best practices and guidelines for Identity and Access Management (IAM) and Cloud Identity when running generative AI workloads on Google Cloud.
Disable automatic IAM grants for default service accounts
| Google control ID | IAM-CO-4.1 |
|---|---|
| Implementation | Required |
| Description | Use the By default, some systems grant overly broad permissions to automated accounts, which is a potential security risk. For example, if you don't enforce this constraint and you create a default service account, the service account is automatically granted the Editor role ( |
| Applicable products |
|
| Path | constraints/iam.automaticIamGrantsForDefaultServiceAccounts |
| Operator | Is |
| Value |
|
| Type | Boolean |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Block the creation of external service account keys
| Google control ID | IAM-CO-4.2 |
|---|---|
| Implementation | Required |
| Description | Use the |
| Applicable products |
|
| Path | constraints/iam.disableServiceAccountKeyCreation |
| Operator | Is |
| Value |
|
| Type | Boolean |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Block service account key uploads
| Google control ID | IAM-CO-4.3 |
|---|---|
| Implementation | Required |
| Description | Use the |
| Applicable products |
|
| Path | constraints/iam.disableServiceAccountKeyUpload |
| Operator | Is |
| Value |
|
| Type | Boolean |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Configure separation of duties for organization policy administrators
| Google control ID | OPS-CO-6.1 |
|---|---|
| Implementation | Required |
| Description | Assign the Organization Policy Administrator ( roles/orgpolicy.policyAdmin) role to groups that are accountable for the security posture of the Google Cloud organization. To avoid resource creation that violates security policy, don't assign this role to project owners. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable two-step verification for super admin accounts
| Google control ID | CI-CO-6.1 |
|---|---|
| Implementation | Required |
| Description | Google recommends Titan Security Keys for 2-step verification (2SV) for super admin accounts. However, for use cases where this isn't possible, we recommend using another security key as an alternative. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enforce two-step verification on the super admin organization unit
| Google control ID | CI-CO-6.2 |
|---|---|
| Implementation | Required |
| Description | Enforce 2-step verification (2SV) for a specific organization unit (OU) or the entire organization. We recommend that you create an OU for super admins and enforce 2SV on that OU. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Create an exclusive email address for the primary super admin
| Google control ID | CI-CO-6.4 |
|---|---|
| Implementation | Required |
| Description | Create an email address that's not specific to a particular user as the primary Cloud Identity super admin account. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Create redundant administrator accounts
| Google control ID | CI-CO-6.7 |
|---|---|
| Implementation | Required |
| Description | Don't have a single super admin or Organization Administrator. Create one or more (up to 20) backup administrator accounts. A single super admin or Organization Administrator can result in lockout scenarios. This situation also carries a higher risk as one person can make platform-altering changes, potentially with no oversight. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Implement tags to efficiently assign Identity and Access Management (IAM) policies and organization policies
| Google control ID | IAM-CO-6.1 |
|---|---|
| Implementation | Recommended |
| Description | Tags provide a way to create annotations for resources, and in some cases conditionally allow or deny policies based on whether a resource has a specific tag. Use tags and conditional policy enforcement for fine-grained control across your resource hierarchy. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Audit high-risk changes to Identity and Access Management (IAM)
| Google control ID | IAM-CO-7.1 |
|---|---|
| Implementation | Recommended |
| Description | Use Cloud Audit Logs to monitor for high-risk activity, such as accounts being granted high-risk roles like Organization Admin and Super Admin. Set up alerts for this type of activity. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Block access to Cloud Shell for Cloud Identity managed user accounts
| Google control ID | CI-CO-6.8 |
|---|---|
| Implementation | Recommended |
| Description | To avoid granting excessive access to Google Cloud, block access to Cloud Shell for Cloud Identity managed user accounts. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Configure Context-Aware Access for Google consoles
| Google control ID | IAM-CO-8.2 |
|---|---|
| Implementation | Optional |
| Description | With Context-Aware Access, you can create granular access control security policies for applications based on attributes such as user identity, location, device security status, and IP address. We recommend that you use Context-Aware Access to restrict access to the the Google Cloud console (https://console.cloud.google.com/) and the Google Admin console (https://admin.cloud.google.com). |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Block account self-recovery for super admin accounts
| Google control ID | CI-CO-6.3 |
|---|---|
| Implementation | Optional |
| Description | An attacker could use the self-recovery process to reset super admin passwords. To mitigate the security risks associated with Signaling System 7 (SS7) attacks, SIM Swap attacks, or other phishing attacks, we recommend that you turn off this feature. To turn off the feature, go to the account recovery settings in the Google Admin console. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Turn off unused Google services
| Google control ID | CI-CO-6.6 |
|---|---|
| Implementation | Optional |
| Description | In general, we recommend turning off the services that you won't use. |
| Applicable products |
|
| Path | http://admin.google.com > Apps > Additional Google Services |
| Operator | Setting |
| Value |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Organization
This section includes the best practices and guidelines for Organization Policy Service and Resource Manager when running generative AI workloads on Google Cloud.
Restrict TLS versions supported by Google APIs
| Google control ID | COM-CO-1.1 |
|---|---|
| Implementation | Required |
| Description | Google Cloud supports multiple TLS protocol versions. To meet compliance requirements, you might want to deny handshake requests from clients that use older TLS versions. To configure this control, use the Restrict TLS Versions ( Due to the behavior of organization policy hierarchy evaluation, the TLS version restriction applies to the specified resource node and all of its folders and projects (children). For example, if you deny TLS version 1.0 for an organization, it is also denied for all children that descend from that organization. You can override the inherited TLS version restriction by updating the organization policy on a child resource. For example, if your organization policy denies TLS 1.0 at the organization level, you can remove the restriction for a child folder by setting a separate organization policy on that folder. If the folder has any children, the folder's policy will also be applied on each child resource due to policy inheritance. To further restrict the TLS version to TLS 1.3 only, you can set this policy to also restrict TLS version 1.2. You must implement this control on applications that you host inside of Google Cloud. For example, at the organization level, set:
|
| Applicable products |
|
| Path | gcp.restrictTLSVersion |
| Operator | == |
| Value |
|
| Type | String |
| Compliance Manager control ID | RESTRICT_LEGACY_TLS_VERSIONS |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Restrict authorized principals
| Google control ID | COM-CO-4.1 |
|---|---|
| Implementation | Required |
| Description | Ensure only identities from your organization are allowed in your Google Cloud environment. Use the Domain restricted sharing ( These constraints help prevent employees from granting access to external accounts outside of your organization's control that don't follow your security policies for multifactor authentication (MFA) or password management. This control is critical for preventing unauthorized access, ensuring that only trusted, managed corporate identities can be used. |
| Applicable products |
|
| Path | constraints/iam.allowedPolicyMemberDomains |
| Operator | Is |
| Value |
|
| Type | List |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Restrict resource service usage
| Google control ID | RM-CO-4.1 |
|---|---|
| Implementation | Required |
| Description | The This constraint lets your organization create an allowlist of approved services, which helps prevent employees from using unvetted services. |
| Applicable products |
|
| Path | constraints/gcp.restrictServiceUsage |
| Operator | Is |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Restrict resource locations
| Google control ID | RM-CO-4.2 |
|---|---|
| Implementation | Required |
| Description | The Resource Location Restriction ( This constraint lets your organization enforce that your resources and data are only created and saved in specific, approved geographic regions. |
| Applicable products |
|
| Path | constraints/gcp.resourceLocations |
| Operator | Is |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Networking
This section includes the best practices and guidelines for Virtual Private Cloud (VPC) and Cloud DNS when running generative AI workloads on Google Cloud.
Block default network creation
| Google control ID | VPC-CO-6.1 |
|---|---|
| Implementation | Required |
| Description | The The default network is an auto-mode Virtual Private Cloud (VPC) network with pre-populated IPv4 firewall rules to allow internal communication paths. Generally, this setup isn't a recommended security posture for production environments. |
| Applicable products |
|
| Path | constraints/compute.skipDefaultNetworkCreation |
| Value |
|
| Type | Boolean |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable DNS Security Extensions
| Google control ID | DNS-CO-6.1 |
|---|---|
| Implementation | Required |
| Description | The Domain Name System Security Extensions (DNSSEC) is a feature of the Domain Name System (DNS) that authenticates responses to domain name lookups. It doesn't provide privacy protections for those lookups, but prevents attackers from manipulating or poisoning the responses to DNS requests. Within Cloud DNS, enable DNSSEC in the following places:
|
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable the service scope restriction in Access Context Manager access policies
| Google control ID | COM-CO-8.1 |
|---|---|
| Implementation | Recommended for generative AI on use cases |
| Description | For every service perimeter, confirm in the Google Cloud console that the perimeter type is set to regular. |
| Applicable products |
|
| Path | accesscontextmanager.accessPolicies.servicePerimeters/perimeterType |
| Operator | == |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Restrict APIs within VPC Service Controls service perimeters
| Google control ID | COM-CO-8.2 |
|---|---|
| Implementation | Recommended for generative AI on use cases |
| Description | For every service perimeter, use Access Context Manager to confirm that the perimeter is protecting the API. |
| Applicable products |
|
| Path | accesscontextmanager.accessPolicies.servicePerimeters/status.restrictedServices |
| Operator | Anyof |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Use zonal DNS
| Google control ID | DNS-CO-4.1 |
|---|---|
| Implementation | Optional |
| Description | The |
| Applicable products |
|
| Path | constraints/compute.setNewProjectDefaultToZonalDNSOnly |
| Operator | = |
| Value |
|
| Type | Boolean |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Logging, monitoring, alerting
This section includes the best practices and guidelines for logging and auditing services in Google Cloud and configuring alerts for services such as Cloud Billing.
Share audit logs from Cloud Identity
| Google control ID | CI-CO-6.5 |
|---|---|
| Implementation | Required |
| Description | If using Cloud Identity, share audit logs from Cloud Identity to Google Cloud. Admin Activity audit logs from Google Workspace or Cloud Identity are ordinarily managed and viewed in the Google Admin console, separately from your logs in your Google Cloud environment. These logs contain information that is relevant for your Google Cloud environment, such as user login events. We recommend that you share Cloud Identity audit logs to your Google Cloud environment to centrally manage logs from all sources. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Use audit logs
| Google control ID | COM-CO-7.3 |
|---|---|
| Implementation | Required |
| Description | Google Cloud services write audit log entries to answer who did what, where, and when with Google Cloud resources. Enable audit logging at the organization level. You can configure logging using the pipeline that you use to set up the Google Cloud organization. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable VPC Flow Logs
| Google control ID | COM-CO-7.4 |
|---|---|
| Implementation | Required |
| Description | VPC Flow Logs record a sample of network flows that are sent from and received by VM instances, including those used as Google Kubernetes Engine (GKE) nodes. The sample is typically 50% or less of the VPC network flows. When you enable VPC Flow Logs, you enable logging for all VMs in a subnet. However, you can reduce the amount of information written to logging. Enable VPC Flow Logs for each VPC subnet. You can configure logging using a pipeline that you use to create a project. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable Firewall Rules Logging
| Google control ID | COM-CO-7.5 |
|---|---|
| Implementation | Required |
| Description | By default, firewall rules don't automatically write logs.Firewall Rules Logging lets you audit, verify, and analyze the effects of your firewall rules. For example, you can determine if a firewall rule designed to deny traffic is functioning as intended. Logging is also useful if you want to determine how many connections are affected by a given firewall rule. Enable logging for each firewall rule. You can configure logging using a pipeline that you use to create a firewall. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable Data Access audit logs
| Google control ID | COM-CO-7.2 |
|---|---|
| Implementation | Recommended for certain use cases |
| Description | To track who accessed data in your Google Cloud environment, enable Data Access audit logs. These logs record API calls that read, create, or modify user data, as well as API calls that read resource configurations. We highly recommend enabling Data Access audit logs for generative AI models and sensitive data to ensure you can audit who has read the information. To use Data Access audit logs, you must set up your own custom detection logic for specific activities, like super admin logins. Data Access audit logs volume can be large. Enabling Data Access logs might result in your Google Cloud project being charged for the additional logs usage. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Configure billing alerts
| Google control ID | CB-CO-6.1 |
|---|---|
| Implementation | Recommended |
| Description | Avoid surprises on your bill by creating Cloud Billing budgets to monitor all of your Google Cloud charges in one place. After you've established a budget amount, set budget alert threshold rules on a per-project basis to trigger email notifications. These notifications help you track your spending against your budget. You can also use Cloud Billing budgets to automate cost-control responses. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Enable Access Transparency logs
| Google control ID | COM-CO-7.7 |
|---|---|
| Implementation | Optional |
| Description | Standard logs show you what your organization's own users are doing, but Access Transparency logs show what Google support staff do when they access the account. This access typically only happens in response to a support request. Access Transparency logs provide a complete and verifiable audit trail of all access, which is essential for meeting strict compliance and data governance requirements. You can enable Access Transparency at the organization level. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Export billing data for detailed analysis
| Google control ID | CB-CO-6.2 |
|---|---|
| Implementation | Optional |
| Description | For further billing analysis, you can export Google Cloud billing data to BigQuery or a JSON file. For example, you can automatically export detailed data, such as usage, cost estimates, and pricing, throughout the day to a BigQuery dataset that you specify. You can then access your Cloud Billing data from BigQuery for detailed analysis, or use a tool like Looker Studio to visualize your data. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Key and secret management
This section includes the best practices and guidelines for Cloud Key Management Service and Secret Manager when running generative AI workloads on Google Cloud.
Encrypt data at rest in Google Cloud
| Google control ID | COM-CO-2.1 |
|---|---|
| Implementation | Required (default) |
| Description | All data in Google Cloud is encrypted at rest by default using NIST-approved algorithms. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Use NIST-approved algorithms for encryption and decryption
| Google control ID | COM-CO-2.4 |
|---|---|
| Implementation | Required |
| Description | Ensure that Cloud Key Management Service (Cloud KMS) only uses NIST-approved algorithms to store sensitive keys in the environment. This control ensures secure key usage by only NIST-approved algorithms and security. The Remove algorithms that don't comply with your organization's policies. |
| Applicable products |
|
| Path | cloudkms.projects.locations.keyRings.cryptoKeys/versionTemplate.algorithm |
| Operator | in |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Set the purpose for Cloud KMS keys
| Google control ID | COM-CO-2.5 |
|---|---|
| Implementation | Required |
| Description | Set the purpose for Cloud KMS keys to |
| Applicable products |
|
| Path | cloudkms.projects.locations.keyRings.cryptoKeys/purpose |
| Operator | == |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Ensure that CMEK settings are appropriate for secure BigQuery data warehouses
| Google control ID | COM-CO-2.6 |
|---|---|
| Implementation | Required |
| Description | The protection level indicates how cryptographic operations are performed. After you create a customer-managed encryption key (CMEK), you can't change the protection level. Supported protection levels are the following:
|
| Applicable products |
|
| Path | cloudkms.projects.locations.keyRings.cryptoKeys/primary.protectionLevel |
| Operator | in |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Rotate encryption key every 90 days
| Google control ID | COM-CO-2.7 |
|---|---|
| Implementation | Required |
| Description | Ensure that the rotation period of your Cloud KMS keys are set to 90 days. A general best practice is to rotate your security keys on a regular interval. This control enforces key rotation for keys that are created with HSM services. When you create this rotation period, also create appropriate policies and procedures to securely handle the creation, deletion, and modification of keying material so that you can help protect your information and ensure availability. Ensure that this period adheres to your corporate policies for key rotation. |
| Applicable products |
|
| Path | cloudkms.projects.locations.keyRings.cryptoKeys/rotationPeriod |
| Operator | <= |
| Value |
|
| Type | int32 |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Set up automatic secret rotation
| Google control ID | SM-CO-6.2 |
|---|---|
| Implementation | Required |
| Description | Automatically rotate secrets and have emergency rotation procedures available in case of a compromise. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Use CMEK for Pub/Sub messages
| Google control ID | PS-CO-6.1 |
|---|---|
| Implementation | Recommended |
| Description | When you enable customer-managed encryption keys (CMEK) for Pub/Sub, you obtain greater control of the encryption keys that Pub/Sub uses to protect your messages. At the application layer, Pub/Sub individually encrypts incoming messages when Pub/Sub receives them. Before Pub/Sub publishes messages to a subscription, it encrypts the messages using the newest data encryption key (DEK) that was generated for the topic. Pub/Sub decrypts the messages shortly before they're delivered to subscribers.
Pub/Sub uses a Google Cloud service account to access Cloud Key Management Service. The service account is maintained internally by Pub/Sub for each project, and isn't visible in your list of service accounts. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Restrict customer-managed encryption keys location
| Google control ID | COM-CO-2.2 |
|---|---|
| Implementation | Recommended |
| Description | Use the Restrict which projects may supply KMS CryptoKeys for CMEK ( To modify this constraint, administrators need the Organization Policy Administrator ( If you want to add a second layer of protection, such as bring your own key, change this constraint to represent the key names of the CMEK that is enabled. Product specifics:
|
| Applicable products |
|
| Path | constraints/gcp.restrictCmekCryptoKeyProjects |
| Operator | notexists |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Use CMEK for Google Cloud services
| Google control ID | COM-CO-2.3 |
|---|---|
| Implementation | Recommended |
| Description | If you require more control over key operations than what Google-owned and Google-managed encryption keys allow, you can use customer-managed encryption keys (CMEKs). These keys are created and managed using Cloud KMS. Store the keys as software keys, in an HSM cluster, or in an external key management system. Cloud KMS encryption and decryption rates are subject to quotas. Cloud Storage specifics In Cloud Storage, use CMEKs on individual objects, or configure your Cloud Storage buckets to use a CMEK by default on all new objects added to a bucket. When using a CMEK, an object is encrypted with the key by Cloud Storage at the time it's stored in a bucket, and the object is automatically decrypted by Cloud Storage when the object is served to requesters. The following restrictions apply when using CMEKs with Cloud Storage:
|
| Applicable products |
|
| Path | constraints/gcp.restrictNonCmekServices |
| Operator | == |
| Value |
|
| Type | String |
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Replicate secrets automatically
| Google control ID | SM-CO-6.1 |
|---|---|
| Implementation | Recommended |
| Description | Choose the automatic replication policy to replicate your secrets unless your workload has specific location requirements. The automatic policy meets the availability and performance needs of most workloads. If your workload has specific location requirements, you can use the API to select the locations for the replication policy when you create the secret. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Security posture and analytics
This document includes the best practices and guidelines for Security Command Center when running generative AI workloads on Google Cloud.
Enable Security Command Center at the organization level
| Google control ID | SCC-CO-6.1 |
|---|---|
| Implementation | Required |
| Description | Enable Security Command Center at the organization level to avoid additional configuration. If you don't want to use Security Command Center, you must enable another posture management solution. |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
Configure alerts from Security Command Center
| Google control ID | SCC-CO-7.1 |
|---|---|
| Implementation | Recommended |
| Description | Alerts from the Security Command Center provide visibility into your organization and notify you about issues with your Google Cloud services so you can take appropriate action. You can set up alerts in Cloud Logging to get notifications on errors that are related to the Security Command Center service agent ( service-org-ORGANIZATION_NUMBER@security-center-api.iam.gserviceaccount.com). |
| Applicable products |
|
| Related NIST-800-53 controls |
|
| Related CRI profile controls |
|
| Related information |
What's next
Review infrastructure controls.
See more Google Cloud security best practices and guidelines for generative AI workloads.