0Pricing
Cloud & IT Cert Prep · レッスン

Infrastructure as Codeのセキュリティスキャン

IaCセキュリティツール(Checkov、tfsec)でTerraform、CloudFormation、Helmチャートをスキャンし、本番環境に到達する前に設定ミスを検出します。

「Infrastructure as Codeのセキュリティスキャン」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

Infrastructure as Code セキュリティの概要

Infrastructure as Code(IaC)ツールであるTerraform、AWS CloudFormation、Ansible、Helmを使うと、バージョン管理された設定ファイルでインフラストラクチャを定義できます。これにより、再現性、監査可能性、自動化という大きなメリットが得られますが、重大なセキュリティリスクも生じます。つまり、IaC ファイルの設定ミスによって、大規模に安全でないインフラストラクチャが構築される可能性があります。1 つの Terraform モジュールの設定を誤ったまま 50 の環境にデプロイすると、50 個の脆弱なシステムが同時に作られます。IaC セキュリティスキャンは、設定ファイルが適用される前にチェックを行うことでこの問題に対処し、開発者のワークフローにセキュリティ対策を早期に組み込みます。

IaC でよくある設定ミス

セキュリティスキャンツールは、実際のクラウド環境でよく見られる IaC の設定ミスを検出します。たとえば、パブリックアクセスが有効になっている、または保管時の暗号化が設定されていないS3 バケット、機密性の高いポート(22、3389、1433)に対する 0.0.0.0/0 のインバウンドルールを持つセキュリティグループ、暗号化されていない、またはパブリックアクセスが可能なデータベース、リソースまたはアクションに * のワイルドカードを使用するIAM ポリシー、リージョンで無効化されたCloudTrail、キーのローテーションが設定されていないKMS キー、HTTPS ではなく HTTP リスナーを使用するロードバランサーなどです。これらの検出項目は、CIS AWS Foundations などのクラウドセキュリティベンチマークで実施されるチェックとよく似ています。

# Dangerous Terraform: public S3 bucket + no encryption
resource 'aws_s3_bucket' 'data' {
  bucket = 'my-data-bucket'
  # Missing: server_side_encryption_configuration
  # Missing: aws_s3_bucket_public_access_block
}

Checkov:IaCのポリシー・アズ・コード

Checkov(Bridgecrew/Prisma Cloud提供)は、Terraform、CloudFormation、Kubernetesマニフェスト、Helmチャート、Dockerfileをサポートする、IaC向けの人気のオープンソース静的解析ツールです。CISベンチマーク、GDPR、SOC 2、HIPAAに対応した1,000件を超える組み込みポリシーが付属しています。checkov -d .を実行すると、カレントディレクトリ内のすべてのIaCファイルをスキャンし、合格、失敗、スキップしたチェックを、リソースパスと修正方法の案内付きで色分けしてレポートします。CheckovはCI/CDパイプラインに統合でき、重要なチェックに失敗した場合にデプロイをブロックできます。

# Install and run Checkov on Terraform files
pip install checkov
checkov -d ./terraform/ --framework terraform

# Fail CI pipeline on HIGH severity findings
checkov -d ./terraform/ --check HIGH --hard-fail-on HIGH

tfsec:Terraformセキュリティスキャナー

tfsec(現在はTrivyのIaCスキャン機能の一部)は、Terraform専用に設計されたセキュリティスキャナーです。HCL構文を深く理解しているため、モジュールや変数ファイルをまたいで値を追跡できます。単純なスキャナーとは異なり、tfsecは複数のファイルにまたがる問題も検出できます。たとえば、単独では安全に見えるセキュリティグループルールが、別のファイルにあるリソースへ関連付けられている場合などです。tfsecは、深刻度(CRITICAL、HIGH、MEDIUM、LOW)、CWE ID、修正方法のドキュメントへの直接リンクを含む検出結果を生成するため、開発者が具体的な対応を行えます。

# Install tfsec and scan Terraform directory
brew install tfsec
tfsec ./terraform/ --format json

# Or use Trivy for unified IaC + container scanning
trivy config ./terraform/

IaCファイル内のシークレット

