Рубрики
Uncategorized

Разработка и тестирование Terraform

Я начинаю играть с кухонной терраформой для тестирования и соблюдения модулей Terraform …. Tagged с DevOps, Googlecloud, Terraform, Security.

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»