Compliance, Mapped to Your Cloud

Assess your AWS, Azure, and Google Cloud environments against the industry frameworks and regulations your auditors expect.

56
Frameworks Supported
18
Standards Families
3
Cloud Providers
5 min
To First Results
ASecureCloud compliance report preview
Google Cloud logo

CIS GCP Foundations v4.0

76 controls
75 checks mapped

The Center for Internet Security (CIS) Benchmarks are consensus-based, prescriptive configuration baselines for hardening cloud environments against the most common attack vectors.

Controls assessed

1.1 - Ensure that Corporate Login Credentials are Used1

Use corporate login credentials instead of consumer accounts, such as Gmail accounts.

1.4 - Ensure That There Are Only GCP-Managed Service Account Keys for Each Service Account1

User-managed service accounts should not have user-managed keys.

1.5 - Ensure That Service Account Has No Admin Privileges1

A service account is a special Google account that belongs to an application or a VM, instead of to an individual end-user. The application uses the service account to call the service's Google API so that users aren't directly involved. It's recommended not to use admin access for ServiceAccount.

1.6 - Ensure That IAM Users Are Not Assigned the Service Account User or Service Account Token Creator Roles at Project Level1

It is recommended to assign the Service Account User (iam.serviceAccountUser) and Service Account Token Creator (iam.serviceAccountTokenCreator) roles to a user for a specific service account rather than assigning the role to a user at project level.

1.7 - Ensure User-Managed/External Keys for Service Accounts Are Rotated Every 90 Days or Fewer1

Service Account keys consist of a key ID (Private_key_Id) and Private key, which are used to sign programmatic requests users make to Google cloud services accessible to that particular service account. It is recommended that all Service Account keys are regularly rotated.

1.8 - Ensure That Separation of Duties Is Enforced While Assigning Service Account Related Roles to Users1

It is recommended that the principle of 'Separation of Duties' is enforced while assigning service-account related roles to users.

1.9 - Ensure That Cloud KMS Cryptokeys Are Not Anonymously or Publicly Accessible1

It is recommended that the IAM policy on Cloud KMS cryptokeys should restrict anonymous and/or public access.

1.10 - Ensure KMS Encryption Keys Are Rotated Within a Period of 90 Days1

Google Cloud Key Management Service stores cryptographic keys in a hierarchical structure designed for useful and elegant access control management. The format for the rotation schedule depends on the client library that is used. For the gcloud command-line tool, the next rotation time must be in ISO or RFC3339 format, and the rotation period must be in the form INTEGER[UNIT], where units can be one of seconds (s), minutes (m), hours (h) or days (d).

1.11 - Ensure That Separation of Duties Is Enforced While Assigning KMS Related Roles to Users1

It is recommended that the principle of 'Separation of Duties' is enforced while assigning KMS related roles to users.

1.12 - Ensure API Keys Only Exist for Active Services1

API Keys should only be used for services in cases where other authentication methods are unavailable. Unused keys with their permissions in tact may still exist within a project. Keys are insecure because they can be viewed publicly, such as from within a browser, or they can be accessed on a device where the key resides. It is recommended to use standard authentication flow instead.

1.13 - Ensure API Keys Are Restricted To Use by Only Specified Hosts and Apps1

API Keys should only be used for services in cases where other authentication methods are unavailable. In this case, unrestricted keys are insecure because they can be viewed publicly, such as from within a browser, or they can be accessed on a device where the key resides. It is recommended to restrict API key usage to trusted hosts, HTTP referrers and apps. It is recommended to use the more secure standard authentication flow instead.

1.14 - Ensure API Keys Are Restricted to Only APIs That Application Needs Access1

API Keys should only be used for services in cases where other authentication methods are unavailable. API keys are always at risk because they can be viewed publicly, such as from within a browser, or they can be accessed on a device where the key resides. It is recommended to restrict API keys to use (call) only APIs required by an application.

1.15 - Ensure API Keys Are Rotated Every 90 Days1

API Keys should only be used for services in cases where other authentication methods are unavailable. If they are in use it is recommended to rotate API keys every 90 days.

1.16 - Ensure Essential Contacts is Configured for Organization1

It is recommended that Essential Contacts is configured to designate email addresses for Google Cloud services to notify of important technical or security information.

2.1 - Ensure That Cloud Audit Logging Is Configured Properly1

