terraform 보안코드 분석
tfsec
https://aquasecurity.github.io/tfsec/v1.10.0/
https://github.com/aquasecurity/tfsec
Terraform 코드용 정적 분석 보안 스캐너입니다.
Install with brew/linuxbrew
brew install tfsec
linux
sudo wget https://github.com/aquasecurity/tfsec/releases/download/v1.10.0/tfsec-linux-amd64 -O /usr/local/bin/tfsec ; sudo chmod 755 /usr/local/bin/tfsec
terraform 소스가 있는 곳에서 tfsec을 실행하면 된다. 사전에 정의한 RULE에 따라서 코드를 분석하여 알려준다.
$ tfsec
Result #1 CRITICAL Security group rule allows ingress from public internet.
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
tfsec_test.tf Line 11
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
6 │ ingress {
7 │ description = "TLS from VPC"
8 │ from_port = 443
9 │ to_port = 443
10 │ protocol = "tcp"
11 │ cidr_blocks = ["0.0.0.0/0"] ##tfsec:ignore:aws-vpc-no-public-ingress-sgr
12 │ }
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
ID aws-vpc-no-public-ingress-sgr
Impact Your port exposed to the internet
Resolution Set a more restrictive cidr range
More Information
- https://aquasecurity.github.io/tfsec/v1.10.0/checks/aws/vpc/no-public-ingress-sgr/
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule#cidr_blocks
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Visual Studio Code extension 을 제공한다. 코드를 짜면서 바로 확인을 할 수 있다. https://marketplace.visualstudio.com/items?itemName=tfsec.tfsec
github actoins 를 제공하며 Github Security alerts 와 통합을 할 수도 있다. 그러면 github security tab에서 결과를 볼 수 있다.
https://github.com/aquasecurity/tfsec-pr-commenter-action
체크하여 나오는 결과를 무시하려면 tfsec:ignore:<rule>
형태의 주석을 달면 된다. cli로 실행시에는 옵션을 이용하여 조정하면 된다.
AWS check 항목 : https://aquasecurity.github.io/tfsec/v1.10.0/checks/aws/
terrascan
https://github.com/accurics/terrascan
Terrascan은 Infrastructure as Code용 정적 코드 분석기입니다. Terrascan을 사용하면 다음을 수행할 수 있습니다.
잘못된 구성에 대한 코드로서의 인프라를 원활하게 스캔합니다.
상태 드리프트를 도입하고 안전한 상태로 되돌릴 수 있도록 하는 구성 변경에 대해 프로비저닝된 클라우드 인프라를 모니터링합니다.
보안 취약점 및 규정 준수 위반을 감지합니다.
클라우드 네이티브 인프라를 프로비저닝하기 전에 위험을 완화하십시오.
로컬에서 실행하거나 CI\CD와 통합할 수 있는 유연성을 제공합니다.
주요 특징들
보안 모범 사례를 위한 500개 이상의 정책
Terraform (HCL2) 스캔
Kubernetes (JSON/YAML), Helm v3 및 Kustomize 스캔
Dockerfile 스캔
AWS , Azure , GCP , Kubernetes , Dockerfile 및 GitHub 지원
AWS, Azure, GCP, Harbor 컨테이너 레지스트리에 대한 도커 이미지 취약점 스캔과 통합됩니다.
AWS policies https://runterrascan.io/docs/policies/aws/
설치하고 terrascan scan
명령을 실행하면 되며 기본은 Terraform 코드를 스캐닝한다.
기타
아래 프로그램으로 비교하고 있음.
checkov Snyk terrascan tfsec
위 문서에서 보안에 문제가 있는 terraform 코드 예제 : GitHub - bridgecrewio/terragoat: TerraGoat is Bridgecrew's "Vulnerable by Design" Terraform repository. TerraGoat is a learning and training project that demonstrates how common configuration errors can find their way into production cloud environments.
참고
Terraform Registry CIS Amazon Web Services Foundations v1.4.0 및 AWS Foundational Security Best Practices v1.0.0 을 기반으로 하는 terraform 코드