Terraform Cloudと統合してSnyk IaCを実行してみた

SnykとTerraform Cloudの統合を行ってみました。非常に簡単に統合できました。
2022.10.13

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、Terraform Cloudと統合してSnyk IaCを実行してみようと思います。

前提条件

まず初めにTerraform CloudとSnyk IaCを統合するには、Terraform Cloud側で有料プランを利用する必要があったため注意が必要です。

This feature is available for all Snyk plans. Note that Terraform Cloud run tasks are available in the Terraform Cloud Team & Governance tier. The Terraform Cloud Free tier does not support run tasks.

今回の記事は、Hashicorp社と交渉の上、検証用のトライアルアカウントを利用しています。

全体像

全体像は以下になります。

terraform plan実行後にSnyk IaCを実行するように統合します。

Run Tasks Integrationより引用

Snyk Account Credentialsの取得

Terraform CloudのRun Taskで利用する、Snyk Account Credentialsの取得を行います。

Snyk Account Credentialsは、Organization単位で取得可能みたいです。

「Integrations」から「terraform」と入力し「Terraform-Cloud」をクリックします。

「Account Credentials」の画面に遷移したら、「URL」と「HMAC Key」をコピーして控えておきます。

Run Taskの作成

では、Terraform Cloud側でSnyk Account Credentialsを利用してRun Taskを作成していきます。

Organization Settingsの「Run tasks」から「Create Run task」をクリックします。

「Create a Run Task」画面位遷移したら、Run Taskの作成に必要な情報を入力します。

「Endpoint URL」と「HMAC key (optional)」には、Snyk Account Credentialsで取得した情報を設定します。

Workspaceへの関連付け

Run Taskの作成が完了したら、Terrform CloudのWorkspaceへ関連付けを行います。

Workspace Settingsの「Run tasks」をクリックします。

Run Taskの作成が完了している場合、「Available Run Tasks」に先ほど作成したRun Taskが表示されます。作成したSnykのRun Taskをクリックします。

「Associate Run Task」画面に遷移したら、WorkspaceとRun Taskの関連付けを行います。

今回はterraform planの後に行いたいため、Run stageを「Post-plan」で選択します。また、Enforcement Levelは「Advisory」で進めていきます。

Run Taskの実行

Workspaceへの関連付けまで完了したため、Run Taskを実行していきます。次のコードを用意してSnyk IaCルールが検知されるように検証します。

main.tf

resource "aws_vpc" "vpc" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "pubic" {
  vpc_id = aws_vpc.vpc.id
  cidr_block = "10.0.1.0/24"
  map_public_ip_on_launch = true
}

上記のコードでは「map_public_ip_on_launch」がtrueであるため以下のルールに検知されます。

予定通り、Post-planで検知されていることがわかります。

「Details」をクリックするとSnyk Web UIにリダイレクトし検知されたルールの詳細が確認できます。

参考

まとめ

以上、Terraform Cloudと統合してSnyk IaCを実行してみたでした。

非常に簡単にセットアップできたのでぜひ、お手元で試してもらえればと思います。この記事がどなたかの参考になれば幸いです。

AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!