It is recommended that Cloud Audit Logging is configured to track all admin activities and read, write access to user data.

2.2 - Ensure That Sinks Are Configured for All Log Entries1

It is recommended to create a sink that will export copies of all the log entries. This can help aggregate logs from multiple projects and export them to a Security Information and Event Management (SIEM).

2.3 - Ensure That Retention Policies on Cloud Storage Buckets Used for Exporting Logs Are Configured Using Bucket Lock1

Enabling retention policies on log buckets will protect logs stored in cloud storage buckets from being overwritten or accidentally deleted. It is recommended to set up retention policies and configure Bucket Lock on all storage buckets that are used as log sinks.

2.4 - Ensure Log Metric Filter and Alerts Exist for Project Ownership Assignments/Changes1

In order to prevent unnecessary project ownership assignments to users/service-accounts and further misuses of projects and resources, all roles/Owner assignments should be monitored. Members (users/Service-Accounts) with a role assignment to primitive role roles/Owner are project owners.

2.5 - Ensure That the Log Metric Filter and Alerts Exist for Audit Configuration Changes1

Google Cloud Platform (GCP) services write audit log entries to the Admin Activity and Data Access logs to help answer the questions of, "who did what, where, and when?" within GCP projects.

2.6 - Ensure That the Log Metric Filter and Alerts Exist for Custom Role Changes1

It is recommended that a metric filter and alarm be established for changes to Identity and Access Management (IAM) role creation, deletion and updating activities.

2.7 - Ensure That the Log Metric Filter and Alerts Exist for VPC Network Firewall Rule Changes1

It is recommended that a metric filter and alarm be established for Virtual Private Cloud (VPC) Network Firewall rule changes.

2.8 - Ensure That the Log Metric Filter and Alerts Exist for VPC Network Route Changes1

It is recommended that a metric filter and alarm be established for Virtual Private Cloud (VPC) network route changes.

2.9 - Ensure That the Log Metric Filter and Alerts Exist for VPC Network Changes1

It is recommended that a metric filter and alarm be established for Virtual Private Cloud (VPC) network changes.

2.10 - Ensure That the Log Metric Filter and Alerts Exist for Cloud Storage IAM Permission Changes1

It is recommended that a metric filter and alarm be established for Cloud Storage Bucket IAM changes.

2.11 - Ensure That the Log Metric Filter and Alerts Exist for SQL Instance Configuration Changes1

It is recommended that a metric filter and alarm be established for SQL instance configuration changes.

2.12 - Ensure That Cloud DNS Logging Is Enabled for All VPC Networks1

Cloud DNS logging records the queries from the name servers within your VPC to Stackdriver. Logged queries can come from Compute Engine VMs, GKE containers, or other GCP resources provisioned within the VPC.

2.13 - Ensure Cloud Asset Inventory Is Enabled1

GCP Cloud Asset Inventory is services that provides a historical view of GCP resources and IAM policies through a time-series database. The information recorded includes metadata on Google Cloud resources, metadata on policies set on Google Cloud projects or resources, and runtime information gathered within a Google Cloud resource.

2.15 - Ensure 'Access Approval' is 'Enabled'1

GCP Access Approval enables you to require your organizations' explicit approval whenever Google support try to access your projects. You can then select users within your organization who can approve these requests through giving them a security role in IAM. All access requests display which Google Employee requested them in an email or Pub/Sub message that you can choose to Approve. This adds an additional control and logging of who in your organization approved/denied these requests.

2.16 - Ensure Logging is enabled for HTTP(S) Load Balancer1

Logging enabled on a HTTPS Load Balancer will show all network traffic and its destination.

3.1 - Ensure That the Default Network Does Not Exist in a Project1

To prevent use of default network, a project should not have a default network.

3.2 - Ensure Legacy Networks Do Not Exist for Older Projects1

In order to prevent use of legacy networks, a project should not have a legacy network configured. As of now, Legacy Networks are gradually being phased out, and you can no longer create projects with them. This recommendation is to check older projects to ensure that they are not using Legacy Networks.

3.3 - Ensure That DNSSEC Is Enabled for Cloud DNS1

Cloud Domain Name System (DNS) is a fast, reliable and cost-effective domain name system that powers millions of domains on the internet. Domain Name System Security Extensions (DNSSEC) in Cloud DNS enables domain owners to take easy steps to protect their domains against DNS hijacking and man-in-the-middle and other attacks.

