Manage cloud controls

Compliance Manager includes many built-in cloud controls that you can add to frameworks and deploy in your environment. If required, you can create and manage your own custom cloud controls and update built-in cloud controls.

Before you begin

View cloud controls

Complete the following steps to view built-in cloud controls and any custom cloud controls that you already created.

  1. In the Google Cloud console, go to the Compliance page.

    Go to Compliance

  2. Select your organization.

  3. In the Configure tab, click Cloud Controls. The available cloud controls display.

    The dashboard includes information about which frameworks include the cloud control and the number of resources (organization, folders, and projects) that the cloud control is applied to.

  4. To view details about a cloud control, click the control name.

Create a custom cloud control

A custom cloud control applies to only one resource type. The only supported data type is Cloud Asset Inventory resources. Custom cloud controls don't support parameters.

  1. In the Google Cloud console, go to the Compliance page.

    Go to Compliance

  2. Select your organization.

  3. In the Configure tab, click Cloud Controls. The list of available cloud controls are displayed.

  4. Create a cloud control, either with Gemini or manually:

Use Gemini

  1. Ask Gemini to generate a cloud control for you. Based on your prompt, Gemini provides a unique identifier, a name, associated detection logic, and possible remediation steps.

  2. Review the recommendations and make any required changes.

  3. Save your custom cloud control.

Create manually

  1. In Cloud control ID, provide a unique identifier for your control.

  2. Enter a name and description to help users in your organization understand the purpose of the custom cloud control.

  3. Optional: Select the categories for the control. Click Continue.

  4. Select an available resource type for your custom cloud control. Compliance Manager supports all resource types. To find the name for a resource, see Asset types.

  5. Provide the detection logic for your cloud control, in Common Expression Language (CEL) format.

    CEL expressions lets you define how you want to evaluate the properties of a resource. For more information and examples, see Write rules for custom cloud controls. Click Continue.

    If your evaluation rule isn't valid, an error is displayed.

  6. Select an appropriate findings severity.

  7. Write your remediation instructions so that incident responders and administrators in your organization can resolve any findings for the cloud control. Click Continue.

  8. Review your entries, and then click Create.

Edit a custom cloud control

After you create a cloud control, you can change its name, description, rules, remediation steps, and severity level. You can't change the cloud control category.

  1. In the Google Cloud console, go to the Compliance page.

    Go to Compliance

  2. Select your organization.

  3. In the Configure tab, click Cloud Controls. The list of available cloud controls display.

  4. Click the cloud control that you want to edit.

  5. In the Cloud controls details page, verify that the cloud control isn't included in a framework. If required, edit the framework to remove the cloud control.

  6. Click Edit.

  7. In the Edit custom cloud control page, change the name and description as required. Click Continue.

  8. Update the rules, finding severity, and remediation steps. Click Continue.

  9. Review your changes and click Save.

Update a built-in cloud control to a newer release

Google publishes regular updates to its built-in cloud controls as services deploy new features or as new best practices emerge. Updates can include new controls or changes to existing controls.

You can view the releases of built-in cloud controls in the cloud controls dashboard in the Configure tab or in the cloud control details page.

Google notifies you in the release notes when the following items are updated:

  • Cloud control name
  • Finding category
  • Change in the detective or preventive logic in a rule
  • Underlying logic of a rule

To update a cloud control after you receive a notification, you must unassign and redeploy the frameworks that include the cloud control. For instructions, see Update a framework to a newer release.

Delete a custom cloud control

Delete a cloud control when it's no longer required. You can only delete cloud controls that you create. You can't delete built-in cloud controls.

  1. In the Google Cloud console, go to the Compliance page.

    Go to Compliance

  2. Select your organization.

  3. In the Configure tab, click Cloud Controls. The list of available cloud controls display.

  4. Click the cloud control that you want to delete.

  5. In the Cloud controls details page, verify that the cloud control isn't included in a framework. If required, edit the framework to remove the cloud control.

  6. Click Delete.

  7. In the Delete window, review the message. Type Delete and click Confirm.

Mapping of Security Health Analytics detectors to cloud controls

The following table shows how Compliance Manager cloud controls map to Security Health Analytics detectors.

Finding category in Security Health Analytics Cloud control name in Compliance Manager

ACCESS_TRANSPARENCY_DISABLED

Enable Access Transparency

