GCP controls (72)
CTL.GCP.ACCESSCONTEXT.PERIMETER.001
VPC Service Controls Perimeter Not Configured
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.11; nist_800_53_r5: SC-7; soc2: CC6.6;
No VPC Service Controls perimeter configured. GCP services are accessible from any network — no exfiltration boundary restricts API access to specific VPCs, IPs, or identity attributes.
Remediation: Configure a VPC Service Controls perimeter.
CTL.GCP.ALERT.GHOST.001
Alerting Policy References Deleted Notification Channel
- Severity: critical
- Type: unsafe_state
- Domain: detection
- Compliance: nist_800_53_r5: AU-5; soc2: CC7.2;
Alerting policy references a deleted notification channel. The alert fires but notifications go nowhere. The system appears active but delivery is silently broken.
Remediation: Update the alerting policy to reference a valid notification channel.
CTL.GCP.ARTIFACT.SCAN.001
Artifact Registry Vulnerability Scanning Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: nist_800_53_r5: SI-2; soc2: CC7.1;
Vulnerability scanning not enabled. Pushed container images are not scanned for known CVEs before deployment.
Remediation: Enable vulnerability scanning on the repository.
CTL.GCP.BIGQUERY.ENCRYPT.001
BigQuery Dataset Not Encrypted with CMEK
- Severity: medium
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 7.2; nist_800_53_r5: SC-28; pci_dss_v4: 3.4; soc2: CC6.1;
Dataset uses Google-managed encryption. CMEK via Cloud KMS provides key revocation, custom rotation, and access audit.
Remediation: Configure a Cloud KMS CMEK for the dataset.
CTL.GCP.BIGQUERY.LOG.001
BigQuery Data Access Logging Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 7.3; hipaa: 164.312(b); nist_800_53_r5: AU-2; soc2: CC7.2;
Data Access audit logs not enabled for BigQuery. Query execution, table reads, and data exports are not recorded.
Remediation: Enable Data Access audit logs for BigQuery.
CTL.GCP.BIGQUERY.PUBLIC.001
BigQuery Dataset Publicly Accessible
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 7.1; hipaa: 164.312(a)(1); nist_800_53_r5: AC-3; pci_dss_v4: 7.2.1; soc2: CC6.1;
Dataset IAM binding includes allUsers or allAuthenticatedUsers. Anyone can query the dataset's tables via standard SQL.
Remediation: Remove allUsers and allAuthenticatedUsers from dataset IAM bindings.
CTL.GCP.CLOUDSQL.BACKUP.001
Cloud SQL Automated Backups Not Enabled
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.7; hipaa: 164.308(a)(7); nist_800_53_r5: CP-9; soc2: A1.2;
Automated backups disabled. No recovery point exists. Data loss on instance failure is permanent.
Remediation: Enable automated backups.
CTL.GCP.CLOUDSQL.ENCRYPT.001
Cloud SQL Not Encrypted with CMEK
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 6.6; nist_800_53_r5: SC-28; pci_dss_v4: 3.4; soc2: CC6.1;
Instance uses Google-managed encryption. CMEK via Cloud KMS provides key revocation, custom rotation, and access audit.
Remediation: Recreate instance with a Cloud KMS CMEK.
CTL.GCP.CLOUDSQL.HA.001
Cloud SQL High Availability Not Configured
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: nist_800_53_r5: CP-10; soc2: A1.2;
No high availability configuration. Instance runs in a single zone. Zone failure causes database outage.
Remediation: Enable high availability (regional instance).
CTL.GCP.CLOUDSQL.MYSQL.LOCALINFILE.001
Cloud SQL MySQL local_infile Enabled
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.3.1; nist_800_53_r5: CM-6; pci_dss_v4: 6.2; soc2: CC6.1;
local_infile enabled. LOAD DATA LOCAL INFILE can read arbitrary files from the server filesystem. Known exploitation technique.
Remediation: Disable local_infile flag.
CTL.GCP.CLOUDSQL.MYSQL.SHOWDB.001
Cloud SQL MySQL skip_show_database Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.3.2; nist_800_53_r5: AC-3; soc2: CC6.1;
skip_show_database not set. Any authenticated user can enumerate all databases, providing reconnaissance information.
Remediation: Enable skip_show_database flag.
CTL.GCP.CLOUDSQL.PG.LOG.001
Cloud SQL PostgreSQL Logging Flags Not Fully Configured
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.2.1; hipaa: 164.312(b); nist_800_53_r5: AU-2; pci_dss_v4: 10.2; soc2: CC7.1;
One or more CIS-recommended PostgreSQL logging flags disabled. Consolidates: log_checkpoints, log_connections, log_disconnections, log_lock_waits, log_min_duration_statement, log_temp_files, pgaudit.
Remediation: Enable all recommended PostgreSQL logging flags.
CTL.GCP.CLOUDSQL.PG.MESSAGES.001
Cloud SQL PostgreSQL Log Level Below WARNING
- Severity: low
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.2.6; nist_800_53_r5: AU-2; soc2: CC7.1;
log_min_messages set above WARNING. WARNING-level messages indicating emerging problems may not be captured.
Remediation: Set log_min_messages to WARNING or lower.
CTL.GCP.CLOUDSQL.PITR.001
Cloud SQL Point-in-Time Recovery Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.8; nist_800_53_r5: CP-9; soc2: A1.2;
PITR not enabled. Recovery limited to the last automated backup. Data changes between the last backup and failure are lost.
Remediation: Enable point-in-time recovery.
CTL.GCP.CLOUDSQL.PRIVATE.001
Cloud SQL Instance Not Using Private IP Only
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.2; nist_800_53_r5: AC-4; soc2: CC6.6;
Instance has a public IP assigned. Even with restricted authorized networks, the database endpoint is exposed to the internet. Private IP only ensures VPC-only reachability.
Remediation: Configure private IP only and remove public IP.
CTL.GCP.CLOUDSQL.PUBLIC.001
Cloud SQL Instance Publicly Accessible
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.5; hipaa: 164.312(a)(1); nist_800_53_r5: AC-4; pci_dss_v4: 1.3; soc2: CC6.6;
Instance has a public IP and/or authorized networks includes 0.0.0.0/0. Database reachable from the internet.
Remediation: Remove 0.0.0.0/0 from authorized networks and use private IP.
CTL.GCP.CLOUDSQL.SQLSERVER.CROSSDB.001
Cloud SQL SQL Server Cross-Database Ownership Chaining Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 6.3.7; nist_800_53_r5: AC-3; soc2: CC6.1;
cross_db_ownership_chaining enabled. Objects in one database can reference objects in another without explicit permissions — cross-database privilege escalation risk.
Remediation: Disable cross_db_ownership_chaining flag.
CTL.GCP.CLOUDSQL.SSL.001
Cloud SQL SSL Connections Not Required
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 6.4; hipaa: 164.312(e)(1); nist_800_53_r5: SC-8; pci_dss_v4: 4.1; soc2: CC6.7;
SSL not required. Database connections can be unencrypted — credentials and query data transmitted in plaintext.
Remediation: Enable SSL requirement on the Cloud SQL instance.
CTL.GCP.COMPUTE.DEFAULTSA.001
Compute Instance Using Default Service Account
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 4.1; nist_800_53_r5: AC-6; pci_dss_v4: 7.2.1; soc2: CC6.1;
Instance runs with the default Compute Engine service account which has Editor-level permissions by default.
Remediation: Create a custom SA with least-privilege roles.
CTL.GCP.COMPUTE.ENCRYPT.001
Compute Disk Not Encrypted with CMEK
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 4.7; nist_800_53_r5: SC-28; pci_dss_v4: 3.4; soc2: CC6.1;
Disk uses Google-managed encryption. CMEK via Cloud KMS provides key revocation, custom rotation, and access audit.
Remediation: Recreate the disk with a Cloud KMS CMEK.
CTL.GCP.COMPUTE.FIREWALL.ALL.001
Firewall Rule Allows All Traffic from the Internet
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.8; hipaa: 164.312(a)(1); nist_800_53_r5: SC-7; pci_dss_v4: 1.3; soc2: CC6.6;
Firewall rule allows all protocols/ports from 0.0.0.0/0. The entire instance is exposed on every port.
Remediation: Remove the rule and create specific allow rules.
CTL.GCP.COMPUTE.FIREWALL.RDP.001
Firewall Rule Allows RDP from the Internet
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.7; nist_800_53_r5: SC-7; pci_dss_v4: 1.3; soc2: CC6.6;
Firewall rule allows TCP port 3389 from 0.0.0.0/0. RDP directly accessible from any IP on the internet.
Remediation: Restrict source ranges to specific IPs or use IAP.
CTL.GCP.COMPUTE.FIREWALL.SSH.001
Firewall Rule Allows SSH from the Internet
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.6; hipaa: 164.312(a)(1); nist_800_53_r5: SC-7; pci_dss_v4: 1.3; soc2: CC6.6;
Firewall rule allows TCP port 22 from 0.0.0.0/0. SSH directly accessible from any IP on the internet.
Remediation: Restrict source ranges to specific IPs or use IAP for SSH.
CTL.GCP.COMPUTE.FLOWLOGS.001
VPC Subnet Flow Logs Not Enabled
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.9; hipaa: 164.312(b); nist_800_53_r5: AU-12; pci_dss_v4: 10.2; soc2: CC7.2;
VPC flow logs not enabled on the subnet. Network traffic to and from instances is not recorded for forensic investigation.
Remediation: Enable VPC flow logs on the subnet.
CTL.GCP.COMPUTE.IPFORWARD.001
IP Forwarding Enabled on Instance
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 4.6; nist_800_53_r5: CM-6; soc2: CC6.1;
IP forwarding enabled. The instance can forward packets between networks unless intentionally configured as a NAT gateway.
Remediation: Disable IP forwarding unless the instance is a network appliance.
CTL.GCP.COMPUTE.NETWORK.DEFAULT.001
Default VPC Network Exists
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.1; nist_800_53_r5: CM-6; soc2: CC6.1;
Default VPC network not deleted. Includes pre-configured firewall rules allowing SSH and RDP from 0.0.0.0/0.
Remediation: Delete the default network and create custom networks.
CTL.GCP.COMPUTE.OSLOGIN.001
OS Login Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 4.4; nist_800_53_r5: IA-2; soc2: CC6.1;
OS Login not enabled. SSH access managed via per-instance metadata keys rather than centralized IAM-based access with 2FA support.
Remediation: Enable OS Login at the project or instance level.
CTL.GCP.COMPUTE.PRIVATE.001
Subnet Without Private Google Access
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.5; nist_800_53_r5: AC-4; soc2: CC6.6;
Private Google Access not enabled. Instances with only internal IPs cannot reach Google APIs without NAT or external IP.
Remediation: Enable Private Google Access on the subnet.
CTL.GCP.COMPUTE.PUBLIC.001
Compute Instance Has External IP
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 4.9; nist_800_53_r5: AC-4; pci_dss_v4: 1.3; soc2: CC6.6;
Instance has a public IP address. Directly reachable from the internet without IAP or VPN.
Remediation: Remove external IP and use IAP for SSH access.
CTL.GCP.COMPUTE.SERIALPORT.001
Serial Port Access Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 4.5; nist_800_53_r5: CM-7; soc2: CC6.1;
Interactive serial port access enabled. Provides console-level access bypassing network security controls and SSH authentication.
Remediation: Disable serial port access.
CTL.GCP.COMPUTE.SHIELDED.001
Shielded VM Features Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 4.8; nist_800_53_r5: SI-7; soc2: CC6.1;
One or more Shielded VM features disabled: Secure Boot, vTPM, or Integrity Monitoring. Boot-level malware persists undetected.
Remediation: Enable Secure Boot, vTPM, and Integrity Monitoring.
CTL.GCP.COMPUTE.SSHKEYS.001
Project-Wide SSH Keys Not Blocked
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 4.3; nist_800_53_r5: AC-6; soc2: CC6.1;
Instance does not block project-wide SSH keys. Any SSH key added at the project level grants access to this instance.
Remediation: Block project-wide SSH keys and use OS Login or per-instance keys.
CTL.GCP.COMPUTE.SSL.001
SSL Policy Allows TLS Below 1.2
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 3.10; nist_800_53_r5: SC-8; pci_dss_v4: 4.1; soc2: CC6.1;
SSL policy allows TLS 1.0 or 1.1 with known vulnerabilities (BEAST, POODLE, CRIME).
Remediation: Set minimum TLS version to 1.2.
CTL.GCP.DATAPROC.ENCRYPT.001
Dataproc Cluster Not Encrypted with CMEK
- Severity: medium
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 7.4; nist_800_53_r5: SC-28; soc2: CC6.1;
Dataproc cluster disk encryption uses Google-managed keys. CMEK provides key revocation and access audit for data processing workloads.
Remediation: Configure CMEK encryption for the Dataproc cluster.
CTL.GCP.DNS.ALGORITHM.001
Cloud DNS DNSSEC Using Weak Key Algorithm
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 3.4; nist_800_53_r5: SC-21; soc2: CC6.1;
DNSSEC enabled but uses RSASHA1. SHA-1 has known collision vulnerabilities. RSASHA256 or ECDSAP256SHA256 should be used.
Remediation: Change DNSSEC key algorithm to RSASHA256 or ECDSAP256SHA256.
CTL.GCP.DNS.DNSSEC.001
Cloud DNS DNSSEC Not Enabled
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 3.3; nist_800_53_r5: SC-20; pci_dss_v4: 1.3; soc2: CC6.6;
DNSSEC not enabled on public managed zone. DNS responses can be spoofed — an attacker can redirect traffic by forging responses.
Remediation: Enable DNSSEC with a strong key algorithm.
CTL.GCP.DNS.LOG.001
Cloud DNS Query Logging Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 3.5; nist_800_53_r5: AU-12; soc2: CC7.2;
DNS query logging not enabled. DNS-based reconnaissance, data exfiltration via DNS tunneling, and anomalous query patterns go undetected.
Remediation: Enable DNS query logging on the managed zone.
CTL.GCP.GCR.PUBLIC.001
Container Registry Publicly Accessible
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 7.4; nist_800_53_r5: AC-3; soc2: CC6.1;
GCR's underlying storage bucket grants allUsers or allAuthenticatedUsers read access. All container images are publicly pullable — application code and potentially embedded secrets exposed.
Remediation: Remove allUsers/allAuthenticatedUsers from the GCR storage bucket IAM.
CTL.GCP.GEMINI.LOG.001
Gemini Code Assist Logging Not Enabled
- Severity: low
- Type: unsafe_state
- Domain: detection
- Compliance: nist_800_53_r5: AU-2; soc2: CC7.2;
Gemini Code Assist logging not enabled. AI assistant interactions and code suggestions are not recorded for audit.
Remediation: Enable Gemini Code Assist logging.
CTL.GCP.GKE.ABAC.001
GKE Cluster Using Legacy ABAC
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 7.3; nist_800_53_r5: AC-3; soc2: CC6.1;
Legacy Attribute-Based Access Control enabled instead of RBAC. ABAC provides coarser authorization without namespace-scoped fine-grained control.
Remediation: Disable legacy ABAC and use RBAC.
CTL.GCP.GKE.PRIVATE.001
GKE Cluster API Server Publicly Accessible
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 7.1; nist_800_53_r5: AC-4; pci_dss_v4: 1.3; soc2: CC6.6;
GKE API server accessible from the public internet. No private endpoint or master authorized networks configured.
Remediation: Enable private endpoint and master authorized networks.
CTL.GCP.GKE.WORKLOAD.001
GKE Workload Identity Not Enabled
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 7.2; nist_800_53_r5: AC-6; pci_dss_v4: 7.2.1; soc2: CC6.1;
Workload Identity not enabled. Pods use the node's service account via the metadata server — all pods on a node share the same GCP credentials. Compromise of any pod exposes the node SA.
Remediation: Enable Workload Identity for per-pod GCP credential scoping.
CTL.GCP.IAM.APIKEY.APP.001
API Key Not Restricted to Specific Applications
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.13; nist_800_53_r5: AC-6; soc2: CC6.1;
API key has no application restrictions (HTTP referrers, IP addresses, Android/iOS). Key usable from any source.
Remediation: Add application restrictions (IP, referrer, or platform).
CTL.GCP.IAM.APIKEY.RESTRICT.001
API Key Not Restricted to Specific APIs
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.12; nist_800_53_r5: AC-6; soc2: CC6.1;
API key has no API restrictions — usable to call any GCP API. A leaked unrestricted key gives access to every enabled API in the project.
Remediation: Add API restrictions to the key or replace with a service account.
CTL.GCP.IAM.APIKEY.ROTATION.001
API Key Not Rotated
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.14; nist_800_53_r5: IA-5; owasp_nhi: NHI7; soc2: CC6.1;
API key older than 90 days. Unrotated keys accumulate risk.
Remediation: Rotate the API key or replace with a service account.
CTL.GCP.IAM.GHOST.001
IAM Binding References Deleted Member
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.16; nist_800_53_r5: AC-2; soc2: CC6.2;
IAM binding grants a role to a deleted member (deleted:serviceAccount:, deleted:user:, deleted:group:). GCP SA emails are reusable — a new SA with the same email inherits the binding's role grant.
Remediation: Remove the ghost IAM binding.
CTL.GCP.IAM.KMS.SEPARATION.001
KMS Encrypter and Decrypter Roles on Same Principal
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.8; nist_800_53_r5: AC-5; soc2: CC6.1;
Same principal has both cloudkms.cryptoKeyEncrypter and cloudkms.cryptoKeyDecrypter roles. Combined roles allow a single compromised identity to both encrypt (ransomware) and decrypt (exfiltration).
Remediation: Separate encrypter and decrypter roles across different principals.
CTL.GCP.IAM.PRIMITIVE.001
Primitive Role (Owner/Editor) Assigned at Project Level
- Severity: critical
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.1; hipaa: 164.312(a)(1); nist_800_53_r5: AC-6; pci_dss_v4: 7.2.1; soc2: CC6.1;
Owner or Editor primitive role assigned at project level. These legacy roles grant broad, non-granular permissions across almost every GCP service.
Remediation: Replace primitive roles with predefined or custom roles.
CTL.GCP.IAM.PUBLIC.001
IAM Binding Grants Access to allUsers or allAuthenticatedUsers
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 1.2; hipaa: 164.312(a)(1); nist_800_53_r5: AC-3; pci_dss_v4: 7.2.1; soc2: CC6.1;
Project/folder/org IAM binding grants a role to allUsers or allAuthenticatedUsers. Project-wide public access — every resource in the project is accessible.
Remediation: Remove allUsers and allAuthenticatedUsers from IAM bindings.
CTL.GCP.IAM.SA.ADMIN.001
Service Account Has Admin-Level Roles
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.6; nist_800_53_r5: AC-6; soc2: CC6.1;
Service account has roles granting admin-level permissions (roles/owner, roles/editor, roles/iam.admin, or service-specific admin roles). High-value non-human target.
Remediation: Replace admin roles with least-privilege predefined roles.
CTL.GCP.IAM.SA.DEFAULT.001
Default Service Account Used
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.3; nist_800_53_r5: AC-6; pci_dss_v4: 7.2.1; soc2: CC6.1;
Default Compute Engine or App Engine service account in use. Default SAs have Editor-level permissions by default — far broader than any workload needs.
Remediation: Create a custom SA with least-privilege roles.
CTL.GCP.IAM.SA.KEYS.001
Service Account Has User-Managed Keys
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.4; hipaa: 164.312(d); nist_800_53_r5: IA-5; pci_dss_v4: 8.2; soc2: CC6.1;
Service account has user-managed JSON key files. Long-lived, exportable credentials — the #1 source of GCP credential leaks. Workload Identity eliminates key files entirely.
Remediation: Delete user-managed keys and use Workload Identity instead.
CTL.GCP.IAM.SA.ROTATION.001
Service Account Key Not Rotated
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.5; nist_800_53_r5: IA-5; owasp_nhi: NHI7; soc2: CC6.1;
Service account key older than 90 days. Unrotated keys accumulate risk — a leaked key remains valid indefinitely if not rotated.
Remediation: Rotate the key or migrate to Workload Identity.
CTL.GCP.IAM.SA.SEPARATION.001
Service Account Admin and User Roles on Same Principal
- Severity: high
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.7; nist_800_53_r5: AC-5; soc2: CC6.1;
Same principal has both iam.serviceAccountAdmin and iam.serviceAccountUser roles. Can create SAs and impersonate them — effectively self-granting any permission.
Remediation: Separate SA Admin and SA User roles across different principals.
CTL.GCP.KMS.GHOST.001
Cloud KMS Key IAM Binding References Deleted Member
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: nist_800_53_r5: AC-3; soc2: CC6.1;
KMS key IAM binding grants cryptographic access (encrypt/decrypt) to a deleted member. A reclaimable SA email can decrypt all data encrypted by this key.
Remediation: Remove the ghost IAM binding from the KMS key.
CTL.GCP.KMS.PUBLIC.001
KMS Key Publicly Accessible
- Severity: critical
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 1.11; nist_800_53_r5: SC-12; soc2: CC6.1;
KMS key IAM binding includes allUsers or allAuthenticatedUsers. Anyone can perform cryptographic operations — encryption rendered meaningless.
Remediation: Remove allUsers and allAuthenticatedUsers from key IAM bindings.
CTL.GCP.KMS.ROTATION.001
KMS Key Rotation Not Configured
- Severity: medium
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 1.10; nist_800_53_r5: SC-12; owasp_nhi: NHI7; soc2: CC6.1;
Cloud KMS key does not have automatic rotation configured. CIS requires rotation period of 365 days or less.
Remediation: Configure automatic key rotation with period <= 365 days.
CTL.GCP.LOGGING.AUDIT.001
Cloud Audit Logging Not Enabled for All Services
- Severity: high
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 2.1; hipaa: 164.312(b); nist_800_53_r5: AU-2; pci_dss_v4: 10.2; soc2: CC7.2;
Data Access audit logs not enabled for all services. Admin Activity logs are always on but Data Access logs (who accessed what data) must be explicitly enabled per service.
Remediation: Enable Data Access audit logs for all services.
CTL.GCP.LOGGING.BUCKET.LOCK.001
Log Bucket Retention Not Locked
- Severity: high
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 2.4; nist_800_53_r5: AU-9; soc2: CC7.2;
Log bucket retention policy not locked. An attacker can reduce the retention period — the system deletes old logs automatically. Log tampering via configuration change.
Remediation: Lock the log bucket retention policy.
CTL.GCP.LOGGING.BUCKET.RETENTION.001
Log Bucket Retention Below 365 Days
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 2.3; nist_800_53_r5: AU-12; pci_dss_v4: 10.7; soc2: CC7.2;
Log bucket retention period less than 365 days. Compliance frameworks require one year minimum audit log retention.
Remediation: Increase retention to at least 365 days.
CTL.GCP.LOGGING.METRICS.CIS.001
CIS-Required Log Metric Filters Not Configured
- Severity: high
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 2.5; hipaa: 164.308(a)(1)(ii)(D); nist_800_53_r5: AU-6; pci_dss_v4: 10.2; soc2: CC7.2;
One or more CIS-required log metric filters missing. Required: VPC network changes, firewall rule changes, IAM policy changes, Storage IAM changes, SQL config changes, custom role changes.
Remediation: Configure metric filters for all CIS-required operations.
CTL.GCP.LOGGING.SINK.001
No Log Sink Configured for Export
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 2.2; nist_800_53_r5: AU-6; soc2: CC7.2;
No log sink configured. Logs exist only in Cloud Logging with no export to Storage, BigQuery, or Pub/Sub for SIEM integration.
Remediation: Configure a log sink to export logs.
CTL.GCP.MONITORING.ALERTS.001
Metric Filters Without Alert Policies
- Severity: medium
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 2.6; nist_800_53_r5: AU-6; soc2: CC7.2;
Log-based metric filters exist but have no corresponding alert policies. Metrics collected but no alerts fire on thresholds.
Remediation: Create alert policies for all metric filters.
CTL.GCP.MONITORING.CHANNELS.001
No Notification Channels Configured
- Severity: medium
- Type: unsafe_state
- Domain: detection
- Compliance: cis_gcp_v3: 2.7; nist_800_53_r5: AU-5; soc2: CC7.3;
No notification channels configured for alert policies. Alerts fire but notifications go nowhere.
Remediation: Configure notification channels (email, SMS, PagerDuty, webhook).
CTL.GCP.ORGPOLICY.DOMAIN.001
Domain Restricted Sharing Not Enforced
- Severity: medium
- Type: unsafe_state
- Domain: identity
- Compliance: cis_gcp_v3: 1.15; nist_800_53_r5: AC-3; soc2: CC6.1;
Organization policy does not restrict IAM sharing to the organization's domain. Resources can be shared with any Google account including personal Gmail.
Remediation: Enable the iam.allowedPolicyMemberDomains organization policy constraint.
CTL.GCP.STORAGE.ENCRYPT.001
Cloud Storage Bucket Not Using Customer-Managed Encryption Key
- Severity: high
- Type: unsafe_state
- Domain: encryption
- Compliance: cis_gcp_v3: 5.3; hipaa: 164.312(e)(2)(ii); nist_800_53_r5: SC-28; pci_dss_v4: 3.4; soc2: CC6.1;
Bucket uses Google-managed encryption. CMEK via Cloud KMS provides key revocation, custom rotation, and access audit.
Remediation: Configure a Cloud KMS key for bucket encryption.
CTL.GCP.STORAGE.GHOST.001
Cloud Storage IAM Binding References Deleted Member
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: nist_800_53_r5: AC-3; soc2: CC6.1;
Bucket IAM binding grants storage access to a deleted member. A reclaimable SA email inherits object read/write access.
Remediation: Remove the ghost IAM binding from the bucket.
CTL.GCP.STORAGE.LOG.001
Cloud Storage Bucket Access Logging Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 5.4; nist_800_53_r5: AU-12; soc2: CC7.2;
Access logging not enabled. Read and write operations on the bucket are not recorded for forensic investigation.
Remediation: Enable access logging and specify a log bucket.
CTL.GCP.STORAGE.PUBLIC.001
Cloud Storage Bucket Publicly Accessible
- Severity: critical
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 5.1; hipaa: 164.312(a)(1); nist_800_53_r5: AC-3; pci_dss_v4: 7.2.1; soc2: CC6.1;
Bucket IAM binding includes allUsers or allAuthenticatedUsers. allUsers requires no authentication. allAuthenticatedUsers means any Google account — not organizational users.
Remediation: Remove allUsers and allAuthenticatedUsers from IAM bindings.
CTL.GCP.STORAGE.RETENTION.001
Cloud Storage Bucket Without Retention Policy
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 5.6; nist_800_53_r5: AU-9; soc2: CC6.1;
No retention policy configured. Objects can be deleted at any time. An unlocked policy can be reduced to zero — a locked policy provides true WORM protection.
Remediation: Configure and lock a retention policy.
CTL.GCP.STORAGE.UNIFORM.001
Cloud Storage Bucket Not Using Uniform Bucket-Level Access
- Severity: high
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 5.2; nist_800_53_r5: AC-6; soc2: CC6.1;
Uniform bucket-level access not enabled. Legacy ACLs allow per-object access control that bypasses IAM policies.
Remediation: Enable uniform bucket-level access to disable legacy ACLs.
CTL.GCP.STORAGE.VERSIONING.001
Cloud Storage Bucket Versioning Not Enabled
- Severity: medium
- Type: unsafe_state
- Domain: exposure
- Compliance: cis_gcp_v3: 5.5; nist_800_53_r5: CP-9; soc2: CC7.2;
Object versioning not enabled. Overwritten or deleted objects have no previous version to recover.
Remediation: Enable object versioning on the bucket.