👀

Terraform 静的検査ツール比較

2023/06/16に公開

対象

  • tfsec
  • tflint
  • KICS
  • Checkov
  • Snyk

tfsec

https://github.com/aquasecurity/tfsec

https://aquasecurity.github.io/tfsec/v1.28.1

特徴

CI系

検査系

開発系

tflint

https://github.com/terraform-linters/tflint

特徴

CI系

検査系

開発系

KICS

https://github.com/Checkmarx/kics

https://docs.kics.io/latest/queries/terraform-queries

特徴

CI系

検査系

開発系

Checkov

https://github.com/bridgecrewio/checkov

https://www.checkov.io/5.Policy Index/terraform.html

特徴

CI系

検査系

開発系

実際の検査についての比較

各クラウドに対応していますが、今回はAWSの検査の比較をしてみます。

リソースの網羅度

使用率が高いリソースはおそらくどのツールも指摘してくれるので、あまり使わないリソースについて指摘してくれるかを確認してみます。
ベストプラクティスなどの知見が少なく指摘して欲しいため。

tfsec tflint KICS Checkov
api-gateway
athena
autoscaling
cloudfront
cloudtrail -
cloudwatch
codebuild
config
documentdb
dynamodb
ebs
ec2
ecr
ecs
efs
eks
elasticsearch
elasticache
elb
emr
iam
kinesis
kms
lambda
mq
msk
neptune -
rds
redshift
s3
sns -
sqs -
ssm
vpc
workspaces
acm - -
accessanalyzer_analyzer - -
amplify - - -
appconfig - - -
appmesh - -
apprunner - - -
appstream - - -
appsync - -
backup - -
batch -
budgets - -
chime - - -
cloud9 - -
cloudformation -
cloudfront - - -
cloudhsm - -
codeartifact - -
codecommit - -
codedeploy - -
codepipeline - -
codestarconnections - - -
cognito -
connect - -
cur - -
customer_gateway - -
datasync - -
db_proxy - - -
devicefarm - -
directory_service - -
dlm - -
dms - -
dx - -
elastic_beanstalk - -
elastictranscoder - -
flow_log - -
fms - -
fsx - -
gamelift - -
globalaccelerator -
glue -
guardduty -
imagebuilder - -
inspector - -
iot - -
lakeformation - - -
licensemanager - -
lightsail - -
macie - -
media_store - -
memorydb - -
opsworks - -
organizations -
placement_group - -
prometheus - - -
quicksight - -
resourcegroups - -
route53 -
sagemaker -
schemas - - -
securityhub - -
service_discovery - -
servicecatalog - -
servicequotas - -
ses - -
sfn - -
shield - -
signer - - -
spot - -
ssoadmin -
storagegateway - -
swf - -
timestreamwrite - -
transfer - -
worklink - -
identitystore - -
dax - -
waf
xray
vpn - - -
secretsmanager
scheduler - - -
security_group
pinpoint - - -
opensearch - - -
appautoscaling - -
appflow - - -
cloudsearch - - -
codestarnotifications - - -
comprehend - - -
datapipeline - - -
kendra - - -
media_convert - - -
media_package - - -
mwaa - - -
qldb - - -
ram - - -
sdb - - -
networkfirewall -

リソースベースだとtflintとCheckovが網羅度が高いです。
tflint = Checkov > KICS > tfsec
ただ、KICSもtfsecも主要なリソースは指摘してくれるので一般的な利用だとどれでも良さそうです。
指摘の内容にもよってくるので次は検査項目について比較してみます。

検査項目の比較

次にどんな指摘をしてくれるかを見てみます。
全てを確認すると時間が幾らあっても足りないので抜粋して確認します。

EKS

全体感を確認するために4つとも対応していて使用頻度の高いEKSで比較。

tfsec tflint KICS Checkov
コントロールプレーンのログを有効化している -
secretsリソースの保護のためにencryption_configブロックを設定している -
パブリックアクセスCIDRを明示的に設定 -
パブリックアクセスを無効 -
アドオンに設定するクラスタ名が有効 - - -
アドオンに設定するresolve_conflictsが有効 - - -
アドオンに設定するservice_account_role_arnが有効 - - -
クラスタ名が有効 - - -
ノードグループに設定するami_typeが有効 - - -
ノードグループに設定するcapacity_typeが有効 - - -
SourceSecurityGroupsを設定していない場合はリモートアクセスをしない - - -
0.0.0.0/0からの暗黙のSSHアクセスを許可していない - - -
サポートされているKubernetes version - - -

tflintだけ毛色が違う指摘でベストプラクティスというよりplan,applyが通るかを見てるようです。
他のtfsec, KICS、Checkovは同じような内容で大事なところは漏れなく指摘してくれています。

Route 53

tflintは求めているものとは違いそうなので、tfsecが対応していないものでkicsとcheckovを比較。

KICS Checkov
recordsを設定している -
Aレコードにリソースがアタッチされている -
パブリックホストゾーンに対してDNSSEC署名を有効化している -
クエリログを有効化している -

KICSよりもChekovの方が指摘事項が多くより実になる内容になっています。

DynamoDB Accelerator

あんまり使用頻度の高くないもので比較。

KICS Checkov
保管時の暗号化が有効
エンドポイントでTLSを利用 -

Route 53と同様にCheckovの方が多いです。

ドキュメントの充実度

検査項目の説明が詳しくされているか意図を汲めるか確認してみます。

tfsec

https://aquasecurity.github.io/tfsec/v1.28.1/checks/aws/eks/encrypt-secrets/

説明、影響、解決法、インセキュアな例、セキュアな例、参考リンクが記載されている。

KICS

https://docs.kics.io/latest/queries/terraform-queries/aws/63ebcb19-2739-4d3f-aa5c-e8bbb9b85281/

説明、インセキュアな例、セキュアな例が記載されている。

Chekcov

https://github.com/bridgecrewio/checkov/blob/main/checkov/terraform/checks/resource/aws/EKSSecretsEncryption.py

説明のみで詳細はPythonかYAMLのファイルを読む。

まとめ

リソースの網羅度が高く検査項目も多いCheckovを導入するのが基本的には良さそうです。ただ、tfsecやKICSと違って詳細を確認するのにコードを読む必要がありますし、OPA/Regoを使うこともできないです。しかし、Checkovの他の追随を許さないカバー力には補って余りある魅力があります。

Discussion