3.4 - Ensure That RSASHA1 Is Not Used for the Key-Signing Key in Cloud DNS DNSSEC1

DNSSEC algorithm numbers in this registry may be used in CERT RRs. Zone signing (DNSSEC) and transaction security mechanisms (SIG(0) and TSIG) make use of particular subsets of these algorithms. The algorithm used for key signing should be a recommended one and it should be strong.

3.5 - Ensure That RSASHA1 Is Not Used for the Zone-Signing Key in Cloud DNS DNSSEC1

DNSSEC algorithm numbers in this registry may be used in CERT RRs. Zone signing (DNSSEC) and transaction security mechanisms (SIG(0) and TSIG) make use of particular subsets of these algorithms. The algorithm used for key signing should be a recommended one and it should be strong.

3.6 - Ensure That SSH Access Is Restricted From the Internet1

GCP Firewall Rules are specific to a VPC Network. Each rule either allows or denies traffic when its conditions are met. Its conditions allow the user to specify the type of traffic, such as ports and protocols, and the source or destination of the traffic, including IP addresses, subnets, and instances.

3.7 - Ensure That RDP Access Is Restricted From the Internet1

GCP Firewall Rules are specific to a VPC Network. Each rule either allows or denies traffic when its conditions are met. Its conditions allow users to specify the type of traffic, such as ports and protocols, and the source or destination of the traffic, including IP addresses, subnets, and instances.

3.8 - Ensure that VPC Flow Logs is Enabled for Every Subnet in a VPC Network1

Flow Logs is a feature that enables users to capture information about the IP traffic going to and from network interfaces in the organization's VPC Subnets. Once a flow log is created, the user can view and retrieve its data in Stackdriver Logging. It is recommended that Flow Logs be enabled for every business-critical VPC subnet.

3.9 - Ensure No HTTPS or SSL Proxy Load Balancers Permit SSL Policies With Weak Cipher Suites1

Secure Sockets Layer (SSL) policies determine what port Transport Layer Security (TLS) features clients are permitted to use when connecting to load balancers.

3.10 - Use Identity Aware Proxy (IAP) to Ensure Only Traffic From Google IP Addresses are 'Allowed'1

IAP authenticates the user requests to your apps via a Google single sign in. You can then manage these users with permissions to control access. It is recommended to use both IAP permissions and firewalls to restrict this access to your apps with sensitive information.

4.1 - Ensure That Instances Are Not Configured To Use the Default Service Account1

It is recommended to configure your instance to not use the default Compute Engine service account because it has the Editor role on the project.

4.2 - Ensure That Instances Are Not Configured To Use the Default Service Account With Full Access to All Cloud APIs1

To support principle of least privileges and prevent potential privilege escalation it is recommended that instances are not assigned to default service account Compute Engine default service account with Scope Allow full access to all Cloud APIs.

4.3 - Ensure 'Block Project-Wide SSH Keys' Is Enabled for VM Instances1

It is recommended to use Instance specific SSH key(s) instead of using common/shared project-wide SSH key(s) to access Instances.

4.4 - Ensure Oslogin Is Enabled for a Project1

Enabling OS login binds SSH certificates to IAM users and facilitates effective SSH certificate management.

4.5 - Ensure 'Enable Connecting to Serial Ports' Is Not Enabled for VM Instance1

Interacting with a serial port is often referred to as the serial console, which is similar to using a terminal window, in that input and output is entirely in text mode and there is no graphical interface or mouse support.

4.6 - Ensure That IP Forwarding Is Not Enabled on Instances1

Compute Engine instance cannot forward a packet unless the source IP address of the packet matches the IP address of the instance. Similarly, GCP won't deliver a packet whose destination IP address is different than the IP address of the instance receiving the packet. However, both capabilities are required if you want to use instances to help route packets.

4.7 - Ensure VM Disks for Critical VMs Are Encrypted With Customer-Supplied Encryption Keys (CSEK)1

Customer-Supplied Encryption Keys (CSEK) are a feature in Google Cloud Storage and Google Compute Engine. If you supply your own encryption keys, Google uses your key to protect the Google-generated keys used to encrypt and decrypt your data. By default, Google Compute Engine encrypts all data at rest. Compute Engine handles and manages this encryption for you without any additional actions on your part. However, if you wanted to control and manage this encryption yourself, you can provide your own encryption keys.

