Triraform - Itriy Trivyを用いたIACスキャン
17857 ワード
TRIVY脆弱性スキャナ
Trivy
コンテナのイメージ、ファイルシステム、およびgitリポジトリの脆弱性のためのシンプルで包括的なスキャナだけでなく、IACの構成問題.Trivy
OSパッケージ(アルパイン、RHEL、CentOSなど)と言語固有のパッケージ(バンドル、作曲家、NPM、糸など)の脆弱性を検出します.加えてTrivy
攻撃のリスクにあなたの展開を公開する潜在的な構成問題を検出するために、TraraForm、Dockerfile、Kubernetesなどのコード(IAC)ファイルとしてインフラストラクチャをスキャンします.あなたは簡単にあなたのテラフォーム(IAC)の構成を展開する前に、すべてのあなたの設定と信頼性を与えるあなたの地形形式のアーティファクトをスキャンすることができます.これは、フリー/オープンソースのツールです.詳細についてはTrivy github page
今日、我々はあなたが利用できる方法を見ます
Trivy
セキュリティリスクのためにあなたのterform(IAC)コードをスキャンすることによってあなたのDEVOPS CI/CDプロセスの一部として、潜在的にセキュリティリスクを開く可能性がある脆弱性やミスコンフィグレーションがないように設定を実際に展開する前に.IACをスキャンする方法
このチュートリアルは次のとおりですAzure DevOps Repository BluePrint(それは、terraform IAC構成ファイルを使用しているAzure仮想ネットワークを展開するためにCI/CD YAMLパイプラインを使用するでしょう).
経路の下には地形形式のファイルがあります/Terraform/networking . YAMLパイプラインもあります
network.yml
下/pipelines/ これは、terraformコードを展開するために使用されます.パイプラインが起動するbuild.yml
本質的に私たちの地形のアーチファクトを作成し、成功するとパイプラインがトリガされますdeploy.yml
私たちの地形形状アーティファクトを適用するテンプレート.パイプラインテンプレートはパスの下に保持されます/task_groups/ .我々は利用する
Trivy
我々の構築段階の間、そうするので、見てください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
あなたが見ることができるようにbuild
上記のプロセスは次の手順を実行します.Trivy
脆弱性スキャナTrivy
(低/中)リスクのためのIACモードにおける脆弱性スキャナTrivy
(高/臨界)リスクのためのIACモードの脆弱性スキャナ.Trivy
原因はbuild
パイプラインのプロセスが失敗する(低/中)のリスクが、(高い/重要な)問題が検出された場合、失敗を引き起こすでしょう.これは--exist-code (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 }}
それは、構成と統合の限りですTrivy
あなたのCI/CDプロセスに、ビルドを完了する前に、どんなセキュリティやミスコンフィグレーション問題に対しても地形形式展開を確認してください.例を見てみましょう.例
注意:この例では、ソースコントロールにコミットされている秘密を保護しません.あなたがコミットされた後、ソースコードまたは地形形態で秘密を見つけるならば、削除して、できるだけ早く彼らを回転させてください.
あなたのterraform構成で見ることができるようにmain.tf . 私はエイリアスを使用して第2のプロバイダを構成しました、しかし、私は
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"
}
時Trivy
私のterraform構成に対する走査を走らせるbuild
プロセスは、それが特定した重大なセキュリティリスクのため失敗します.何をチェックしますか.
Trivy
チェック柄フォームiacTFSEC . すべてのチェックを見ることができますTrivy
の下で実行するincluded checks ドキュメント.上の前の例でTrivy
と呼ばれるリスクを検出しました.Potentially sensitive data stored in block attribute , それは我々のコードが機密情報を潜在的に暴露していることを私たちに知らせました.あなたがこのポストを楽しんで、新しい何かを学んだことを願っています.また、このブログ記事で使用されているコードサンプルを見つけることができますGithub ページ.❤️
著者
閉じるこの動画はお気に入りから削除されています🐙 GitHub | 🐧 | 👾
・・・アクションボタン
背景色:1 .重要
色:千円!重要
ボーダーカラー:くぼんだ0 cbb 58!重要
}
Marcel.L フォロー
Cloud Solutions & DevOps Architect.
Reference
この問題について(Triraform - Itriy Trivyを用いたIACスキャン), 我々は、より多くの情報をここで見つけました https://dev.to/pwd9000/terraform-iac-scanning-with-trivy-3caiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol