DevSecOps

IaC Security

IaCセキュリティ(Infrastructure as Code)

Category: DevSecOps / Updated: 2026-05-26

📖

Overview

IaCセキュリティ(Infrastructure as Code Security)とは、Terraform、AWS CloudFormation、Ansible、Pulumiなどのインフラストラクチャ・アズ・コード(IaC)ツールで定義されたインフラ構成に対して、セキュリティ上の設定ミスや脆弱性を検出・防止するための取り組みです。クラウドインフラの設定ミスは情報漏洩の主要な原因の一つであり、IaCの段階でセキュリティチェックを行うことで、デプロイ前に問題を検出できます。

IaCセキュリティの中核となるのがPolicy-as-Code(ポリシー・アズ・コード)の概念です。OPA(Open Policy Agent)HashiCorp Sentinelなどのポリシーエンジンを使用して、セキュリティポリシーをコードとして定義し、IaCテンプレートの適用前に自動的にポリシー準拠を検証します。これにより、「S3バケットのパブリックアクセスを禁止する」「暗号化されていないストレージの作成を拒否する」といったルールを体系的に適用できます。

代表的なIaCスキャンツールには、Checkovtfsec(現在はTrivy IaCに統合)、KICSTerrascanなどがあります。これらのツールはTerraform HCL、CloudFormation YAML/JSON、Kubernetes YAML、Dockerfile、Ansibleプレイブックなど、多様なIaCフォーマットに対応しており、業界標準のベストプラクティスやCIS Benchmarkに基づいたルールセットを提供しています。

🔬

Details

Terraform/CloudFormationのセキュリティスキャン

TerraformはHashiCorpが開発したIaCツールで、HCL(HashiCorp Configuration Language)を使用してクラウドインフラを宣言的に定義します。Terraformテンプレートに含まれる典型的なセキュリティリスクには、セキュリティグループの過度に広いインバウンドルール(0.0.0.0/0)、暗号化が無効なストレージ、パブリックアクセス可能なデータベース、ログ記録が無効なリソースなどがあります。

Checkovは、Bridgecrewが開発したオープンソースのIaCスキャンツールで、1,000以上の組み込みルールを備えています。Terraform planファイル(JSON形式)を解析することで、変数の展開やモジュールの参照を含む実際のリソース構成を正確にスキャンできます。tfsec(Trivy IaC)はAqua Securityが開発したツールで、Terraformに特化した高速なスキャンを提供し、HCLファイルの静的解析を行います。

Policy-as-Code(OPA/Sentinel)

OPA(Open Policy Agent)はCNCFが管理するオープンソースの汎用ポリシーエンジンです。Rego言語でポリシーを記述し、IaCテンプレート、Kubernetesリソース、APIリクエストなど、多様な入力に対してポリシー評価を行えます。Terraform + OPAの組み合わせでは、Conftestツールを使用してTerraform planの出力をOPAポリシーで検証するのが一般的です。

HashiCorp Sentinelは、Terraform Cloud/EnterpriseにBネイティブに統合されたポリシーエンジンです。Sentinel言語でポリシーを記述し、Advisory(警告)Soft Mandatory(上書き可能な必須)Hard Mandatory(絶対必須)の3つのレベルでポリシーを適用できます。terraform applyの実行前にポリシーチェックが自動的に実行され、違反があればデプロイがブロックされます。

ドリフト検出と構成の一貫性

ドリフト(Drift)とは、IaCで定義された状態と実際のインフラの状態との間に生じる不一致のことです。運用担当者がコンソールから手動で変更を加えたり、別のプロセスが設定を変更したりすることで、IaCの定義と実際のリソース構成が乖離します。セキュリティの観点では、ドリフトによってIaCで定義したセキュリティ設定が上書きされ、意図しないセキュリティホールが生じる危険性があります。

terraform planコマンドは基本的なドリフト検出機能を提供しますが、専用のドリフト検出ツール(driftctlAWS ConfigSpaceliftなど)を使用することで、より包括的かつ継続的な監視が可能です。ドリフトが検出された場合は、IaCの定義を更新するか(意図的な変更の場合)、IaCの状態に戻す(不正な変更の場合)かを判断し、一貫した状態を維持することが重要です。

シークレットのIaCテンプレートへの混入防止

IaCテンプレートにAPIキー、パスワード、証明書などのシークレットがハードコードされるケースは、最も一般的かつ深刻なIaCセキュリティリスクの一つです。Terraformのtfstateファイルにはリソースのすべての属性がプレーンテキストで記録されるため、データベースパスワードなどのシークレットが含まれている場合、stateファイルの管理が不適切であれば漏洩のリスクがあります。

対策として、git-secretstruffleHogdetect-secretsなどのシークレット検出ツールをpre-commitフックやCIパイプラインに統合し、シークレットの含まれたコードのコミットを防止します。シークレットはHashiCorp VaultAWS Secrets Managerで管理し、IaCテンプレートからは参照(data source)として取得する設計が推奨されます。

IaCセキュリティのCI/CD統合

