38
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アイレット株式会社Advent Calendar 2024

Day 9

Snyk IaCコマンドを使用してTerraformのIaC環境を管理してみた

Last updated at Posted at 2024-12-08

はじめに

昨今、IaC(Infrastructure_as_code)にてインフラストラクチャをコードにして管理することが多くなってきたと思います。
その際に直面する問題をSnykで解決しようというのが今回の記事です。

どんなことを解決したいか

IaC化したクラウドプラットフォームにおいて、リソース変更権限が付与されている開発者が設定変更した内容がIaCに落とし込めていないと
コード管理されていない作業IaC管理されているリソースの設定の間で差分が発生してしまいます。
その変更履歴を管理する運用ができていないと、サーバ運用保守者がIaC再デプロイする際に手動の設定変更が消去されてしまうため、 IaCデプロイ前に差分を確認する手段を探していました。

image.png

Snykとは

ソフトウェア開発プロジェクトでのカスタムコード、オープンソースソフトウェア、コンテナ、IaCの脆弱性をリアルタイムで検知するセキュリティソリューションです。
Snykの脆弱性データベースはAWSにおいても採用されており、Amazon InspectorのテクノロジーもSnykを利用しています。
以下の4機能から構成されます。

  • 脆弱性の検出

    • アプリケーションの依存ライブラリやコンテナイメージ内に含まれるセキュリティ脆弱性をスキャンし検出します。
  • 自動修正

    • 検出した脆弱性を解決するためにパッチ適用や安全なバージョンへのアップデートを提案し場合によっては自動修正を実行します。
  • ライセンスリスクの管理

    • アプリケーションで使用されるオープンソースライブラリのライセンスに関連するリスクをチェックします。
  • CI/CDパイプラインとの統合

    • CI/CDツールに統合し、開発プロセス内でセキュリティチェックを自動化します。
  • コードのセキュリティ

    • 自社のコードベースのセキュリティ上の問題点(コード脆弱性や悪用可能なコード)を分析します。

Snyk CLIコマンドとは

開発中のソフトウェアの脆弱性を自動的に検出し、修正するためのコマンドラインツールです。
今回はSnyk IaCを利用します。

  • Snyk Open Source

    • オープンソースの脆弱性を検出し、自動的に修正します。
  • Snyk Code

    • アプリケーション コードの脆弱性をリアルタイムで検出して修正します。
  • Snyk Container

    • コンテナイメージとKubernetesアプリケーションの脆弱性を見つけて修正します。
  • Snyk IaC

    • Terraform および Kubernetes コード内の安全でない構成を検出して修正します。

今回使用するSnyk IaC describeコマンドとは

IaC管理されていないインフラストラクチャ リソースを検出します。
Terraform 状態ファイル内のリソースとクラウド プロバイダー内の実際のリソースを比較しレポートを出力します。
Terraformのtfstate内のリソースとクラウドプロバイダーの実際のリソースを比較して検出します。

  • Terraform 状態ファイル内のリソースは管理対象リソース
  • 存在するが Terraform 状態ファイルに含まれていないリソースは管理されていないリソース

◆現在指定できるプロバイダー

  • aws
  • github
  • google
  • azure

やってみた

前提条件

  • SnykCLIコマンドのインストールはSnyk社の記事を参考にします。

  • AWSプロバイダーで必要な認証をします。

snyk iac describeコマンド実行

<前提>
tfstateファイルにはVPCの構成情報があります。

<実行例>

  • AWSアカウント全体のアンマネージドリソースを検出
teru1:work teru$ snyk iac describe --to="aws+tf" --from="tfstate://terraform.tfstate"
Scanned states (1)
Scan duration: 1m54s
Provider version used to scan: . Use --tf-provider-version to use another version.
Snyk Scanning Infrastructure As Code Discrepancies...

  Info:    Resources under IaC, but different to terraform states.
  Resolve: Reapply IaC resources or update into terraform.

Unmanaged resources: 755

Service: Unidentified [ Unmanaged Resources: 590 ]

  Resource Type: aws_appautoscaling_policy
    ID: ***
~~~~

  Managed Resources: 1
  Unmanaged Resources: 755

  IaC Coverage: 0%
  • AWS VPCのみのリソース選択し、tfstateファイルはs3にあるものを使用可能
teru1:work teru$ snyk iac describe --filter="Type=='aws_vpc'"
Using Terraform state tfstate+s3://terraform-cloudshell-demo/snyk_iac/terraform.tfstate found in main.tf. Use the --from flag to specify another state file.


Unmanaged resources: 74
Service: aws_vpc [ Unmanaged Resources: 74 ]
  Resource Type: aws_vpc
    ID: vpc-***
    ID: vpc-***
    ID: vpc-***
~~~~

Service: aws_vpc [ Unmanaged Resources: 74 ]
  Managed Resources: 1
  Unmanaged Resources: 74

  IaC Coverage: 1%
  Info: To reach full coverage, remove resources or move it to Terraform.

他にも便利なオプションもあります。

  • json出力のオプションを付与
teru1:work teru$ snyk iac describe --filter="Type=='aws_vpc'" --json > 20241122scan.json
	"summary": {
		"total_resources": 75,
		"total_unmanaged": 74,
		"total_missing": 0,
		"total_managed": 1,
		"total_iac_source_count": 1
	},
	"managed": [
		{
			"id": "vpc-***",
			"type": "aws_vpc",
			"source": {
				"source": "tfstate+s3://terraform-cloudshell-demo/snyk_iac/terraform.tfstate",
				"namespace": "",
				"internal_name": "vpc"
			}
		}
	],
	"unmanaged": [
		{
			"id": "vpc-***",
			"type": "aws_vpc"
  • html出力
teru1:work teru$ snyk iac describe --filter="Type=='aws_vpc'" --from="tfstate://terraform.tfstate" --html-file-output=snyk.html 
Scanned states (1)
Scan duration: 1m49s
Provider version used to scan: . Use --tf-provider-version to use another version.

image.png

最後に

便利なオプションもあり、レポートにも活用できそうですね
次はCI/CDに組み込んでterrfrom plan実行時にsnyk iac describeコマンドを実施して差分がないか事前に確認する方法もやってみたいと考えています。
他にもsnykではCI/CDにインテグレーションし脆弱性の検出を可能にするので、やってみたいです。

38
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?