4.8 - Ensure Compute Instances Are Launched With Shielded VM Enabled1

To defend against advanced threats and ensure that the boot loader and firmware on your VMs are signed and untampered, it is recommended that Compute instances are launched with Shielded VM enabled.

4.9 - Ensure That Compute Instances Do Not Have Public IP Addresses1

Compute instances should not be configured to have external IP addresses.

4.11 - Ensure That Compute Instances Have Confidential Computing Enabled1

Google Cloud encrypts data at-rest and in-transit, but customer data must be decrypted for processing. Confidential Computing is a breakthrough technology which encrypts data in-use—while it is being processed. Confidential Computing environments keep data encrypted in memory and elsewhere outside the central processing unit (CPU).

5.1 - Ensure That Cloud Storage Bucket Is Not Anonymously or Publicly Accessible1

It is recommended that IAM policy on Cloud Storage bucket does not allows anonymous or public access.

5.2 - Ensure That Cloud Storage Buckets Have Uniform Bucket-Level Access Enabled1

It is recommended that uniform bucket-level access is enabled on Cloud Storage buckets.

6.1.2 - Ensure 'Skip_show_database' Database Flag for Cloud SQL MySQL Instance Is Set to 'On'1

It is recommended to set skip_show_database database flag for Cloud SQL Mysql instance to on.

6.1.3 - Ensure That the 'Local_infile' Database Flag for a Cloud SQL MySQL Instance Is Set to 'Off'1

It is recommended to set the local_infile database flag for a Cloud SQL MySQL instance to off.

6.2.1 - Ensure 'Log_error_verbosity' Database Flag for Cloud SQL PostgreSQL Instance Is Set to 'DEFAULT' or Stricter1

The log_error_verbosity flag controls the verbosity/details of messages logged. Valid values are: 'TERSE', 'DEFAULT', and 'VERBOSE'.

6.2.2 - Ensure That the 'Log_connections' Database Flag for Cloud SQL PostgreSQL Instance Is Set to 'On'1

Enabling the log_connections setting causes each attempted connection to the server to be logged, along with successful completion of client authentication. This parameter cannot be changed after the session starts.

6.2.3 - Ensure That the 'Log_disconnections' Database Flag for Cloud SQL PostgreSQL Instance Is Set to 'On'1

Enabling the log_disconnections setting logs the end of each session, including the session duration.

6.2.4 - Ensure 'Log_statement' Database Flag for Cloud SQL PostgreSQL Instance Is Set Appropriately1

The value of log_statement flag determined the SQL statements that are logged. Valid values are: 'none', 'ddl', 'mod', and 'all'.

6.2.5 - Ensure that the 'Log_min_messages' Flag for a Cloud SQL PostgreSQL Instance is set at minimum to 'Warning'1

The log_min_messages flag defines the minimum message severity level that is considered as an error statement. Messages for error statements are logged with the SQL statement. Valid values include DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC. Each severity level includes the subsequent levels mentioned above. ERROR is considered the best practice setting. Changes should only be made in accordance with the organization's logging policy.

6.2.6 - Ensure 'Log_min_error_statement' Database Flag for Cloud SQL PostgreSQL Instance Is Set to 'Error' or Stricter1

The log_min_error_statement flag defines the minimum message severity level that are considered as an error statement.

6.2.7 - Ensure That the 'Log_min_duration_statement' Database Flag for Cloud SQL PostgreSQL Instance Is Set to '-1' (Disabled)1

The log_min_duration_statement flag defines the minimum amount of execution time of a statement in milliseconds where the total duration of the statement is logged. Ensure that log_min_duration_statement is disabled, i.e., a value of -1 is set.

6.2.8 - Ensure That 'cloudsql.enable_pgaudit' Database Flag for each Cloud Sql Postgresql Instance Is Set to 'on' For Centralized Logging1

Ensure cloudsql.enable_pgaudit database flag for Cloud SQL PostgreSQL instance is set to on to allow for centralized logging.

6.3.1 - Ensure 'external scripts enabled' Database Flag for Cloud SQL SQL Server Instance Is Set to 'off'1

It is recommended to set external scripts enabled database flag for Cloud SQL SQL Server instance to off.

6.3.2 - Ensure 'cross db ownership chaining' Database Flag for Cloud SQL SQL Server Instance Is Set to 'off'1