ADMIN_SERVICE_ACCOUNT

Block Administrator Roles from Service Accounts

ALLOWED_INGRESS_ORG_POLICY

Configure the Allowed Ingress Settings for Cloud Run Organization Policy Constraint

ALLOWED_VPC_EGRESS_ORG_POLICY

Configure the Allowed VPC Egress Settings for Cloud Run Organization Policy Constraint

ALLOYDB_AUTO_BACKUP_DISABLED

Enable AlloyDB Automated Backups on Cluster

ALLOYDB_BACKUPS_DISABLED

Enable AlloyDB Backups on Cluster

ALLOYDB_CMEK_DISABLED

Enable CMEK for AlloyDB Clusters

ALLOYDB_LOG_ERROR_VERBOSITY

Set Log Error Verbosity Flag for AlloyDB Instances

ALLOYDB_LOG_MIN_ERROR_STATEMENT_SEVERITY

Set Log Min Error Statement Flag for AlloyDB Instances

ALLOYDB_LOG_MIN_MESSAGES

Set Log Min Messages Flag for AlloyDB Instances

ALLOYDB_PUBLIC_IP

Block Public IP Addresses for AlloyDB Cluster Instances

ALPHA_CLUSTER_ENABLED

Disable Alpha Features on GKE Clusters

API_KEY_APPS_UNRESTRICTED

Restrict API Keys for Required APIs Only

API_KEY_EXISTS

Not available

API_KEY_NOT_ROTATED

Require Rotation of API Key

AUDIT_CONFIG_NOT_MONITORED

Configure Log Metrics and Alerts for Audit Logging Changes

AUDIT_LOGGING_DISABLED

Implement Event Logging for Google Cloud Services

AUTO_BACKUP_DISABLED

Enable Automatic Backups for Cloud SQL Databases

AUTO_REPAIR_DISABLED

Enable Auto Repair for GKE Clusters

AUTO_UPGRADE_DISABLED

Enable Auto Upgrade on GKE Clusters

BIGQUERY_TABLE_CMEK_DISABLED

Enable CMEK for BigQuery Tables

BINARY_AUTHORIZATION_DISABLED

Require Binary Authorization on a Cluster

BUCKET_CMEK_DISABLED

Enable CMEK for Cloud Storage Buckets

BUCKET_IAM_NOT_MONITORED

Configure Log Metrics and Alerts for Cloud Storage IAM Policy Changes

BUCKET_LOGGING_DISABLED

Require Cloud Storage Bucket Logging

BUCKET_POLICY_ONLY_DISABLED

Enable Uniform Bucket-Level Access on Cloud Storage Buckets

CLOUD_ASSET_API_DISABLED

Enable Cloud Asset Inventory Service

CLUSTER_LOGGING_DISABLED

Enable Cloud Logging on GKE Clusters

CLUSTER_MONITORING_DISABLED

Enable Cloud Monitoring on GKE Clusters

CLUSTER_PRIVATE_GOOGLE_ACCESS_DISABLED

Enable Private Google Access on an instance

CLUSTER_SECRETS_ENCRYPTION_DISABLED

Enable Encryption on GKE Clusters

CLUSTER_SHIELDED_NODES_DISABLED

Enable Shielded GKE Nodes on a Cluster

COMPUTE_PROJECT_WIDE_SSH_KEYS_ALLOWED

Block Project-Wide SSH Keys on Compute Engine Instances

COMPUTE_SECURE_BOOT_DISABLED

Enable Secure Boot on Compute Engine Instances

COMPUTE_SERIAL_PORTS_ENABLED

Block Serial Ports for Compute Engine Instances

CONFIDENTIAL_COMPUTING_DISABLED

Enable Confidential Computing for Compute Engine Instances

COS_NOT_USED

Require Container-Optimized OS for a GKE Cluster

CUSTOM_ORG_POLICY_VIOLATION

Not available

CUSTOM_ROLE_NOT_MONITORED

Configure Log Metrics and Alerts for Custom Role Changes

DATAPROC_CMEK_DISABLED

Require CMEK on Dataproc Clusters

DATAPROC_IMAGE_OUTDATED

Use Latest Image Versions on Dataproc Clusters

DATASET_CMEK_DISABLED

Enable CMEK for BigQuery Datasets

DEFAULT_NETWORK

Use Networks with Custom Firewall Rules

