Skip to main content

Snyk IaCでHashiCorp Terraformのクラウド設定ミスを防ぐ

Infrastructure as Code security

2021年5月13日

0 分で読めます

Terraformユーザーが設定を作成、計画、適用する方法を支援するために設計された、Snyk Infrastructure as Code(Snyk IaC)の新機能をご紹介します。Snyk IaCを使えば、コードの作成中にセキュリティ設定に関するガイダンスをすぐに確認できます。また、デプロイパイプラインでTerraformプランをスキャンし、変更内容と設定全体の安全性を確かめられます。さらに、数千のファイルを含む設定にも対応できるようパフォーマンスを大幅に向上させるとともに、プライベート環境の詳細情報を非公開に保つためのセキュリティも強化しました。

Terraformのライフサイクル全体で設定ミスを排除

Snyk IaCの新機能を活用すれば、Terraformを他のコードと同じように扱い、セキュリティ対策を開発の早い段階に移行して、Terraformのライフサイクル全体に設定のセキュリティを組み込めます。Snyk IaCは、コードの作成時から設定ミスをテストし、クラウドや業界のベストプラクティス、組織のポリシーに基づいて、エンジニアにすぐにフィードバックとガイダンスを提供します。Terraformモジュールがコミットされ、自動テストが始まると、Snyk IaCがTerraformプランをテスト。加えられる変更を包括的に把握し、デプロイ後の予期せぬ問題やデグレードを防いで、環境の安全性を確保します。

クラウド設定ミスの検出にTerraformプランのスキャンが重要な理由

Snyk CLIを使うと、TerraformやKubernetesのファイルをローカル環境やCI/CDでスキャンでき、コードの作成中やコードリポジトリで即座にフィードバックを得られます。個々の変更を確認するには便利ですが、適用予定の変更をすべて、組み込まれたモジュールや変数の影響も含めてまとめて確認したい場合は、Terraformプランファイルをスキャンするのが最適です。

今回のリリースでは、Snyk CLIのワークフローでTerraformプラン(tf-plan)ファイルをスキャンできるようになり、提案された変更によって現在のクラウドインフラに新たなセキュリティ脆弱性が生じないかを検出できます。Terraformのワークフロー全体でSnyk IaCを活用する方法を示すため、HashiCorpのチュートリアルBlue-GreenおよびカナリアデプロイでのApplication Load Balancerの使用のコードを使い、シンプルなローカルの「作成、テスト、プラン、テスト、適用」ワークフローの例を紹介します。

ブルーグリーンデプロイメント戦略の解説もご覧ください。

Terraformのソースコードでクラウド設定ミスをテスト

Snykを使い始める前に、HashiCorpが提供するTerraformをすでに適用していたため、環境は稼働中で、Terraformコードもgitに保存されています。そこでSnyk IaCを使って懸念される問題がないか確認するため、SnykをGitHubリポジトリに連携しました。結果はSnykコンソールで確認できます。

purpledobie/snyk-iac-tfで中程度の問題が2件、低程度の問題が2件検出され、Terraformファイル別に検出結果が表示されたSnyk Terraformスキャンのダッシュボード。

重大度の高い問題はありませんが、main.tfを開くと、ロードバランサーがHTTPではなくHTTPSを使う設定になっていることに気付きました。デフォルトでは中リスクの問題ですが、セキュリティチームが好まない設定です。SnykのUIでは、コード内の問題箇所とその影響、解決方法を確認できます。

HTTPを使用するAWSロードバランサーのリスナーを示すTerraformコードレビューと、HTTPSが強制されていないことを指摘する検出結果。

コーディング中にTerraformのセキュリティをスキャン

Snyk IaCの指摘に従ってTerraformファイルを変更し、ロードバランサーでHTTPSを使うようにしました。証明書の作成と使用も必要なので、それも設定に追加しました。変更をプッシュする前に、HTTPSの問題を修正したことで別の問題が生じていないか、簡単に確認しておきたいと思います。また、インターネットに公開しているアプリケーションなので、「ロードバランサーがインターネットに公開されている」というSnyk IaCのアラートはもう必要ありません。セキュリティ管理者に無効化を依頼しました。Snyk IaCなら簡単に設定できます。変更したのはmain.tfだけなので、コミット前にローカルでテストします。

$ snyk iac test main.tf

Testing main.tf...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       main.tf
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      main.tf

Tested main.tf for known issues, found 0 issues

完了です。HTTPSの問題を修正し、セキュリティチームが「インターネットに公開」のチェックを無効にしたので、少なくともmain.tfでは問題がゼロになりました。これで安心です。変更をデプロイしましょう。

パイプラインでTerraformの設定ミスをスキャン

変更を適用する前に、何が変わるのかを把握するためTerraformプランを実行する必要があります。Terraformプランにはすべてのモジュールにわたる変更が反映され、変数もすべて含まれるため、変更の影響をより正確に把握できます。ここでもTerraformのライフサイクルにSnyk IaCを組み込み、設定内の他のモジュールに変更が影響しないことを確認できます。以下の例では簡単にするためすべてローカルで実行していますが、任意のCIツールでSnyk CLIを使ってプラン作成とテストを自動化するのも簡単です。

# generate a Terraform plan in JSON format:
$ terraform plan -out=tfplan.bin
$ terraform show --json tfplan.bin > tfplan.json

