Рубрики
Uncategorized

Сканирование IAC Terraform

DevOps — Terraform — Сканирование IAC с тривиалом. Tagged с учебником, безопасностью, Azure, DevOps.

Тривиальный уязвимый сканер

Триви является простым и комплексным сканером для уязвимостей в изображениях контейнеров, файловых систем и репозитории GIT, а также для проблем конфигурации в IAC. Триви Обнаружает уязвимости пакетов ОС (альпийский, RHEL, CentOS и т. Д.) И языковых пакетов (Bundler, Composer, NPM, пряжа и т. Д.). Кроме того, Триви Сканирует инфраструктуру как файлы кода (IAC), такие как Terraform, Dockerfile и Kubernetes, чтобы обнаружить потенциальные проблемы конфигурации, которые подвергают ваше развертывание риску атаки.

Вы можете легко сканировать артефакты конфигурации Terraform, обеспечивая уверенность в том, что все хорошо с вашей конфигурацией перед развертыванием ваших конфигураций Terraform (IAC). Это бесплатный инструмент/с открытым исходным кодом от Aquasecurity. Для получения дополнительной информации посетите Trivy Github Page

Сегодня мы рассмотрим, как вы можете использовать Триви В рамках процесса вашего CI/CD процесса DevOps путем сканирования вашего кода Terraform (IAC) для рисков безопасности, прежде чем фактически развернуть конфигурацию, чтобы убедиться, что нет никаких уязвимостей или неправильных сборов, которые могут потенциально открыть риски безопасности.

Как сканировать IAC

Этот урок основан на следующем Azure DevOps Repository Blueprint, который будет использовать конвейер CI/CD YAML для развертывания виртуальной сети Azure с использованием файлов конфигурации Terraform IAC.

В пути есть файлы конфигурации терраформ /Terraform/network Анкет Есть также трубопровод YAML Network.yml под /Pipelines/ который используется для развертывания кода Terraform. Трубопровод запустит A build.yml Шаблон, который, по сути, создает наш артефакт Terraform, и в случае успеха трубопровод вызовет Deploy.yml Шаблон, который будет применять наш артефакт конфигурации терраформ. Шаблоны трубопровода хранятся под пути /task_groups/ .

Мы будем использовать Триви Во время нашей фазы сборки, так что давайте посмотрим на build.yml файл:

#// code/task_groups/build.yml#L16-L89

jobs:
  - job: build
    pool:
      vmImage: ${{ parameters.pool }}
    workspace:
      clean: all
    steps:
      - checkout: self
        path: src

      - task: TerraformInstaller@0
        inputs:
          terraformVersion: ${{ parameters.terraformVersion }}

      - task: CmdLine@2
        displayName: 'Download and Install Trivy vulnerability scanner'
        inputs:
          script: |
            sudo apt-get install rpm
            wget https://github.com/aquasecurity/trivy/releases/download/v${{ parameters.trivyVersion }}/trivy_${{ parameters.trivyVersion }}_Linux-64bit.deb
            sudo dpkg -i trivy_${{ parameters.trivyVersion }}_Linux-64bit.deb
            trivy -v

      - task: TerraformTaskV2@2
        displayName: Terraform Init
        inputs:
          provider: 'azurerm'
          command: 'init'
          workingDirectory: '$(Agent.BuildDirectory)/src/${{ parameters.root_directory }}'
          backendServiceArm: ${{ parameters.backend_service_connection_name }}
          backendAzureRmResourceGroupName: ${{ parameters.backend_resource_group }}
          backendAzureRmStorageAccountName: ${{ parameters.backend_storage_accountname }}
          backendAzureRmContainerName: ${{ parameters.container_name }}
          backendAzureRmKey: ${{ parameters.container_key }}

      - task: CmdLine@2
        displayName: 'LOW/MED - Trivy vulnerability scanner in IaC mode'
        inputs:
          script: |
            trivy config --severity LOW,MEDIUM --exit-code 0 $(Agent.BuildDirectory)/src/${{ parameters.root_directory }}

      - task: CmdLine@2
        displayName: 'HIGH/CRIT - Trivy vulnerability scanner in IaC mode'
        inputs:
          script: |
            trivy config --severity HIGH,CRITICAL --exit-code 1 $(Agent.BuildDirectory)/src/${{ parameters.root_directory }}

      - task: TerraformTaskV2@2
        displayName: Terraform Plan
        inputs:
          provider: 'azurerm'
          command: 'plan'
          workingDirectory: '$(Agent.BuildDirectory)/src/${{ parameters.root_directory }}'
          commandOptions: '--var-file=$(Agent.BuildDirectory)/src/${{ parameters.root_directory }}${{ parameters.tfvarFile }} --out=$(Agent.BuildDirectory)/src/${{ parameters.root_directory }}plan.tfplan'
          environmentServiceNameAzureRM: ${{ parameters.deployment_service_connection_name }}

      - task: CopyFiles@2
        displayName: 'Copy Files to Staging'
        inputs:
          SourceFolder: '$(Agent.BuildDirectory)/src'
          Contents: 'Terraform/**'
          TargetFolder: '$(Build.ArtifactStagingDirectory)'

      - task: ArchiveFiles@2
        inputs:
          rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'
          archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
          replaceExistingArchive: true
          includeRootFolder: false
        displayName: Archive Terraform Artifact

      - publish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
        artifact: '$(Build.BuildId)-trivy'
        displayName: Publish Pipeline Artifact