IaCにおける最も重大なセキュリティ問題の一つが、設定ファイルにハードコードされたシークレットです。これには、パスワード、APIキー、TLS秘密鍵、データベース接続文字列などが含まれ、Gitにコミットされます。IaCリポジトリはチーム間で共有され、バージョン管理の履歴に保存されることが多いため、シークレットは一度でもコミットすると、事実上永久に漏えいした状態になります(Gitの履歴は変更できません)。Checkov、detect-secrets、git-secrets、TruffleHogなどのツールは、シークレットのパターンをスキャンします。対策としては、ハードコードした値を使わず、環境変数やシークレットストアから参照する入力変数を使用します。

# Bad: hardcoded password in Terraform
resource 'aws_db_instance' 'main' {
  password = 'supersecret123'  # NEVER DO THIS
}

# Good: read from variable, inject from secrets manager
variable 'db_password' { sensitive = true }
resource 'aws_db_instance' 'main' {
  password = var.db_password
}

ポリシー・アズ・コード:OPAとSentinel

Policy as Code(PaC)フレームワークを使うと、セキュリティチームはカスタムルールをコードとして記述し、一貫して適用できます。Conftestと組み合わせたOpen Policy Agent(OPA)では、CI/CDパイプラインでTerraformのプラン、Kubernetesマニフェスト、Helmの値など、あらゆる構造化データを検証するRegoポリシーを記述できます。HashiCorp SentinelはTerraform EnterpriseおよびCloudに組み込まれており、「すべてのS3バケットで暗号化を有効にすること」のようなポリシーをプラン時に適用し、ポリシーに違反するapplyをブロックできます。これらのツールにより、セキュリティ要件をコード化し、管理対象のインフラストラクチャとともにバージョン管理できます。

# Example Conftest OPA policy: deny public S3
# deny[msg] {
#   input.resource.aws_s3_bucket[name]
#   input.resource.aws_s3_bucket_public_access_block == null
#   msg := sprintf('Bucket %v lacks public access block', [name])
# }

ドリフト検出:設定と実際の状態

設定ドリフトとは、デプロイ済みインフラストラクチャの実際の状態がIaCの定義から乖離することです。多くの場合、誰かがクラウドコンソールから手動で変更したことが原因です。開発者の作業を「一時的に」可能にするため手動で追加したセキュリティグループルールが、恒久的なセキュリティ上の欠陥になることがあります。ドリフト検出ツールは、期待される状態(IaCファイル)と実際にデプロイされた状態を継続的に比較し、差異があれば警告します。AWS Config、Terraform Cloudのドリフト検出、CSPMツール(Prisma Cloud、Wiz)は、いずれもこの機能を提供します。コンソールでの変更によって生じたセキュリティ設定ミスを、攻撃者に発見される前に検出できます。

# Terraform: detect drift between state and actual cloud resources
terraform plan -refresh-only
# If output shows changes, someone modified infrastructure outside Terraform

イミュータブルインフラストラクチャとGitOps

イミュータブルインフラストラクチャとは、サーバーや設定をその場で変更せず、変更時には新しいリソース(新しいAMIや新しいコンテナイメージ)を作成して古いものと置き換える方式です。これをGitOps(すべてのインフラストラクチャ変更をGitのプルリクエスト経由で行い、IaCスキャンと承認ワークフローを実行する仕組み)と組み合わせると、設計上、設定ドリフトをなくせます。手動で変更できないものは、ドリフトすることもないためです。Kubernetes向けのArgoCDやTerraform向けのAtlantisなどのツールは、差異が発生すると自動的な調整またはアラートを行うGitOpsワークフローを実装します。

SASTとIaCスキャンの違い

IaCセキュリティスキャンはSAST(静的アプリケーションセキュリティテスト)と混同されることがありますが、対象とするアーティファクトは異なります。SASTはアプリケーションのソースコード(Python、Java、JavaScript)を解析し、SQLインジェクションやバッファオーバーフローなどの脆弱性を検出します。一方、IaCスキャンはインフラストラクチャの設定ファイルを解析し、クラウドのセキュリティ設定ミスを検出します。アプリケーションコードは対象になりません。完全なDevSecOpsパイプラインには、アプリケーションコードに対するSASTとインフラストラクチャファイルに対するIaCスキャンの両方が含まれます。どちらもデプロイ前にCI/CDで実行されます。Snyk IaCやPrisma Cloudなど、一部の統合プラットフォームでは、アプリケーションとインフラストラクチャのスキャンを一つのツールにまとめています。