DEFAULT_SERVICE_ACCOUNT_USED

Use Custom Service Accounts for Compute Engine Instances

DISABLE_VPC_EXTERNAL_IP_V6_ORG_POLICY

Configure the Disable VPC External IPv6 Usage Organization Policy

DISABLE_VPC_INTERNAL_IP_V6_ORG_POLICY

Configure the Disable VPC External IPv6 Usage Organization Policy

DISABLED_SERIAL_PORT_ACCESS_ORG_POLICY

Configure the Disable VM Serial Port Logging to Stackdriver Organization Policy

DISK_CMEK_DISABLED

Enable CMEK on Compute Engine Persistent Disks

DISK_CSEK_DISABLED

Enable CSEK On Compute Engine Persistent Disks

DNS_LOGGING_DISABLED

Enable Cloud DNS Logs Monitoring

DNSSEC_DISABLED

Enable DNSSEC for Cloud DNS

EGRESS_DENY_RULE_NOT_SET

Enforce Deny All Egress Firewall Rule

ESSENTIAL_CONTACTS_NOT_CONFIGURED

Define Essential Contacts

FIREWALL_NOT_MONITORED

Configure Log Metrics and Alerts for VPC Network Firewall Changes

FIREWALL_RULE_LOGGING_DISABLED

Enable Firewall Rule Logging

FLOW_LOGS_DISABLED

Enable Flow Logs for VPC Subnet

FULL_API_ACCESS

Restrict API Access to Google Cloud APIs for Compute Engine Instances

HTTP_LOAD_BALANCER

Enforce HTTPS Traffic Only

INCORRECT_BQ4G_SERVICE_PERIMETER

Define Service Perimeters in VPC Service Controls

INSTANCE_OS_LOGIN_DISABLED

Enable OS Login

INTEGRITY_MONITORING_DISABLED

Enable Integrity Monitoring on GKE Clusters

INTRANODE_VISIBILITY_DISABLED

Enable Intranode Visibility for GKE Clusters

IP_ALIAS_DISABLED

Enable IP Alias Range for GKE Clusters

IP_FORWARDING_ENABLED

Prevent IP Forwarding on Compute Engine Instances

KMS_KEY_NOT_ROTATED

Define Rotation Period for Cloud KMS Keys

KMS_PROJECT_HAS_OWNER

Not available

KMS_PUBLIC_KEY

Not available

KMS_ROLE_SEPARATION

Enforce Separation of Duties

LEGACY_AUTHORIZATION_ENABLED

Block Legacy Authorization on GKE Clusters

LEGACY_METADATA_ENABLED

Disable Legacy Metadata Server Endpoints on Compute Engine

LEGACY_NETWORK

Don't Use Legacy Networks

LOAD_BALANCER_LOGGING_DISABLED

Enable Load Balancer Logging

LOCKED_RETENTION_POLICY_NOT_SET

Lock Storage Bucket Retention Policies

LOG_NOT_EXPORTED

Configure Log Sinks

MASTER_AUTHORIZED_NETWORKS_DISABLED

Enable Control Plane Authorized Networks on GKE Clusters

MFA_NOT_ENFORCED

Not available

NETWORK_NOT_MONITORED

Configure Log Metrics and Alerts for VPC Network Changes

NETWORK_POLICY_DISABLED

Enable Network Policy on GKE Clusters

NODEPOOL_BOOT_CMEK_DISABLED

Enable CMEK on GKE Node Pool Boot Disks

NODEPOOL_SECURE_BOOT_DISABLED

Enable Secure Boot for Shielded GKE Nodes

NON_ORG_IAM_MEMBER

Not available

OBJECT_VERSIONING_DISABLED

Enable Object Versioning on Buckets

OPEN_CASSANDRA_PORT

Block Connections to Cassandra Ports from All IP Addresses

OPEN_CISCOSECURE_WEBSM_PORT

Block Connections to CiscoSecure/WebSM Ports from All IP Addresses

OPEN_DIRECTORY_SERVICES_PORT

Block Connections to Directory Services Ports from All IP Addresses

OPEN_DNS_PORT

Block Connections to DNS Ports from All IP Addresses

OPEN_ELASTICSEARCH_PORT

Block Connections to Elasticsearch Ports from All IP Addresses

OPEN_FIREWALL

Not available

OPEN_FTP_PORT