# And use Snyk to test the plan to see I caused any issues:
$ snyk iac test tfplan.json 

Testing tfplan.json...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 0 issues

変更に問題はなさそうです。セキュリティ上の問題はありません。ですが、ひとつ気になることがあります。ここまでテストしたのはリソースの変更(Snyk IaCのデフォルト)のみで、編集したのも単一のファイル(main.tf)だけなので、この結果は当然です。しかし、Terraformの設定はSnyk IaCを使い始める前から適用され、稼働していました。新しい変更だけでなく、すでに稼働中のデプロイに関する既知の設定情報も確認できるよう、すべてのプラン値をチェックしたいと思います。

Terraformの状態を含めてクラウド設定ミスのチェックを強化

新しいSnyk IaCのtf-plan機能を使えば、プラン値をチェックできます。--scan=planned-valuesオプションを指定するだけで、プラン値をスキャンできます。ここでもCIでの実行をおすすめしますが、簡単にするためCLIを使います。

$ snyk iac test --scan=planned-values tfplan.json

Testing tfplan.json...

Infrastructure as code issues:
  ✗ Security Group allows open ingress [High Severity] [SNYK-CC-TF-1] in VPC
    introduced by resource > aws_security_group[this_name_prefix] > ingress[0]
.
.
.
  ✗ Non-Encrypted root block device [Medium Severity] [SNYK-CC-TF-53] in EC2
    introduced by aws_instance[blue] > root_block_device > encrypted
.
.
.

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 20 issues

あらら。今回は問題が20件あり、重大度が「高」の問題もいくつか混在しています(上記の出力では、簡潔にするため「高」と「中」の問題を1件ずつだけ示しています)。

モジュールと変数も含めてTerraformをスキャン

この結果から、さらに対応が必要なことが分かりました。また、tf-planをスキャンすると、ファイルのスキャンだけでは見つからない興味深い点も分かります。今回見つかった重大度の高い問題は、この例の冒頭で行ったgitリポジトリのスキャンでも、編集後にmain.tfだけをスキャンしたときにも検出されませんでした。

その理由は、設定で複数のAWSプロバイダーモジュールと変数を使用しているためです。リポジトリや単一ファイルのスキャンではファイルを静的にチェックするので、ファイルに明示的に指定されたリソースの情報しか分かりません。ファイルだけを見ても、モジュールによって作成されるリソースは特定できません。Terraformプランでは、組み込まれたモジュールや変数のロジックがすべて反映されるため、設定の全体像をより正確に把握できます。

Terraformプランをスキャンできるもうひとつの利点は、TerraformエコシステムのツールがSnyk IaCと簡単に連携できることです。Terraform Cloud、Terragrunt、Atlantisなどのツールを使っているお客様がいます。これらのツールはすべて標準のTerraformプランを出力するため、Snyk IaCでスキャンできます。こうしたエコシステムツールの例は、今後の記事で取り上げます。

インフラの機密データを保護し、パフォーマンスを向上

上記のシンプルな例でも分かるように、Terraformプランのスキャンでは、IaCの通常のライフサイクルで発生するさまざまな追加の設定ミスリスクを確認できます。ただし、この段階のスキャンでは機密データを扱うため、ネットワークの外に出したくないことを私たちは理解しています。そのため今回のリリースでは、Snyk CLIがIaCテストをローカルで実行し、Snykの認証情報とCLIメタデータ以外は送信しません。この機能を使うために特別な手順や設定は必要ありません。Snyk IaCに組み込まれており、今後Snyk CLIでIaCを利用する際のデフォルトの動作になります。

ローカルスキャンには、もうひとつ大きな利点があります。処理速度が大幅に向上します。特に、単一のTerraformリポジトリに数百、場合によっては数千のファイルがあるお客様に効果的です。当社のテストでは、大規模なディレクトリのスキャン速度が20倍向上しました。

Snyk IaCを無料で始める

今回の新機能は、無料プランをご利用の方も含め、どなたでもお試しいただけます。始め方は簡単です。

  1. Snykアカウントをまだお持ちでない場合は、無料で登録してください。

  2. Snyk CLIをインストールします。すでにインストール済みの場合は、CLIのバージョンが1.594.0以降であることを確認してください。新機能を利用できます。

  3. TerraformとKubernetesのファイルをスキャンします。

    • 新機能を使ってIaCをスキャンする基本コマンドは次のとおりです。snyk iac test <path-to-file-or-folder>

      対応しているさまざまなスキャンオプションについては、ドキュメントをご覧いただくか、CLIで次のコマンドを実行してCLIドキュメントをご確認ください。snyk iac --help

    • Terraformプランをスキャンするには、JSON形式の出力を生成する必要があります。上記の例のようにterraform showで取得できます。詳細はTerraformのドキュメントをご覧ください。

ぜひご意見をお聞かせください。Snykをご利用中のお客様は、カスタマーサクセスチームを通じて製品へのフィードバックをお寄せいただけます。また、どなたでもSnyk Communityフォーラムにコメントをお寄せください。

ソースコードの段階からインフラを保護

Snykはワークフロー内のIaCセキュリティとコンプライアンスを自動化し、構成ドリフトや不足しているリソースを検出します。

カテゴリー: