LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック
ラックピープル | 

Terraform+Snykで、セキュアなクラウドインフラ構築&運用自動化を実現しよう!

パブリッククラウドにおける、セキュリティの高いインフラ構築、運用自動化を実現するHashiCorp Terraformの導入実績が増えてきています。

今回は日本市場への進出が発表されたSnyk(スニーク)を使って、Terraformと組み合わせ、よりセキュアにクラウドインフラの構築・運用を自動化する方法についてご紹介します。

Terraformについて、簡単におさらい

Terraformではクラウドの構成をコードで記述、いわゆるInfrastructure as Code(以下、IaC)と呼ばれる手法により多数のクラウドの構築、運用を効率的に行うことが可能です。

Infrastructure as Codeのイメージ
図1 Infrastructure as Codeのイメージ

ここでコード記述する際、気になるのはセキュリティ及びガバナンスへの対応です。記述したコードの中にセキュリティ上の脆弱性や社内ポリシーに違反した設定があると、構築したクラウドはサイバー攻撃や情報漏洩リスクにさらされます。

例えば以下のような場合です。

  • 禁止されている海外リージョンへクラウドを立ち上げる設定をする
  • 上司不在の夜間時間帯に、勝手に新しいクラウドの立ち上げや設定変更をする
  • 高額なクラウドインフラを上司の許可なく立ち上げる
  • セキュリティグループのCIDRブロックレンジを0.0.0.0/0と設定する
  • AWS S3へ暗号化しないで、データを保管する

IaCではソフトウェア開発のようにコードを第三者が目視でチェックすることにより、上記のような問題を見つけ出すことは可能です。しかし管理するインフラが増加しチェックの対象が多くなると、人手を介したチェックでは非効率です。このときに役に立つのがTerraform Sentinelによる自動チェックです。

Snykとは

Snyk社(Snyk Limited)は米国ボストンを拠点に、クラウドセキュリティを実現するサービス開発を行う企業です。そして社名と同じ名前のサービスSnykは、開発者向けのセキュリティプラットフォームです。開発ツール、ワークフロー、自動化パイプラインに統合することで、開発チームがコード、その依存関係、コンテナ、インフラに存在するセキュリティの脆弱性をコードとして発見します。その脆弱性への対応に優先順位を付け、修正できます。

Snykには以下の機能があります。

  • Snyk Open Source(スニーク オープンソース)
    オープンソースの脆弱性をチェックし、自動的に修正します
  • Snyk Container(スニーク コンテナ)
    コンテナイメージと、Kubernetesアプリケーションの脆弱性をチェックし、修正します
  • Snyk Infrastructure as Code(スニーク インフラストラクチャ アズ コード)
    TerraformやAWS Cloud FormationなどIaCコードの静的解析を行い、セキュリティ上の脆弱性をチェック・修正します
  • Snyk Code
    アプリケーションコードの脆弱性をリアルタイムでチェックし、修正します

この中で今回着目するSnyk Infrastructure as Code(以下、Snyk IaC)では、IaCにおいて管理するコードに以下のような問題が無いかポリシーセットが用意されており、自動でチェックできます。

  • EBSボリュームが暗号化していない
  • セキュリティグループ(ingress)がフルオープンとなっている
  • metadataにシークレットがハードコーディングされている
API Gatewayのルールポリシーセット例
図2 API Gatewayのルールポリシーセット例

Terraform SentinelとSnyk IaCの違い

TerraformにはSentinelというセキュリティ、ポリシーチェック機能があります。Sentinelはユーザー自身で個別にルールを実装する必要があり、組織独自ルールなど柔軟にチェックすべき内容を設定できます。

Sentinelの独自ルール実装例(CIDRブロックレンジをチェックする場合)
図3 Sentinelの独自ルール実装例(CIDRブロックレンジをチェックする場合)

一方Snyk IaCは各クラウドサービスに応じて多くのセキュリティルールのプリセットが用意されています。例えばAWSの場合、現在157ものルールが用意されています(2021年12月現在)。一般的かつ大量のセキュリティポリシーを適用する場合は、プリセットを用意しているSnyk IaCを利用すると実装コストを下げられます。

Terraform Sentinel Snyk IaC
設定方法 ユーザー自身で個別にルールを実装 ポリシーセットが用意されている
得意な領域 組織独自ルール(ガバナンス)のチェック 一般的なプラクティスに基づくセキュリティチェック
Terraform SentinelとSnyk IaCの比較

なお、TerraformとSnyk IaCを組み合わて利用するフローには、2つのパターンがあります。

パターン1:GitHub Actionsに組み込む

Github ActionsによるCIパイプラインを起点に、Snyk IaC及びTerraformを順次実行するフローです。既存のパイプラインに組み込みやすいメリットがあります。

GitHub Actionsに組み込む場合のフロー
図4 GitHub Actionsに組み込む場合のフロー

パターン2:Terraform Run Tasksに組み込む

2021年9月にTerraformの新機能「Run Tasks」のベータ版がリリース※1されました。これにより、TerraformのPlan時にSnyk IaCのようなサードパーティのツールを呼び出し実行することが出来るようになりました。

※1 Run Tasks - Workspaces - Terraform Cloud and Terraform Enterprise | Terraform by HashiCorp

Terraform Run Tasksに組み込む場合のフロー
図5 Terraform Run Tasksに組み込む場合のフロー

このうちパターン2の実装例を見てみましょう。

まずチェック対象のTerraformのコードを用意します。
このコードは、AWS上に仮想マシンを構成するものですが、12行目でAWSのセキュリティベストプラクティス※2に反し、ディスクの暗号化オプションが無効になっています。

※2 [EC2.3] を参照
AWS の基本的なセキュリティのベストプラクティスコントロール - AWS Security Hub

ディスクの暗号化オプションが無効になっている構成例
図6 ディスクの暗号化オプションが無効になっている構成例

次に上記コードをGitHubにコミットして、Terraformを実行します(図7はTerraform実行画面)。ここではPlan(IaCの文法チェック)、CostEstimation(この構成でApplyした場合のクラウド費用見積)、Sentinel(ガバナンスチェック)をパスし、Snyk IaCによるセキュリティチェックでエラーが起きています。

Terraform Planの実行例
図7 Terraform Planの実行例

そしてエラー部分のリンクをクリックするとSnyk IaCのUI画面に遷移し、具体的なエラー内容及び、修正方法が表示されます。

Snyk IaCでチェックした結果及び修正方法の表示例
図8 Snyk IaCでチェックした結果及び修正方法の表示例

このようにSnyk IaCの導入により、クラウドインフラの構築前に脆弱性を修正できます。すなわち、テスト工程を前倒しし、設計段階からセキュリティの考慮を行うことで実装の手戻りを防止する"シフトレフト"を実現します。

さいごに

Terraformはクラウドインフラを自動で素早く、大量に、かつ安全に構築するための機能を提供しています。そこへSnyk IaCの機能を組み合わせると、更にセキュアなクラウドを素早く構築することが可能となります。ぜひみなさんも試してみてください。

この記事は役に立ちましたか?

はい いいえ