Black Connections to FTP Ports from All IP Addresses

OPEN_GROUP_IAM_MEMBER

Not available

OPEN_HTTP_PORT

Block Connections to HTTP Ports from All IP Addresses

OPEN_LDAP_PORT

Block Connections to LDAP Ports from All IP Addresses

OPEN_MEMCACHED_PORT

Block Connections to Memcached Ports from All IP Addresses

OPEN_MONGODB_PORT

Block Connections to MongoDB Ports from All IP Addresses

OPEN_MYSQL_PORT

Block Connections to MySQL Ports from All IP Addresses

OPEN_NETBIOS_PORT

Block Connections to NetBIOS Ports from All IP Addresses

OPEN_ORACLEDB_PORT

Block Connections to Oracle Database Ports from All IP Addresses

OPEN_POP3_PORT

Block Connections to POP3 Server Ports from All IP Addresses

OPEN_POSTGRESQL_PORT

Block Connections to PostgreSQL Server Ports from All IP Addresses

OPEN_RDP_PORT

Block Access to RDP Port

OPEN_REDIS_PORT

Block Connections to Redis Server Ports from All IP Addresses

OPEN_SMTP_PORT

Block Connections to SMTP Server Ports from All IP Addresses

OPEN_SSH_PORT

Block Access to SSH Port

OPEN_TELNET_PORT

Block Connections to Telnet Server Ports from All IP Addresses

ORG_POLICY_CONFIDENTIAL_VM_POLICY

Enable the Confidential VM Organization Policy Constraint

OS_LOGIN_DISABLED

Enable OS Login for All Instances at Project Level

OVER_PRIVILEGED_ACCOUNT

Use Least Privilege Service Accounts for GKE Clusters

OVER_PRIVILEGED_SCOPES

Create GKE Clusters with Limited Service Account Access Scopes

OVER_PRIVILEGED_SERVICE_ACCOUNT_USER

Block Administrator Roles from Service Accounts

OWNER_NOT_MONITORED

Not available

POD_SECURITY_POLICY_DISABLED

Not available

PRIMITIVE_ROLES_USED

Restrict Legacy IAM Roles

PRIVATE_CLUSTER_DISABLED

Enable Private Clusters for GKE

PRIVATE_GOOGLE_ACCESS_DISABLED

Enable Private Google Access for VPC Subnets

PUBLIC_BUCKET_ACL

Restrict Public Access to Cloud Storage Buckets

PUBLIC_COMPUTE_IMAGE

Restrict Public Access to Compute Images

PUBLIC_DATASET

Restrict Public Access to BigQuery Datasets

PUBLIC_IP_ADDRESS

Restrict Public IP Addresses to Compute Engine Instances

PUBLIC_LOG_BUCKET

Restrict Public Access to Cloud Storage Buckets

PUBLIC_SQL_INSTANCE

Restrict Public Access to Cloud SQL Database Instances

PUBSUB_CMEK_DISABLED

Encrypt Pub/Sub topic with CMEK

QL_LOG_STATEMENT_STATS_ENABLED

Enable Log Statement Flag for PostgreSQL

REDIS_ROLE_USED_ON_ORG

Not available

RELEASE_CHANNEL_DISABLED

Subscribe a GKE Cluster to a Release Channel

REQUIRE_OS_LOGIN_ORG_POLICY

Enable OS Login

REQUIRE_VPC_CONNECTOR_ORG_POLICY

Define VPC Connector Egress For Cloud Run Functions

RESTRICT_AUTHORIZED_NETWORKS_ORG_POLICY

Enable the Restrict Authorized Networks on Cloud SQL Instances Organization Policy Constraint

ROUTE_NOT_MONITORED

Configure Log Metrics and Alerts for VPC Route Changes

RSASHA1_FOR_SIGNING

Avoid RSASHA1 for DNSSEC Signing

S3_BUCKET_ACCESS_LOGGING_ENABLED_CLOUDTRAIL_S3_BUCKET

Not available

S3_BUCKETS_CONFIGURED_BLOCK_PUBLIC_ACCESS_BUCKET_AND_ACCOUNT_SETTINGS

Not available

SERVICE_ACCOUNT_KEY_NOT_ROTATED

Require Service Account Key Rotation

SERVICE_ACCOUNT_ROLE_SEPARATION

Enforce Separation of Duties

SHIELDED_VM_DISABLED

