terraform.gcp.security.gcp-sqlserver-no-public-ip.gcp-sqlserver-no-public-ip
semgrep
Author
unknown
Download Count*
License
Ensure Cloud SQL database does not have public IP
Run Locally
Run in CI
Defintion
rules:
- id: gcp-sqlserver-no-public-ip
patterns:
- pattern: resource
- pattern-inside: |
resource "google_sql_database_instance" "..." {
...
ip_configuration {
...
ipv4_enabled = true
...
}
...
}
message: Ensure Cloud SQL database does not have public IP
metadata:
owasp:
- A05:2017 - Broken Access Control
- A01:2021 - Broken Access Control
cwe:
- "CWE-284: Improper Access Control"
category: security
technology:
- terraform
- gcp
references:
- https://owasp.org/Top10/A01_2021-Broken_Access_Control
subcategory:
- audit
likelihood: LOW
impact: LOW
confidence: LOW
license: Commons Clause License Condition v1.0[LGPL-2.1-only]
vulnerability_class:
- Improper Authorization
languages:
- hcl
severity: WARNING
Examples
gcp-sqlserver-no-public-ip.tf
# fail
# ruleid: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "fail" {
database_version = "SQLSERVER_2017_STANDARD"
name = "general-sqlserver12"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
activation_policy = "ALWAYS"
availability_type = "ZONAL"
backup_configuration {
binary_log_enabled = "false"
enabled = "true"
location = "us"
point_in_time_recovery_enabled = "false"
start_time = "00:00"
}
database_flags {
name = "cross db ownership chaining"
value = "on"
}
database_flags {
name = "contained database authentication"
value = "on"
}
disk_autoresize = true
disk_size = "20"
disk_type = "PD_SSD"
ip_configuration {
ipv4_enabled = true
private_network = "projects/gcp-bridgecrew-deployment/global/networks/default"
require_ssl = "false"
}
location_preference {
zone = "us-central1-a"
}
maintenance_window {
day = "1"
hour = "0"
}
pricing_plan = "PER_USE"
tier = "db-custom-1-4096"
}
}
# fail
# ruleid: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "fail_not_list" {
database_version = "SQLSERVER_2017_STANDARD"
name = "general-sqlserver12"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
activation_policy = "ALWAYS"
availability_type = "ZONAL"
backup_configuration {
binary_log_enabled = false
enabled = true
location = "us"
point_in_time_recovery_enabled = false
start_time = "00:00"
}
database_flags {
name = "cross db ownership chaining"
value = "off"
}
database_flags {
name = "contained database authentication"
value = "off"
}
disk_autoresize = true
disk_size = "20"
disk_type = "PD_SSD"
ip_configuration {
ipv4_enabled = true
private_network = "projects/gcp-bridgecrew-deployment/global/networks/default"
require_ssl = "false"
}
location_preference {
zone = "us-central1-a"
}
maintenance_window {
day = "1"
hour = "0"
}
pricing_plan = "PER_USE"
tier = "db-custom-1-4096"
}
}
# ok: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "pass" {
database_version = "SQLSERVER_2017_STANDARD"
name = "general-sqlserver12"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
activation_policy = "ALWAYS"
availability_type = "ZONAL"
backup_configuration {
binary_log_enabled = false
enabled = true
location = "us"
point_in_time_recovery_enabled = false
start_time = "00:00"
}
database_flags {
name = "cross db ownership chaining"
value = "off"
}
database_flags {
name = "contained database authentication"
value = "off"
}
disk_autoresize = true
disk_size = "20"
disk_type = "PD_SSD"
ip_configuration {
ipv4_enabled = false
private_network = "projects/gcp-bridgecrew-deployment/global/networks/default"
require_ssl = "false"
}
location_preference {
zone = "us-central1-a"
}
maintenance_window {
day = "1"
hour = "0"
}
pricing_plan = "PER_USE"
tier = "db-custom-1-4096"
}
}
# ok: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "pass2" {
database_version = "SQLSERVER_2017_STANDARD"
name = "general-sqlserver12"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
activation_policy = "ALWAYS"
availability_type = "ZONAL"
backup_configuration {
binary_log_enabled = false
enabled = true
location = "us"
point_in_time_recovery_enabled = false
start_time = "00:00"
}
disk_autoresize = true
disk_size = "20"
disk_type = "PD_SSD"
location_preference {
zone = "us-central1-a"
}
maintenance_window {
day = "1"
hour = "0"
}
pricing_plan = "PER_USE"
tier = "db-custom-1-4096"
}
}
# ok: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "pass3" {
database_version = "SQLSERVER_2017_STANDARD"
name = "general-sqlserver12"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
tier = "db-custom-1-3840"
}
}
# ok: gcp-sqlserver-no-public-ip
resource "google_sql_database_instance" "pass4" {
database_version = "MYSQL_8_0"
name = "mysql81"
project = "gcp-bridgecrew-deployment"
region = "us-central1"
settings {
activation_policy = "ALWAYS"
tier = "db-custom-1-3840"
database_flags {
name = "night"
value = "on"
}
database_flags {
name = "local_infile"
value = "on"
}
availability_type = "ZONAL"
}
}
Short Link: https://sg.run/KvJX