Terraform Registry の Policy Libraries を利用した HCP Terraform への Policy as Code 導入を行ったため紹介します。
HCP Terraform
HCP Terraform はチームでの Terraform 利用を支援する SaaS です。
HCP Terraform is an application that helps teams use Terraform together. It manages Terraform runs in a consistent and reliable environment, and includes easy access to shared state and secret data, access controls for approving changes to infrastructure, a private registry for sharing Terraform modules, detailed policy controls for governing the contents of Terraform configurations, and more.
Policy as Code
Policy as Codeは、セキュリティのルール、基準、条件をコードで定義・管理する方法です。
HCP Terraform には Policy as Code を実践するための機能が備わっており、Sentinel もしくは OPA が利用できます。
Policy Libraries
Policy as Code を実践していこうとなった際に具体的にどのようなポリシーを用意すべきか検討する必要があります。しかし、初期段階ではポリシーの洗い出しが出来てなかったりするので、まずは一般的なセキュリティフレームワークの内容をチェックしてくれるポリシーを利用したいと思うこともあると思います。そんな時は Terraform Registry の Policy Libraries の出番です。Policy Libraries には CIS ベンチマーク等をチェックするポリシーが公開されており、利用者は参照するのみでポリシーを利用できます。なお Policy Libraries には Sentinel ポリシーのみが公開されています。
Policy Libraries にて提供されているポリシーを HCP Terraform で利用してみる
以下に Policy Libraries にて提供されているポリシーを HCP Terraform で利用するまでの手順を記載します。HCP Terraform におけるポリシー設定にはいくつか方法がありますが、今回は VCS 連携の手順を記載します。
HCP Terraform と連携する VCS を用意する
ポリシーファイルを管理する VCS を用意します。後の手順でこの VCS と HCP Terraform を連携します。今回は VCS として GitHub を利用します。
Policy Libraries から利用するポリシーを選択し、ポリシーファイルにポリシー定義を記載する
Policy Libraries から利用するポリシーを選択すると、ポリシー定義のコードスニペットが表示されるので、これをポリシーファイルに転記します。
VCS 連携する場合はポリシー定義には sentinel.hcl
という名前で単一ファイルに記載する必要があるため注意してください。
HCP Terraform にて Policy Sets を設定する
HCP Terraform の Policy Sets 設定画面からポリシーファイルを格納した VCS と連携します。その際にどの Project もしくは Workspace に対してポリシーを定義するか設定することが可能です。
Policy Libraries で公開されているポリシーはまだまだ少ない(2024/06時点)
Policy Libraries はまだ Beta 機能ということもあり、公開されているポリシーも数十個程しかありません。HashiCorp 社含め企業が提供しているポリシーに限定するとさらに数は少なくなります。GA のタイミングでポリシーが拡充されることを期待します。
まとめ
Terraform Registry の Policy Libraries を利用した HCP Terraform への Policy as Code 導入の概要と手順を記載しました。Policy as Code を導入したいけど、どこから手を付けたら良いか分からないという場合にはファーストステップとして Terraform Registry の Policy Libraries を使うと良さそうです。