Как создать пользовательские проверки в tfsec
У меня есть следующая политика, которую я хочу реализовать при сканировании кода IaC с помощью tfsec:
Custom Check: GCP Firewall rule allows all traffic on Telnet port (23)
Ниже приведена моя настраиваемая проверка в формате .json:
{"проверки": [{"код": "CUS003", "описание": "Пользовательская проверка: правило брандмауэра GCP разрешает весь трафик через порт Telnet (23)", "requiredTypes": ["resource"],"requiredLabels") : ["google_compute_firewall"],"severity": "WARNING","matchSpec":{"name": "CUS003_matchSpec_name","action": "и", "predicateMatchSpec":[{"name": "source_ranges", "действие": "содержит", "значение": "0.0.0.0/0"},{"имя": "порты", "действие": "содержит", "значение": "23"}]}, " errorMessage ":" [ПРЕДУПРЕЖДЕНИЕ] Правило брандмауэра GCP разрешает весь трафик на порт Telnet (23) ", "relatedLinks":["https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_firewall"]}]
}
Я пробовал использовать «not», «notContains», «equals», комбинацию «subMatch» и / или «predicateMatchSpec», но ничего не помогло.
Чтобы проверить это, я специально создал правила брандмауэра, которые должны давать сбой, и другие правила, которые должны пройти проверку. Когда я получаю ошибки проверки, это касается всех правил, а не только некоторых. Точно так же, когда я получаю чеки, это касается всех правил, а не только некоторых.
Документы, которые могут быть полезны: пользовательские проверки tfsec
Любая помощь приветствуется. К сожалению, "tfsec" не является тегом, поэтому я надеюсь, что это проблема терраформирования, с которой я столкнулся.
1 ответ
Я думаю, что теперь, глядя на это, становится ясно, что это дочерний элемент
google_compute_firewall
ресурс. Атрибут является дочерним элементом
allow
. Ваш чек предполагает, что
ports
является родным братом
source_ranges
.
Я думаю, что эта проверка достижима с помощью следующего - он выполняет проверку предиката, что есть source_range, как требуется, И есть блок с именем allow, с портами атрибута, содержащими 23
{
"checks": [
{
"code": "CUS003",
"description": "Custom Check: GCP Firewall rule allows all traffic on Telnet port (23)",
"requiredTypes": [
"resource"
],
"requiredLabels": [
"google_compute_firewall"
],
"severity": "WARNING",
"matchSpec": {
"action": "and",
"predicateMatchSpec": [
{
"name": "source_ranges",
"action": "contains",
"value": "0.0.0.0/0"
},
{
"name": "allow",
"action": "isPresent",
"subMatch": {
"name": "ports",
"action": "contains",
"value": "23",
"ignoreUndefined": true
}
}
]
},
"errorMessage": "[WARNING] GCP Firewall rule allows all traffic on Telnet port (23)",
"relatedLinks": [
"https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_firewall"
]
}
]
}
Я тестировал его на следующем теле
resource "google_compute_firewall" "default" {
name = "test-firewall"
network = google_compute_network.default.name
allow {
protocol = "tcp"
ports = ["23", "8080", "1000-2000"]
}
source_ranges = ["0.0.0.0/0"]
source_tags = ["web"]
}
resource "google_compute_network" "default" {
name = "test-network"
}