IaCセキュリティスキャンを効果的に運用するには、開発ワークフローの適切なタイミングに統合することが重要です。開発段階ではIDEプラグイン(VS Code拡張など)で即時フィードバックを提供し、コミット前ではpre-commitフックでシークレット検出とフォーマットチェックを実行します。

プルリクエスト段階ではCheckov、tfsec等のスキャンをCIジョブとして実行し、セキュリティ違反があればマージをブロックします。デプロイ前ではOPA/SentinelによるPolicy-as-Codeチェックを行い、組織のセキュリティポリシーへの準拠を最終確認します。このように多層的にチェックポイントを設けることで、セキュリティリスクの見逃しを最小化できます。

🛡️

Security Measures

  • 01
    IaCスキャンツールのCI/CDパイプライン統合:Checkov、tfsec(Trivy IaC)、KICSなどのスキャンツールをプルリクエスト時に自動実行し、セキュリティ違反が検出された場合はマージをブロックしてください。CIS BenchmarkやAWS/Azure/GCPのセキュリティベストプラクティスに基づいたルールセットを適用しましょう。
  • 02
    Policy-as-Codeによるガードレールの設定:OPA(Conftest)やHashiCorp Sentinelを導入し、組織のセキュリティポリシーをコードとして定義してください。「パブリックアクセス禁止」「暗号化必須」「ログ記録有効化」などのポリシーを宣言的に定義し、IaCの適用前に自動検証しましょう。
  • 03
    シークレットのハードコード防止:git-secrets、truffleHog、detect-secretsなどのツールをpre-commitフックに統合し、IaCテンプレートへのシークレット混入を防止してください。シークレットはVaultやSecrets Managerで管理し、IaCからはデータソースとして参照する設計にしましょう。
  • 04
    ドリフト検出と継続的な構成監視:driftctl、AWS Config、Spaceliftなどのツールを使用して、IaC定義と実際のインフラ状態の差異を継続的に監視してください。不正なドリフトが検出された場合は即座にアラートを発し、IaCの状態に戻すか、IaC定義を更新してください。
  • 05
    Terraform stateファイルの安全な管理:Terraform stateファイルにはシークレットを含むリソース属性がプレーンテキストで記録されるため、リモートバックエンド(S3 + DynamoDB、Terraform Cloud等)に保管し、暗号化とアクセス制御を適用してください。stateファイルをGitリポジトリにコミットすることは絶対に避けましょう。
  • 06
    モジュールの信頼性検証とバージョン固定:Terraformモジュールは信頼できるソース(Terraform Registry公式モジュール、組織内部レジストリ)からのみ利用し、バージョンを明示的に固定してください。サードパーティモジュールのコードレビューを実施し、悪意のあるコードやバックドアが含まれていないことを確認しましょう。
⚠️

Incidents

📋 Capital One S3バケット設定ミスによる大規模情報漏洩(2019年)

2019年、米大手金融機関Capital Oneにおいて、AWS上のWebアプリケーションファイアウォール(WAF)の設定ミスを悪用され、約1億600万人の個人情報が漏洩する事件が発生しました。SSRFによりEC2のメタデータサービスからIAMロールの一時認証情報を取得し、S3バケットへのアクセスを獲得しています。

この事件の根本原因の一つは、CloudFormationテンプレートで定義されたIAMロールに過度に広い権限が付与されていたことです。IaCスキャンツールで最小権限の原則への準拠をチェックしていれば、過剰な権限設定を事前に検出できた可能性があります。この事件以降、IaCにおけるセキュリティ設定の自動チェックの重要性が広く認識されるようになりました。

📋 Terraformモジュールのサプライチェーン攻撃リスク(2022年〜)

Terraform Registryに公開されているサードパーティモジュールの中に、悪意のあるコードを含む可能性のあるモジュールが存在するリスクが指摘されています。攻撃者が正規のモジュール名に類似した名前のモジュール(タイポスクワッティング)を公開し、開発者が誤ってインストールすることで、インフラ構成に悪意のある設定が注入される可能性があります。

具体的なリスクとして、モジュールのプロビジョナー(local-exec)を悪用した任意コマンドの実行、バックドアとなるIAMユーザーやセキュリティグループルールの追加、認証情報の外部送信などが考えられます。対策として、モジュールのソースコードレビュー、バージョンの固定、プライベートレジストリの利用が推奨されています。

📋 公開GitリポジトリからのTerraform stateファイル漏洩

複数の組織において、Terraform stateファイルが誤ってパブリックGitリポジトリにコミットされ、データベースパスワード、APIキー、クラウド認証情報などのシークレットが漏洩する事例が繰り返し報告されています。stateファイルにはリソースのすべての属性がプレーンテキストで記録されるため、一度でもコミットされると、Gitの履歴から完全に削除することは困難です。

セキュリティ研究者の調査では、GitHubの公開リポジトリから数千件のTerraform stateファイルが発見され、その多くにAWSアクセスキーやデータベース接続文字列が含まれていたと報告されています。対策として、.gitignoreへのstateファイルの追加、リモートバックエンドの使用、pre-commitフックによるstateファイルのコミット防止が不可欠です。

🔗

Related Terms