CIS CIS CIS CIS-тестирование модуля Terraform с поваром Inspec, Kitchen-Terraform & GitHub (3 серии деталей)
Я начинаю играть с Kitchen-terraform Для тестирования и соблюдения модулей терраформ. Я сейчас использую Inspec-gcp Пакет ресурсов и Inspec-gcp-cis-benchmark профиль. Этот пост сосредоточится на последнем. Драйверами для этого являются тестирование самоочевидных преимуществ Кодекса и смены некоторых разумных базовых стандартов безопасности.
Чтобы все было просто, я хотел начать с того, что вы могли бы сделать в первую очередь, когда вы начнете создавать облачную инфраструктуру в Google. Базой любой службы облачной платформы Google является Проект Анкет Модуль, о котором я буду говорить, это Здесь Для справки и охватывает построение проекта. Это разумно самоуверенный модуль Terraform, чтобы соответствовать некоторым вариантам использования, которые у меня были; Тем не менее, я думаю, что это показывает пример того, что я пытаюсь сделать, не будучи слишком сложным и запутанным. Потому что, честно говоря, этот материал трудна для нездорового, бывшего операционного мышления, таких как я.
ПРИМЕЧАНИЕ: я не захожу в основу создания Terraform, Ruby, Kitchen-Cerraform, Chef Inspec и т. Д. Если это интересно, дайте мне знать, и, возможно, я смогу сделать другой пост.
«Местное» развитие
Изучая практику разработки программного обеспечения, мы должны иметь возможность разрабатывать »локально. «Когда я говорю здесь локально, мы можем считать это областью песочницы в иерархии ресурсов Google Cloud платформы, где вы можете безопасно создавать и создавать инфраструктуру. Когда вы начнете разработку модуля Terraform, вы, скорее всего, получите что -то подобное в своем main.tf
:
# Project Resource # https://www.terraform.io/docs/providers/google/r/google_project.html resource "google_project" "this" { name = var.project_id project_id = var.project_id billing_account = var.billing_id folder_id = "folders/${var.folder_id}" }
и переменные.tf
Файл как это:
variable "billing_id" { description = "Billing ID for the project to use" type = string } variable "project_id" { description = "Project ID (This will be used for the project name as well)" type = string } variable "folder_id" { description = "Folder ID for the project to be created in." type = string }
Теперь мы можем запустить Terraform и создать наш проект Google Cloud:
terraform init
terraform plan -out plan.out -var="billing_id=00000C-AZAZAZ-EFEFEF" \ -var="project_id=test-del-me-4876des" \ -var="folder_id=993877078800"
terraform apply plan.out
Теперь у вас есть проект, но вы можете быть удивлены, что вы уже нарушили кучу тестов CIS! Благодаря Google и работе, которые люди сделали в Inspec-gcp-cis-benchmark Репозиторий GitHub; Мы можем проверить это!
ПРИМЕЧАНИЕ: Это не официально поддерживаемый продукт Google, но, надеюсь, они поддерживают это репо с помощью сообщества.
Одна вещь, которую мне нравится в этом проекте GitHub, это то, что он работает непосредственно против конкретного облачного проекта Google. Для меня это именно тот уровень, на котором я хочу запустить тесты. Я пойду в более подробную информацию об этом позже, но пока, давайте инспекция
Проект, который мы только что создали, чтобы увидеть, что нам нужно сделать:
inspec exec https://github.com/GoogleCloudPlatform/inspec-gcp-cis-benchmark.git \ -t gcp:// --input gcp_project_id=test-del-me-4876des
После запуска этой команды вы увидите список нарушений. В духе разработки тестового управления (TDD) у нас есть нашу неудачу, и теперь мы можем кодировать, чтобы исправить это. Мы будем интегрировать все это следующий пост. Ради простоты, давайте сосредоточимся на двух из них:
× cis-gcp-4.4-vms: [VMS] Ensure oslogin is enabled for a Project × cis-gcp-3.1-networking: [NETWORKING] Ensure the default network does not exist in a project
Идея здесь заключается в том, что мы решаем эти проблемы как можно дальше в процессе. Я все еще разрабатываю «на местном уровне. » Если вы развернете кучу вещей в сетях по умолчанию, а три года спустя, говорит ваша команда безопасности, нам нужно получить все, что соответствует CIS; У вас будет непослушное количество операционной работы! Давайте сейчас исправим эти проблемы соблюдения. Для этого мы можем добавить несколько строк в код модуля Terraform. Тогда все в вашей организации, которая потребляет его, будут соответствовать стандарту.
# Project Resource # https://www.terraform.io/docs/providers/google/r/google_project.html resource "google_project" "this" { name = var.project_id project_id = var.project_id billing_account = var.billing_id folder_id = "folders/${var.folder_id}" auto_create_network = false } # Project Metadata Resource # https://www.terraform.io/docs/providers/google/r/compute_project_metadata.html resource "google_compute_project_metadata" "this" { project = google_project.project.project_id metadata = { enable-oslogin = true } }
Далее вы можете уничтожить свой предыдущий проект и воссоздать его, используя этот код, и вы увидите, что прошли тесты:
✔ cis-gcp-3.1-networking: [NETWORKING] Ensure the default network does not exist in a project ✔ cis-gcp-4.4-vms: [VMS] Ensure oslogin is enabled for a Project
Не только это Но мы ушли от:
Profile Summary: 4 successful controls, 16 control failures, 21 controls skipped Test Summary: 12 successful, 40 failures, 79 skipped
к:
Profile Summary: 5 successful controls, 11 control failures, 22 controls skipped Test Summary: 7 successful, 12 failures, 80 skipped
Я чувствую, что результаты говорят сами за себя. В следующем посте мы сосредоточимся на кухне-терраформе.
CIS CIS CIS CIS-тестирование модуля Terraform с поваром Inspec, Kitchen-Terraform & GitHub (3 серии деталей)
Оригинал: «https://dev.to/brettcurtis/gcp-cis-benchmark-terraform-module-testing-with-chef-inspec-kitchen-terraform-github-actions-4gpl»