Overview
IaCセキュリティ(Infrastructure as Code Security)とは、Terraform、AWS CloudFormation、Pulumi、Ansibleなどのインフラストラクチャ・アズ・コード(IaC)ツールで定義されたインフラ構成コードに対して、セキュリティ上の脆弱性や設定不備を検出・防止するための取り組みです。クラウドインフラの構築がコード化される現代において、インフラの安全性はコードの品質に直結します。
IaCでは、サーバー、ネットワーク、ストレージ、IAMポリシーなどの構成がすべてコードとして管理されるため、設定ミスがそのままセキュリティホールとなります。例えば、S3バケットのパブリックアクセス許可、セキュリティグループの全ポート開放、暗号化の未設定といった問題が、コードのデプロイによって本番環境に即座に反映されてしまいます。IaCセキュリティは、こうしたリスクをデプロイ前に検出し、シフトレフトの考え方でセキュリティを開発プロセスに組み込むことを目的としています。
代表的なIaCセキュリティツールには、Checkov、tfsec、KICS、Terrascanなどがあり、CI/CDパイプラインに統合することで、コードレビューの段階でセキュリティポリシー違反を自動検出できます。これにより、クラウド環境の設定ミスによるデータ漏洩やサービス停止のリスクを大幅に低減できます。
Details
IaCにおける主要なセキュリティリスク
IaCコードに含まれる典型的なセキュリティリスクは多岐にわたります。過度に緩いIAMポリシー(例:Action: "*"、Resource: "*"のフルアクセス権限)、暗号化の未設定(EBSボリューム、RDSインスタンス、S3バケットの暗号化無効)、ネットワークの過剰公開(0.0.0.0/0からのSSHアクセス許可)、ログ出力の無効化(CloudTrailやVPCフローログの未設定)などが代表的です。
さらに深刻な問題として、シークレットのハードコーディングがあります。データベースのパスワードやAPIキーがIaCコードに直接記述され、Gitリポジトリにコミットされてしまうケースは後を絶ちません。これらの問題は、手動レビューでは見落としやすく、自動化されたスキャンツールの導入が不可欠です。
静的解析ツールとポリシー・アズ・コード
IaCの静的解析は、コードを実行せずに構文やセキュリティルールに違反する記述を検出する手法です。Checkovは700以上の組み込みポリシーを持ち、Terraform、CloudFormation、Kubernetes、Dockerfileなど多様なIaCフォーマットに対応しています。tfsecはTerraformに特化し、HCL(HashiCorp Configuration Language)の深い解析が可能です。
ポリシー・アズ・コード(Policy as Code)は、セキュリティポリシー自体をコードとして定義し、IaCの検証に適用するアプローチです。Open Policy Agent(OPA)のRego言語やHashiCorp Sentinelを用いて、組織固有のセキュリティ要件をカスタムポリシーとして記述し、CI/CDパイプラインで自動的に強制できます。
CI/CDパイプラインへの統合
IaCセキュリティの最大の効果は、CI/CDパイプラインに統合することで発揮されます。開発者がプルリクエストを作成した時点で自動的にセキュリティスキャンが実行され、ポリシー違反がある場合はマージがブロックされる仕組みを構築します。
具体的には、GitHub ActionsやGitLab CIにCheckovやtfsecのジョブを追加し、terraform planの出力に対してもスキャンを実行します。planファイルをスキャンすることで、変数やモジュールが解決された最終的なインフラ構成に対してセキュリティチェックを行えます。違反の重大度に応じて、CRITICALは即座にブロック、MEDIUMは警告のみといった段階的なポリシー適用も重要です。
ドリフト検出と継続的コンプライアンス
構成ドリフトとは、IaCコードで定義された状態と実際のクラウドリソースの状態との乖離を指します。手動でのコンソール操作やAPIによる直接変更が原因で発生し、IaCによるセキュリティ統制が無効化される深刻な問題です。
AWS Config、Azure Policy、GCP Security Command Centerなどのクラウドネイティブサービスに加え、DriftctlやCloudQueryなどのOSSツールを用いて、定期的にドリフトを検出し、IaCコードとの同期を維持することが重要です。検出されたドリフトは自動的にアラートを発行し、IaCコードへの反映またはリソースの修正を促すワークフローを確立すべきです。
モジュール化とセキュアなテンプレート
組織全体でIaCセキュリティを強化するためには、セキュアなモジュール(テンプレート)を標準化して提供することが効果的です。例えば、暗号化やログが有効化されたS3バケットモジュール、最小権限のIAMロールモジュール、WAFが統合されたALBモジュールなどを社内レジストリで管理します。
開発チームはこれらの承認済みモジュールを使用することで、セキュリティのベストプラクティスを自然に適用でき、個々の開発者がセキュリティの専門知識を持たなくてもセキュアなインフラを構築できます。モジュールのバージョン管理と定期的なセキュリティレビューも欠かせません。
Security Measures
- 01CI/CDパイプラインにIaCスキャンツールを統合:Checkov、tfsec、KICSなどの静的解析ツールをCI/CDパイプラインに組み込み、プルリクエスト時に自動でセキュリティスキャンを実行してください。CRITICAL・HIGH重大度の違反はマージをブロックする設定にすることで、脆弱な構成の本番デプロイを防止できます。
- 02シークレット管理の徹底:IaCコードにパスワード、APIキー、トークンなどのシークレットを直接記述せず、AWS Secrets Manager、HashiCorp Vault、Azure Key Vaultなどのシークレット管理サービスを利用してください。git-secretsやtruffleHogによるコミット前スキャンも併用しましょう。
- 03最小権限の原則をIAMポリシーに適用:IaCで定義するIAMロールやポリシーには、必要最小限のアクション・リソースのみを許可してください。ワイルドカード(*)の使用を禁止するカスタムポリシーを作成し、自動的に検出・ブロックする仕組みを構築しましょう。
- 04構成ドリフトの定期検出と是正:DriftctlやAWS Configなどを使用して、IaCコードと実際のクラウドリソースの状態を定期的に比較し、乖離を検出してください。手動変更を禁止するSCPポリシーの適用や、ドリフト検出時の自動通知・是正フローの整備が重要です。
- 05承認済みモジュールの標準化と使用強制:セキュリティのベストプラクティスが組み込まれた社内標準モジュールを作成し、Terraformのプライベートレジストリ等で管理してください。セキュリティチームがモジュールを定期的にレビューし、全チームに使用を推奨・強制する体制を整えましょう。
- 06terraform planの出力に対するセキュリティレビュー:HCLコードだけでなく、terraform planで生成される実行計画に対してもセキュリティスキャンを実施してください。変数やモジュールの参照が解決された最終的な構成を検証することで、動的に生成される設定の脆弱性も検出できます。
Incidents
📋 Capital One S3バケット設定不備による大規模情報漏洩(2019年)
2019年、Capital Oneで約1億600万人の顧客データが漏洩する大規模インシデントが発生しました。原因の一つとして、CloudFormationテンプレートでWAFの設定が過度に緩く構成されており、SSRF攻撃を通じてEC2インスタンスのIAMロール認証情報が窃取されました。
IAMロールに付与されていた過剰な権限により、攻撃者はS3バケット内の機密データにアクセスできました。この事件は、IaCにおけるIAMポリシーの最小権限設定と、WAF構成のセキュリティレビューの重要性を世界中に認識させました。
📋 Terraform State Fileの公開による認証情報漏洩(2022年)
2022年、複数の企業でTerraformのステートファイル(terraform.tfstate)がパブリックアクセス可能なS3バケットに保存されていたことが発見されました。ステートファイルにはデータベースのパスワード、APIキー、プライベートIPアドレスなどの機密情報が平文で記録されています。
セキュリティ研究者の調査により、数百のステートファイルがインターネット上で公開されていることが判明しました。これらのファイルから抽出された認証情報を使用して、本番データベースや内部APIへの不正アクセスが可能な状態でした。ステートファイルの暗号化とアクセス制御の重要性を示す事例です。
📋 IaCテンプレートへのバックドア混入(2023年)
2023年、人気のあるTerraformモジュールレジストリに公開されていた複数のコミュニティモジュールに、悪意のあるIAMポリシーが密かに追加されていたことが発見されました。これらのモジュールは正当な機能を提供しつつ、攻撃者のAWSアカウントにクロスアカウントアクセスを許可するAssumeRoleポリシーを含んでいました。
影響を受けた企業では、攻撃者が外部から内部のAWSリソースにアクセスし、データの窃取や暗号通貨マイニング用のEC2インスタンスの起動が行われていました。サプライチェーン攻撃としてのIaCモジュールの危険性と、サードパーティモジュールのセキュリティ監査の必要性を浮き彫りにしました。