
Infrastructure as Code全体でコンプライアンスとセキュリティ違反を検出し、クラウドネイティブインフラストラクチャをプロビジョニングする前にリスクを軽減します。
- このプロジェクトはメンテナンスされなくなりました。リポジトリはアーカイブされており、今後のアップデート、Issue、プルリクエストは受け付けられません。
- 開発を継続したい場合は、自由にフォークしてください。

Terrascan は Infrastructure as Code(IaC)向けの静的コード解析ツールです。Terrascan を使用すると、以下のことが可能です。
Terrascan をブラウザで試すには、Terrascan サンドボックス https://www.tenable.com/terrascan をご覧ください。
Terrascan の機能と能力の詳細については、ドキュメントポータル https://runterrascan.io をご覧ください。
Terrascan は複数のインストール方法をサポートしており、Docker イメージとしても利用可能です。 サポートされているすべてのプラットフォームにおける最新ビルドバージョンについては、Terrascan の リリースページ を参照してください。ご自身のプラットフォームに適したバイナリを選択してください。
curl -L "$(curl -s https://api.github.com/repos/tenable/terrascan/releases/latest | grep -o -E "https://.+?_Linux_x86_64.tar.gz")" > terrascan.tar.gz
tar -xf terrascan.tar.gz terrascan && rm terrascan.tar.gz
sudo install terrascan /usr/local/bin && rm terrascan
terrascan
AUR 経由でインストールArchLinux および Manjaro ユーザーは以下でインストールできます。
yay -S terrascan
brew 経由でインストールHomebrew ユーザーは以下でインストールできます。
$ brew install terrascan
Terrascan は Docker イメージとしても利用可能で、以下のように使用できます。
$ docker run tenable/terrascan
詳細についてはドキュメントを参照してください。
コードのセキュリティ問題をスキャンするには、次のコマンドを実行します(デフォルトでは Terraform をスキャンします)。
$ terrascan scan
注: スキャン中にエラーや違反が見つかった場合、Terrascan はエラーコードで終了します。
| シナリオ | 終了コード |
|---|---|
| スキャンサマリーにエラーと違反がある | 5 |
| スキャンサマリーにエラーはあるが違反はない | 4 |
| スキャンサマリーに違反はあるがエラーはない | 3 |
| スキャンサマリーに違反もエラーもない | 0 |
Terrascan は CI/CD パイプラインに統合してセキュリティベストプラクティスを強制できます。 パイプラインへの統合については、ドキュメントを参照してください。
terrascan コマンドは以下のオプションで使用できます。
$ terrascan
Terrascan
Usage:
terrascan [command]
Available Commands:
help Help about any command
init Initialize Terrascan
scan Detect compliance and security violations across Infrastructure as Code.
server Run Terrascan as an API server
version Terrascan version
Flags:
-c, --config-path string config file path
-h, --help help for terrascan
-l, --log-level string log level (debug, info, warn, error, panic, fatal) (default "info")
-x, --log-type string log output type (console, json) (default "console")
-o, --output string output type (human, json, yaml, xml) (default "human")
Use "terrascan [command] --help" for more information about a command.
Terrascan のポリシーは Rego ポリシー言語 を使用して記述されています。各 Rego には、ポリシーのメタデータを定義する JSON の "rule" ファイルが含まれています。 デフォルトでは、Terrascan は初回スキャン時に Terrascan リポジトリからポリシーをダウンロードします。ただし、最新のポリシーをダウンロードしたい場合は、初期化プロセスを実行する必要があります。初期化プロセスの詳細については使用方法を参照してください。
注: スキャンコマンドは、ポリシーが見つからない場合に暗黙的に初期化プロセスを実行します。
--find-vuln フラグを使用して、コンテナレジストリで報告された脆弱性を Terrascan の出力の一部として収集できます。現在、Terrascan は Elastic Container Registry(ECR)、Azure Container Registry、Google Container Registry、Google Artifact Registry をサポートしています。
--find-vuln フラグは、IaC ファイルのスキャン時に次のように使用できます。
$ terrascan scan -i <IaC provider> --find-vuln
レジストリの API で認証するための環境設定方法の詳細については、使用方法のドキュメントを参照してください。
デフォルトでは、Terrascan はすべてのポリシーに対して構成全体をスキャンします。ただし、Terrascan はポリシーとリソースの詳細な設定をサポートしています。
ファイル内計測 と設定ファイルの詳細については、ドキュメントサイトでお読みください。
ここでは、いくつかのクイックヒントを紹介します。
リソースのスキャン時に特定のポリシー(ルール)をスキップするように Terrascan を設定できます。プラットフォームに応じて以下の手順に従ってください。
Terraform スクリプトを使用して、リソース内に "ts:skip=<RULENAME><SKIP_REASON>" というフレーズのコメントを挿入することで、Terrascan にルールをスキップするよう設定します。以下の例のように、コメントをリソース内に含める必要があります。

Kubernetes YAML では、以下のスニペットのようにアノテーションを追加することで、Terrascan にポリシーをスキップするよう設定できます。

Terrascan 設定ファイルを使用して、スキャン全体に含める、または除外するポリシーを手動で選択します。これはエッジケースに適しています。 "in-file" 抑制オプションを使用して、特定のポリシーに対してテストされるリソースを指定します。これにより、ポリシーはすべてのリソースではなく、特定のリソースに対してのみスキップされます。

Terrascan のデフォルト出力は、スキャンされた IaC に存在する違反のリストです。サンプル出力:

Terrascan はローカルでビルドできます。これは、最新バージョンを使用したい場合や、Terrascan の開発を行う場合に便利です。gcc と Go 1.19 以上が必要です。
$ git clone [email protected]:tenable/terrascan.git
$ cd terrascan
$ make build
$ ./bin/terrascan
FROM golang:alpine AS build-env
RUN apk add --update git
RUN git clone https://github.com/tenable/terrascan && cd terrascan \
&& CGO_ENABLED=0 GO111MODULE=on go build -o /go/bin/terrascan cmd/terrascan/main.go
Terrascan の開発とコントリビューションについて詳しくは、コントリビューションガイドを参照してください。
私たちは、オープンでインクルーシブなコミュニティがすべての人にとって有益であると考えています。このプロジェクトはコントリビューター行動規範のもとで公開されています。このプロジェクトに参加することで、その条項に同意したものとみなされます。
Terrascan は Apache 2.0 ライセンス のもとで提供されています。
| スキャンコマンドが無効な入力でエラーになる | 1 |