Как вы можете видеть из сборка Процесс выше, мы выполняем следующие шаги:

  • Загрузите и установите Terraform.
  • Скачать и установить Триви Сканер уязвимости.
  • Выполните Terraform Init в нашей конфигурации сети Terraform.
  • Запустить Триви Сканер уязвимости в режиме IAC для рисков (низкий/средний).
  • Запустить Триви Сканер уязвимости в режиме IAC для (высоких/критических) рисков.
  • Запустите план Terraform.
  • Скопируйте наши файлы развертывания Terraform в зону постановки.
  • Создайте артефакт развертывания Terraform (ZIP) из зоны постановки.
  • Опубликуйте артефакт развертывания Terraform, созданный в конвейере для последующего использования.

Примечание: Триви не вызовет сборка Процесс трубопровода в сбое (низкий/средний) риски, но вызовет сбой, если будут обнаружены (высокие/критические) проблемы. Это определено -Эксперист-код (1) (0) Аргумент:

#// code/task_groups/build.yml#L51-L61

- task: CmdLine@2
displayName: "LOW/MED - Trivy vulnerability scanner in IaC mode"
inputs:
    script: |
        trivy config --severity LOW,MEDIUM --exit-code 0 $(Agent.BuildDirectory)/src/${{ parameters.root_directory }}

- task: CmdLine@2
displayName: "HIGH/CRIT - Trivy vulnerability scanner in IaC mode"
inputs:
    script: |
        trivy config --severity HIGH,CRITICAL --exit-code 1 $(Agent.BuildDirectory)/src/${{ parameters.root_directory }}

То есть в том, что касается настройки и интеграции Триви в процесс CI/CD, чтобы проверить ваши развертывания Terraform для любых проблем безопасности или неправильной конфигурации перед завершением сборки. Давайте посмотрим на пример.

Пример

ПРИМЕЧАНИЕ: Обратите внимание, что этот пример не защищает секреты, совершаемые в управление источником и предназначен как руководство. Если вы найдете какие -либо секреты в исходном коде или конфигурациях Terraform после того, как они будут совершены, удалите и поверните их как можно скорее.

Как вы можете видеть в моей конфигурации Terraform main.tf Анкет Я настроил второго поставщика, используя псевдоним, но я настроил своего поставщика с помощью client_secret Значение в простом тексте:

# Terraform/networking/main.tf#L18-L25

provider "azurerm" {
  features {}
  alias           = "core_network"
  subscription_id = "00000000-0000-0000-0000-000000000000"
  client_id       = "00000000-0000-0000-0000-000000000000"
  client_secret   = "S3cR3t20!"
  tenant_id       = "00000000-0000-0000-0000-000000000000"
}

Когда Триви Запускает сканирование на конфигурации моей терраформ, вы увидите, что мой сборка Процесс не удается из -за Критический Риск безопасности, который он выявил.

Что проверяется?

Триви Проверяет Terraform IAC с использованием Tfsec Анкет Вы можете взглянуть на все чеки, которые Триви Выступает под Включены чеки документация. В предыдущем примере выше Триви обнаружил риск под названием: Потенциально конфиденциальные данные, хранящиеся в атрибуте блока , который уведомил нас, что наш код потенциально разоблачает конфиденциальную информацию.

Я надеюсь, что вам понравился этот пост и узнал что -то новое. Вы также можете найти образцы кода, используемые в этом блоге на моем GitHub страница. ❤ ️

Автор

Мол, поделиться, следуй за мной: 🐙 GitHub | 🐧 Twitter | 👾 LinkedIn

Марсель. Lfollow

Оригинал: «https://dev.to/pwd9000/terraform-iac-scanning-with-trivy-3cai»