Тривиальный уязвимый сканер
Триви
является простым и комплексным сканером для уязвимостей в изображениях контейнеров, файловых систем и репозитории 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»