Enable Shielded VM for Compute Engine Instances

SKIP_DEFAULT_NETWORK_CREATION_ORG_POLICY

Restrict Default Network Creation for Compute Engine Instances

SQL_CMEK_DISABLED

Enable CMEK for Cloud SQL Databases

SQL_CONTAINED_DATABASE_AUTHENTICATION

Turn Off Contained Database Authentication Flag for SQL Server

SQL_CROSS_DB_OWNERSHIP_CHAINING

Turn Off Cross Database Ownership Chaining Flag for SQL Server

SQL_EXTERNAL_SCRIPTS_ENABLED

Turn Off External Scripts Flag for SQL Server

SQL_INSTANCE_NOT_MONITORED

Configure Log Metrics and Alerts for Cloud SQL Configuration Changes

SQL_LOCAL_INFILE

Turn Off Local Infile Flag for MySQL

SQL_LOG_CHECKPOINTS_DISABLED

Enable Log Checkpoints Flag for PostgreSQL

SQL_LOG_CONNECTIONS_DISABLED

Enable Log Connections Flag for PostgreSQL

SQL_LOG_DISCONNECTIONS_DISABLED

Enable Log Disconnections Flag for PostgreSQL

SQL_LOG_DURATION_DISABLED

Enable Log Duration Flag for PostgreSQL instance

SQL_LOG_ERROR_VERBOSITY

Enable Log Error Verbosity Flag for PostgreSQL

SQL_LOG_EXECUTOR_STATS_ENABLED

Turn Off Log Executor Stats Flag for PostgreSQL

SQL_LOG_HOSTNAME_ENABLED

Turn off Log Hostname Flag for PostgreSQL

SQL_LOG_LOCK_WAITS_DISABLED

Enable Log Locks Wait Flag for PostgreSQL instance

SQL_LOG_MIN_DURATION_STATEMENT_ENABLED

Turn Off Log Min Duration Statement Flag for PostgreSQL

SQL_LOG_MIN_ERROR_STATEMENT_SEVERITY

Enable Log Min Error Statement Flag for PostgreSQL

SQL_LOG_MIN_ERROR_STATEMENT_SEVERITY

Not available

SQL_LOG_MIN_MESSAGE

Enable Log Min Messages Flag for PostgreSQL

SQL_LOG_PARSER_STATS_ENABLED

Turn off Log Parser Stats Flag for PostgreSQL

SQL_LOG_PLANNER_STATS_ENABLED

Turn off Log Planner Stats Flag for PostgreSQL

SQL_LOG_STATEMENT

Enable Log Statement Flag for PostgreSQL

SQL_LOG_TEMP_FILES

Enable Log Temp Files Flag for PostgreSQL instance

SQL_NO_ROOT_PASSWORD

Not available

SQL_PUBLIC_IP

Block Public IP Addresses for Cloud SQL Instances

SQL_REMOTE_ACCESS_ENABLED

Turn Off Remote Access Flag for SQL Server

SQL_SCANNER

Enable SSL Encryption On AlloyDB Instances

SQL_SKIP_SHOW_DATABASE_DISABLED

Enable Skip Show Database Flag for MySQ

SQL_TRACE_FLAG_3625

Enable 3625 Trace Database Flag for SQL Server

SQL_USER_CONNECTIONS_CONFIGURED

Don't Use User Connections Flag for SQL Server

SQL_USER_OPTIONS_CONFIGURED

Don't Use User Options Flag for SQL Server

SQL_WEAK_ROOT_PASSWORD

Not available

SSL_NOT_ENFORCED

Enforce SSL for all Incoming Database Connections

TOO_MANY_KMS_USERS

Limit KMS Crypto Keys Users to Three

UNIFORM_BUCKET_LEVEL_ACCESS_ORG_POLICY

Enable Uniform Bucket-Level Access on Cloud Storage Buckets

USER_MANAGED_SERVICE_ACCOUNT_KEY

Restrict User Managed Service Account Keys

VPC_FLOW_LOGS_SETTINGS_NOT_RECOMMENDED

Not available

WEAK_SSL_POLICY

Restrict Insecure SSL Policies for Compute Engine Instances

WEB_UI_ENABLED

Don't Use Kubernetes Web UI

WORKLOAD_IDENTITY_DISABLED

Enable Workload Identity Federation for GKE on clusters

What's next