インフラストラクチャー・アズ・コード (IaC) セキュリティ
TL;DR: インフラストラクチャー・アズ・コード (IaC) セキュリティ
インフラストラクチャー・アズ・コード (IaC) セキュリティは、Terraform、CloudFormation、Kubernetes YAML などの特定の言語で書かれた構成ファイルやスクリプトをデプロイ前にスキャンすることで、クラウドインフラストラクチャーを保護するプロセスです。
このプロセスは以下の点で役立ちます。
- 不必要なポートの誤って開放や過剰なユーザーアクセスの付与などの誤設定を早期に発見します。
- CI/CD パイプラインでコードとしてセキュリティポリシーを強制します。
- スクリプト上の不安全な構成によるクラウド侵害、データ漏洩、コンプライアンス問題のリスクを軽減します。
IaC セキュリティの目標は、クラウドインフラストラクチャーの構築方法が安全であることを確認することです。
インフラストラクチャー・アズ・コード (IaC) セキュリティとは
インフラストラクチャー・アズ・コード (IaC) セキュリティは、Terraform、AWS CloudFormation、Pulumi、または Kubernetes YAML ファイルなどの特定のコードを使用して定義および管理されるクラウドインフラストラクチャーを保護するプロセスです。
サーバー、ネットワーク、クラウドリソースを手動でターミナルやウェブインターフェースを使用して構成する代わりに、チームはすべての構成をコードで記述します。IaC セキュリティは、クラウドインフラストラクチャーを構築するコードが安全であり、デプロイ前に誤設定、脆弱性、過剰な権限を導入しないことを確認します。
簡単に言えば :
IaC セキュリティは「クラウドがどのように構成され、構築されているか」をチェックし、不安全なインフラストラクチャーを本番環境に出荷しないようにします。
なぜ IaC セキュリティが重要なのか
インフラストラクチャをコードで管理すると、インフラストラクチャのセットアップが加速します。しかしその反面、脆弱なインフラストラクチャを本番環境にデプロイする可能性もあります。
では、なぜIaCセキュリティが重要なのでしょうか。
設定ミスはクラウド侵害の主な原因です。
例:公開S3バケット、オープンなデータベース、インターネット上に機密データをさらす広範なセキュリティグループ
コードの1行のミスが多数のリソースに影響を与える可能性があります。
例えば、Terraformモジュールがアクセスに対して0.0.0.0/0(全てに公開)を設定すると、それを使用するすべての環境が露出します。
IaCはソフトウェアサプライチェーンの一部です。
IaCがソフトウェアサプライチェーンの一部であるため、攻撃者はパイプラインに侵入してバックドアや設定ミスを注入し、インフラストラクチャを危険にさらす可能性があります。
コンプライアンスは正しい設定に依存します。
SOC 2、ISO 27001、PCI DSSなどのフレームワークは、安全な設定、アクセス制御、ログに依存しています。不安全なIaCはコンプライアンスを破る可能性があります。
IaCセキュリティの仕組み
IaCセキュリティは、インフラストラクチャがデプロイされる前に脆弱性を検出します。
1. IaCファイルの設定ミスをスキャン
ツールはTerraform、CloudFormation、またはKubernetesマニフェストを分析して、以下のようなリスクのある設定を見つけます。
- 公開S3バケット
- 公開されているデータベース
- 0.0.0.0/0(公開)で設定されたセキュリティグループ
- rootとして実行されるコンテナ
- 暗号化されていないストレージやログ
目標:クラウドに到達する前にセキュリティ問題を検出すること
2. コードとしてセキュリティポリシーを強制
セキュリティルールはポリシーとして記述されます。例えば:
- 公開されているAmazon RDS(リレーショナルデータベースサービス)データベースは許可されません
- すべてのS3バケットは暗号化を使用しなければなりません。
- Kubernetesポッドは特権コンテナを実行できません。
これらのポリシーはCI/CDパイプラインで自動的に強制されます。
目標 : セキュリティルールを開発ワークフローの一部にし、後回しにしないこと。
3. CI/CDパイプラインとの統合
IaCセキュリティツールはCI/CDに統合され、リスクのある変更を自動的にブロックまたは警告します。
典型的な流れ :
- 開発者がインフラストラクチャコードをコミットします。
- CI/CDパイプラインがIaCセキュリティスキャンを実行します。
- 重大な問題(例:公開データベース)が見つかった場合、ビルドは失敗します。
- 開発者はデプロイ前に問題を修正します。
目標 : 左にシフトし、デプロイ前に問題を早期に発見すること
4. クラウドセキュリティポスチャーへのマッピング
IaCセキュリティはCSPM(クラウドセキュリティポスチャーマネジメント)とよく組み合わせられます。
- CSPMはクラウドで実際に稼働しているものをチェックし、例えばデータベースがインターネットに公開されていないか、ストレージバケットが暗号化されているかなどを確認します。
- IaCセキュリティはデプロイされる予定のものをチェックします。
これらを組み合わせることで、設計と実行時のインフラストラクチャの完全な可視性を提供します。
一般的なIaCセキュリティリスク
IaCセキュリティが検出できる問題の例:
- 公開されているストレージ(例:公開読み書き可能なS3バケット)
- 暗号化されていないデータベース、ボリューム、ログ
- 過度に許可されたIAMロール
- 開いているセキュリティグループ(SSH/RDP用の0.0.0.0/0)。
- 特権アクセスで実行されているKubernetesポッド。
- TerraformやYAMLファイルにハードコードされた秘密情報。
実践例
チームはTerraformを使用してAWSインフラストラクチャを管理しています。
IaCセキュリティスキャンが以下をフラグします:
- 公共アクセスが有効になっているRDSデータベース
- 暗号化されておらず、公共読み取りアクセスがあるS3バケット
この不安全な構成をAWSにデプロイする代わりに、パイプラインはビルドを失敗させます。
その後、開発者は以下を行う必要があります:
- アクセスを制限するためにセキュリティグループを更新
- S3バケットで暗号化を有効にし、公共アクセスをブロック
結果: 誤った構成は本番環境に到達する前に修正され、データ露出のリスクが減少します。
IaCセキュリティを使用する人々
- DevOps - IaCテンプレートの作成と維持
- クラウドセキュリティエンジニア - ポリシーの定義と構成のレビュー
- AppSec / DevSecOpsチーム - パイプラインにIaCを統合
- セキュリティ&コンプライアンスチーム - 監査とガバナンスのためのレポートを使用
IaCセキュリティを適用するタイミング
IaCセキュリティはライフサイクルに沿って適用されるべきです:
- 開発中 - プリコミットフックとIDEプラグイン
- CI/CDビルド中 - 自動スキャンがリスクのある変更をブロック
- デプロイ前 - 本番環境のポリシーチェック
- 継続的に - 新しいルールや脅威が現れたときにテンプレートを再スキャン
IaCセキュリティツールの主要機能
ほとんどのIaCセキュリティソリューションは以下を提供します:
- コードとしてのポリシー: セキュリティルールを定義し、バージョン管理する
- IaCの静的解析: Terraform、CloudFormation、Kubernetesの設定などをスキャン
- CI/CD統合: Github Actions、GitLab CI、Jenkinsなど
- 誤設定検出: 安全でない設定を特定
- ドリフト検出(CSPMと共に): IaC設定とライブクラウドの間の違いを検出
- 報告とコンプライアンスマッピング: 問題をコントロールや規制にマッピング
例: Checkov、Tfsec、Terrascan、またはアプリ/クラウドの姿勢の一部としてIaCをスキャンする際の高度なプラットフォームPlexicus ASPM
IaCセキュリティのベストプラクティス
- シフトレフト: IaCを早期にスキャンして、セキュリティ問題が本番に到達する前にキャッチする
- ハードコードされた秘密(APIキー、トークンなど)を避ける
- 最小特権を強制する
- 一貫した施行を自動化するためにコードとしてのポリシーを使用する
- アーキテクチャの変更に伴い、ポリシーを定期的にレビューし更新する
関連用語
FAQ: コードとしてのインフラストラクチャ(IaC)セキュリティ
1. コードとしてのインフラストラクチャ(IaC)セキュリティとは何ですか?
IaCセキュリティは、インフラストラクチャ構成ファイル(Terraform、CloudFormation、Kubernetes YAMLなど)をスキャンしてセキュリティを確保し、クラウドにデプロイされる前に誤設定やリスクを見つける実践です。
2. なぜIaCセキュリティが重要なのか?
1つの不安全なテンプレートが、一度に数百の脆弱なリソースをデプロイする可能性があるためです(例えば、公開S3バケットやオープンなセキュリティグループ)。コード内で問題を修正することは、より安価で迅速であり、それらが本番環境に到達するのを防ぎます。
3. IaCセキュリティはどのように機能するのか?
IaCセキュリティツールは、リポジトリやCI/CDパイプライン内の構成ファイルをスキャンし、以下のようなリスクのある設定を探します。
- 公開されているストレージ
- 開いているポート(SSH/RDPでの0.0.0.0/0)
- 暗号化が無効
- 過度に許可されたIAMロール
問題を検出した場合、それをフラグし、ビルドを失敗させる(設定されている場合)、または修正提案を含むチケットを開きます。
4. IaCセキュリティとCSPMの違いは何か?
- IaCセキュリティは、デプロイされようとしているもの(コード)をチェックします。
- CSPMは、すでにクラウドで稼働しているものをチェックします。
IaCセキュリティは予防的であり、CSPMは検出的/修正的です。両方を使用することで、エンドツーエンドのカバレッジが得られます。
5. IaCセキュリティはいつ適用すべきか?
開発ライフサイクルの早い段階で適用すべきです。
- 開発者のマシン上(プリコミットフック)
- プルリクエスト(PRチェック)
- CI/CDパイプライン(ビルドおよびデプロイ段階)
問題を早期に発見するほど、修正にかかるコストは少なくなります。