It is recommended to set cross db ownership chaining database flag for Cloud SQL SQL Server instance to off.

6.3.3 - Ensure 'user Connections' Database Flag for Cloud SQL SQL Server Instance Is Set to a Non-limiting Value1

It is recommended to check the user connections for a Cloud SQL SQL Server instance to ensure that it is not artificially limiting connections.

6.3.4 - Ensure 'user options' Database Flag for Cloud SQL SQL Server Instance Is Not Configured1

The user options option specifies global defaults for all users. A list of default query processing options is established for the duration of a user's work session. The user options option allows you to change the default values of the SET options (if the server's default settings are not appropriate).

6.3.5 - Ensure 'remote access' Database Flag for Cloud SQL SQL Server Instance Is Set to 'off'1

It is recommended to set remote access database flag for Cloud SQL SQL Server instance to off.

6.3.6 - Ensure '3625 (trace flag)' Database Flag for all Cloud SQL SQL Server Instances Is Set to 'on'1

It is recommended to set 3625 (trace flag) database flag for Cloud SQL SQL Server instance to on.

6.3.7 - Ensure 'contained database authentication' Database Flag for Cloud SQL SQL Server Instance Is Set to 'off'1

A contained database includes all database settings and metadata required to define the database and has no configuration dependencies on the instance of the Database Engine where the database is installed. Users can connect to the database without authenticating a login at the Database Engine level. Isolating the database from the Database Engine makes it possible to easily move the database to another instance of SQL Server. Contained databases have some unique threats that should be understood and mitigated by SQL Server Database Engine administrators. Most of the threats are related to the USER WITH PASSWORD authentication process, which moves the authentication boundary from the Database Engine level to the database level, hence this is recommended not to enable this flag. This recommendation is applicable to SQL Server database instances.

6.4 - Ensure That the Cloud SQL Database Instance Requires All Incoming Connections To Use SSL1

It is recommended to enforce all incoming connections to SQL database instance to use SSL.

6.5 - Ensure That Cloud SQL Database Instances Do Not Implicitly Whitelist All Public IP Addresses1

Database Server should accept connections only from trusted Network(s)/IP(s) and restrict access from public IP addresses.

6.6 - Ensure That Cloud SQL Database Instances Do Not Have Public IPs1

It is recommended to configure Second Generation Sql instance to use private IPs instead of public IPs.

6.7 - Ensure That Cloud SQL Database Instances Are Configured With Automated Backups1

It is recommended to have all SQL database instances set to enable automated backups.

7.1 - Ensure That BigQuery Datasets Are Not Anonymously or Publicly Accessible1

It is recommended that the IAM policy on BigQuery datasets does not allow anonymous and/or public access.

7.2 - Ensure That All BigQuery Tables Are Encrypted With Customer-Managed Encryption Key (CMEK)1

BigQuery by default encrypts the data as rest by employing Envelope Encryption using Google managed cryptographic keys. The data is encrypted using the data encryption keys and data encryption keys themselves are further encrypted using key encryption keys. This is seamless and do not require any additional input from the user. However, if you want to have greater control, Customer-managed encryption keys (CMEK) can be used as encryption key management solution for BigQuery Data Sets. If CMEK is used, the CMEK is used to encrypt the data encryption keys instead of using google-managed encryption keys.

7.3 - Ensure That a Default Customer-Managed Encryption Key (CMEK) Is Specified for All BigQuery Data Sets1

BigQuery by default encrypts the data as rest by employing Envelope Encryption using Google managed cryptographic keys. The data is encrypted using the data encryption keys and data encryption keys themselves are further encrypted using key encryption keys. This is seamless and do not require any additional input from the user. However, if you want to have greater control, Customer-managed encryption keys (CMEK) can be used as encryption key management solution for BigQuery Data Sets.

8.1 - Ensure that Dataproc Cluster is encrypted using Customer-Managed Encryption Key1

When you use Dataproc, cluster and job data is stored on Persistent Disks (PDs) associated with the Compute Engine VMs in your cluster and in a Cloud Storage staging bucket. This PD and bucket data is encrypted using a Google-generated data encryption key (DEK) and key encryption key (KEK). The CMEK feature allows you to create, use, and revoke the key encryption key (KEK). Google still controls the data encryption key (DEK).

See where you stand against any framework

Connect an account and get a full compliance breakdown with mapped findings and remediation guidance — free to start.