IaC Security入門 ~tfsecを用いたTerraformファイルのセキュリティチェック~
2023年03月14日 火曜日
CONTENTS
はじめに
Infrastrucutre as Codeは、インフラの構成情報をコードとして管理するという取り組み・概念です。最近、といっても結構前からですが、このコード自体のセキュリティもチェックしようという動きがあります。それは、IaC Securityと呼ばれます。今回は、IaC Securityの入門として、Terraformを題材にセキュリティチェックを行うことができるtfsecを紹介します。
普段SOCでマルウェア解析をしている私は、兼務として社内のSREチームで働いています。兼務の中でTerraformに触る機会が増え、名前や概念は知っているものの使ったことなかったtfsecを使ってみました。やはりツールというものは知っているだけではあまり意味がなく、実際に使ってみて活用方法、良し悪しを自分なりに解釈していくことが大事だと思います。tfsec自体はすでに昔からあるツールですが、本記事がきっかけとなり知る人が増え、活用していただけると幸いです。
tfsecとは
tfsecとは、コンテナイメージスキャナTrivyなどでも知られるAqua Security社が管理しているOSSです。今後機能は、Trivyに集約されていくそうですが、現在はまだ異なるものとして存在しています。tfsecは、tfファイルのStatic Analysisをしてくれるツールなため、Terraformを動作させることなく、設定のセキュリティ的にいけていない部分を検査してくれます。この、Static Analysisという性質は、Dynamic Analysisよりも早く動かすことができたり、Terraform自体の動作環境を必要としないという観点からCI/CDパイプラインなどに組み込むことにも適しています。たとえば、GitHub Actionsなどでチェックすることで、DevSecOpsを実現することができます。
tfsecを使ってみる
では、実際の実行の様子を紹介します。シンプルな使い方としては、コマンドライン上で「tfsec .」と入力するだけです。これで、カレントディレクトリに存在するtfファイル群を走査して解析してくれます。下記の結果は、Azure上でインターネット公開してしまっているContainer(Azure Storageサービス用語で、FSでいうフォルダのようなものです。)があることを示唆しています。
More Informationの部分で、Aqua Security社の公開されているドキュメントへのリンクがあり、詳細なアクションを確認することができます。具体的なSecure Exampleが載っている点は、非常に便利だと思います。今回の場合だと、「container_access_type = “private”」とすることがセキュアな例だと紹介されています。
https://aquasecurity.github.io/tfsec/v1.28.1/checks/azure/storage/no-public-access/
意図した検知ルールの無視設定
次に、さまざまな理由で意図的に行っているが、検知されてしまうため、ルールを無視したくなった時の方法を紹介します。先の例であげた、Azure StorageのContainerの公開がが意図したものである場合を例に考えます。下記のコードのように、検知している箇所の前の行(もしくは、末尾)に、「tfsec:ignore:検知ID」のフォーマットでコメントを記載します。
カスタムルールの作成
tfsecは、既存で提供されているルール以外にも、自分でルールを作ることができるカスタムルールと呼ばれる機能が備わっています。これは、YAMLファイルで定義します。下記は、Azure環境において、リソースに「owner」と呼ばれるキーのタグが付いているかを検知するためのカスタムルールの例です。説明やエラーメッセージ、解決策なども自分で定義することができます。組織にとってわかりやすい形で、規則を持たせて書いていくと良いルールを作っていくことができそうです。
--- checks: - code: CUS001 description: Custom check to ensure the Owner tag is applied to resources errorMessage: Owner tag was missing resolution: Add the Owner tag matchSpec: action: contains name: tags value: owner requiredTypes: - resource requiredLabels: - azurerm_* severity: ERROR
おわりに
今回は、IaC Securityの入門と題してTerraformを題材とし、tfsecを紹介しました。脆弱な設定を検知する例、そしてそれが意図した場合に検知から除外する方法、そしてカスタムルールの例を紹介しました。同様のツールはいくつか存在し、今ではTrivyでもチェックを行うことができたり、checkcovなども代表的なツールとして知られています。これらは、Terraformだけではなく、さまざまなものを解釈し、セキュリティチェックすることができます。有する機能が異なるため、いくつかツールを試しながら、欲しい要件のものを探すとよいと感じました。