IaCスキャンのCI/CDへの統合

効果的なIaCセキュリティスキャンは、自動化して強制する必要があり、任意であってはなりません。一般的なCI/CD統合では、すべてのプルリクエストでCheckovとtfsecを実行し、CRITICALの検出結果がある場合はパイプラインを失敗させ、開発者が確認できるよう検出結果をプルリクエストのコメントとして投稿し、正当な理由を記録した抑制済み検出結果の一覧を管理し、さらにデプロイ済みリソースに対して夜間スキャンを実行してドリフトを検出します。Checkovとpre-commitなどのツールを使ったコミット前フックを導入すれば、コードがパイプラインに到達する前に問題を検出できます。誤検知の管理も重要です。関係のない検出結果が多すぎると、開発者はそれらを無視するようになるためです。

# GitHub Actions: IaC security scanning
# - name: Run Checkov IaC Scan
#   uses: bridgecrewio/checkov-action@master
#   with:
#     directory: terraform/
#     framework: terraform
#     soft_fail: false  # fail PR on findings
#     output_format: sarif  # upload to GitHub Security tab

Terraformステートのセキュリティ

Terraformのステートファイル(terraform.tfstate)には、管理対象であるすべてのリソースの完全なインベントリが含まれます。多くの場合、データベースのパスワード、TLS秘密鍵、IAMアクセスキーIDなどの機密性の高い出力値も平文で含まれています。ステートファイルをGitにコミットしてはいけません。代わりに、サーバー側の暗号化を有効にしたリモートバックエンド(DynamoDBロックを使用するAWS S3、Terraform Cloud、またはGitLab管理のステート)を使用してください。ステートバックエンドへのアクセスはIAMで厳格に制御する必要があります。ステートファイルを読み取れる人は、すべてのインフラストラクチャの詳細を列挙でき、埋め込まれたシークレットを抽出できる可能性があるためです。

# Secure Terraform remote backend
terraform {
  backend 's3' {
    bucket         = 'my-terraform-state'
    key            = 'prod/terraform.tfstate'
    region         = 'us-east-1'
    encrypt        = true
    kms_key_id     = 'arn:aws:kms:us-east-1:123:key/abc'
    dynamodb_table = 'terraform-state-lock'
  }
}

クイックチェック

このレッスンで扱ったCompTIA Security+(SY0-701)の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、IaCの設定ミス(パブリックなS3バケット、公開されたセキュリティグループ、ハードコードされたシークレットなど)が、デプロイ前にCheckovやtfsecなどのツールで自動検出されること、Policy as Codeフレームワーク(OPA/Conftest、HashiCorp Sentinel)によって組織独自のセキュリティ要件を自動化されたパイプラインゲートとして適用できること、そしてTerraformのステートファイルは機密性の高いリソース情報を含む可能性があるため、厳格なアクセス制御を施した暗号化済みのリモートバックエンドに保存する必要があることを学びました。次は、APTのライフサイクルと、高度な脅威がネットワーク内に侵入し続ける仕組みについて学びます。

よくある質問

「Infrastructure as Codeのセキュリティスキャン」レッスンは無料ですか?

はい。「Infrastructure as Codeのセキュリティスキャン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「Infrastructure as Codeのセキュリティスキャン」で何を学びますか?

IaCセキュリティツール(Checkov、tfsec)でTerraform、CloudFormation、Helmチャートをスキャンし、本番環境に到達する前に設定ミスを検出します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Infrastructure as Codeのセキュリティスキャン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. コンテナセキュリティ:イメージの堅牢化とランタイム保護
  2. Kubernetesセキュリティ:RBAC、ネットワークポリシー、Podセキュリティ
  3. サーバーレスと関数のセキュリティ
  4. Infrastructure as Codeのセキュリティスキャン
← Cloud & IT Cert Prepに戻る