mcpField
I
implementing-infrastructure-as-code-security-scanning

implementing-infrastructure-as-code-security-scanning

github.com/mukul975セキュリティ35.2k67 回インストール8 週間前に更新
リポジトリ

implementing-infrastructure-as-code-security-scanning について

インフラチーム向けのIaCセキュリティスキャン導入スキルです。Checkovなどで設定を検査し、ポリシーを作成してCI/CDに組み込む方法を説明します。

主な機能

  1. 01TerraformとCloudFormationのスキャン
  2. 02KubernetesマニフェストとHelmチャートの検査
  3. 03カスタムセキュリティポリシーの作成
  4. 04ベースラインと抑制項目の設定
  5. 05CI/CDでのスキャン実行

活用シーン

  1. 01デプロイ前のクラウド設定ミスの発見
  2. 02プルリクエストでの危険な変更の防止
  3. 03組織標準に沿った検査の作成
  4. 04マルチクラウドIaCへの一貫した検査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill implementing-infrastructure-as-code-security-scanning

インストール後、Claude Code で/implementing-infrastructure-as-code-security-scanningを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

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

使用する場面

  • Terraform、CloudFormation、Pulumi でクラウドインフラストラクチャをプロビジョニングし、自動セキュリティ検証が必要な場合
  • コンプライアンスフレームワークにより、デプロイ前にインフラストラクチャ構成をレビューした証跡が必要な場合
  • パブリックな S3 バケット、開放されたセキュリティグループ、暗号化されていないストレージなど、一般的なクラウドの設定ミスを防ぐ場合
  • プルリクエストで安全でないインフラストラクチャの変更をブロックするガードレールを設定する場合
  • AWS、Azure、GCP 全体で一貫したセキュリティポリシーが必要なマルチクラウド環境を管理する場合

使用しないでください。アプリケーションのソースコードをスキャンする場合(SAST を使用)、デプロイ済みインフラストラクチャのドリフトを監視する場合(クラウドセキュリティ態勢管理ツールを使用)、またはコンテナイメージの脆弱性をスキャンする場合(Trivy を使用)。

前提条件

  • Checkov v3.x(pip install checkov)または tfsec がインストールされていること
  • リポジトリに Terraform、CloudFormation、または Kubernetes の IaC ファイルがあること
  • IaC ディレクトリにアクセスできる CI/CD パイプラインがあること
  • Bridgecrew API キー(任意。Checkov プラットフォームとの統合に使用)

ワークフロー

ステップ 1:Terraform ファイルに対して Checkov を実行する
# Scan all Terraform files in a directory
checkov -d ./terraform/ --framework terraform --output cli --output json --output-file-path ./results

# Scan specific file
checkov -f main.tf --output json

# Scan Terraform plan (more accurate for dynamic values)
terraform init && terraform plan -out=tfplan
terraform show -json tfplan > tfplan.json
checkov -f tfplan.json --framework terraform_plan

# Scan with specific checks only
checkov -d ./terraform/ --check CKV_AWS_18,CKV_AWS_19,CKV_AWS_20

# Skip specific checks
checkov -d ./terraform/ --skip-check CKV_AWS_145,CKV2_AWS_6
ステップ 2:GitHub Actions に IaC スキャンを統合する
# .github/workflows/iac-security.yml
name: IaC Security Scan

on:
  pull_request:
    paths:
      - 'terraform/**'
      - 'cloudformation/**'
      - 'k8s/**'

jobs:
  checkov:
    name: Checkov IaC Scan
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Checkov
        uses: bridgecrewio/checkov-action@v12
        with:
          directory: terraform/
          framework: terraform
          output_format: cli,sarif
          output_file_path: console,checkov.sarif
          soft_fail: false
          skip_check: CKV_AWS_145

      - name: Upload SARIF
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: checkov.sarif
          category: checkov-iac

  tfsec:
    name: tfsec Scan
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run tfsec
        uses: aquasecurity/[email protected]
        with:
          working_directory: terraform/
          sarif_file: tfsec.sarif
          soft_fail: false

      - name: Upload SARIF
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: tfsec.sarif
          category: tfsec
ステップ 3:カスタム Checkov ポリシーを作成する
# custom_checks/s3_versioning.py
from checkov.terraform.checks.resource.base_resource_check import BaseResourceCheck
from checkov.common.models.enums import CheckResult, CheckCategories


class S3BucketVersioning(BaseResourceCheck):
    def __init__(self):
        name = "Ensure S3 bucket has versioning enabled"
        id = "CKV_CUSTOM_1"
        supported_resources = ["aws_s3_bucket"]
        categories = [CheckCategories.GENERAL_SECURITY]
        super().__init__(name=name, id=id, categories=categories,
                         supported_resources=supported_resources)

    def scan_resource_conf(self, conf):
        versioning = conf.get("versioning", [{}])
        if isinstance(versioning, list) and len(versioning) > 0:
            if versioning[0].get("enabled", [False])[0]:
                return CheckResult.PASSED
        return CheckResult.FAILED


check = S3BucketVersioning()
ステップ 4:ベースラインと抑制を設定する
# .checkov.yaml
branch: main
compact: true
directory:
  - terraform/
  - cloudformation/
framework:
  - terraform
  - cloudformation
  - kubernetes
output:
  - cli
  - sarif
skip-check:
  - CKV_AWS_145    # S3 default encryption with CMK (using SSE-S3 is acceptable)
  - CKV2_AWS_6     # S3 bucket request logging (handled at CloudTrail level)
soft-fail: false
ステップ 5:Kubernetes マニフェストと Helm チャートをスキャンする
# Scan Kubernetes manifests
checkov -d ./k8s/ --framework kubernetes

# Scan Helm charts (renders templates first)
checkov -d ./charts/myapp/ --framework helm

# Scan with KICS (Keeping Infrastructure as Code Secure)
docker run -v $(pwd)/k8s:/path checkmarx/kics:latest scan \
  --path /path \
  --output-path /path/results \
  --type Kubernetes \
  --report-formats json,sarif

主な概念

用語定義
IaC スキャンデプロイ前にセキュリティ設定の誤りを検出するため、インフラストラクチャコードのテンプレートを自動分析すること
ポリシーをコードとして管理バージョン管理、テスト、自動適用が可能な実行可能コードとして定義されたセキュリティポリシー
CKV チェック ID各セキュリティチェックに対する Checkov 固有の識別子(例:S3 のパブリックアクセスを対象とする CKV_AWS_18)
Terraform Plan スキャン計算済みの値やモジュールの展開を含む、解決済みの Terraform plan JSON をスキャンすること
グラフベースのスキャン個々のリソース設定だけでなく、リソース間の関係も分析する Checkov の機能
ドリフト検出IaC の定義と、実際にデプロイされたインフラストラクチャの状態との差異を特定すること
カスタムポリシー内部標準を適用するために Python または YAML で作成する、組織固有のセキュリティチェック

ツールとシステム

  • Checkov:主要なクラウドプロバイダーを対象とする 2500 以上の組み込みポリシーを備えた、Bridgecrew のオープンソース IaC スキャナー
  • tfsec:HCL を深く理解する、Aqua Security の Terraform に特化した静的解析ツール
  • KICS:15 以上の IaC フレームワークをサポートする、Checkmarx のオープンソース IaC スキャナー
  • Terrascan:カスタムポリシーの作成に OPA Rego ポリシーをサポートする IaC スキャナー
  • Snyk IaC:Snyk プラットフォームと統合された商用 IaC スキャナー

よくあるシナリオ

シナリオ:Terraform でパブリックな S3 バケットを防ぐ

背景:開発チームが適切なアクセス制御を設定せずに S3 バケットを繰り返し作成しています。最近、パブリックなバケットを通じて顧客データが露出するインシデントが発生しました。

アプローチ:

  1. すべての Terraform の変更を対象に、CI/CD パイプラインで Checkov を有効にする
  2. CKV_AWS_18(パブリック読み取り ACL を禁止)、CKV_AWS_19(暗号化)、CKV_AWS_20(パブリックアクセスブロックの無効化を禁止)を適用する
  3. すべての S3 バケットに aws_s3_bucket_public_access_block リソースを必須とするカスタムポリシーを作成する
  4. S3 セキュリティチェックに失敗した場合に PR のマージをブロックするため、soft_fail: false を設定する
  5. チームが再利用できる、安全なデフォルト設定を備えた Terraform モジュールを提供する

注意点:.tf ファイルのみをスキャンすると、動的に計算される値を見落とします。精度を高めるには、Terraform plan スキャンを使用してください。Checkov のリソース関係チェック(CKV2 プレフィックス)には、グラフ分析モードが必要です。

出力形式

IaC Security Scan Report
==========================
Framework: Terraform
Directory: terraform/
Scan Date: 2026-02-23

Checkov Results:
  Passed: 187
  Failed: 12
  Skipped: 3
  Unknown: 0

FAILED CHECKS:
  CKV_AWS_18  [HIGH]   S3 Bucket has public read ACL
              Resource: aws_s3_bucket.data_lake
              File:     terraform/storage.tf:15-28

  CKV_AWS_24  [HIGH]   CloudWatch log group not encrypted
              Resource: aws_cloudwatch_log_group.app
              File:     terraform/monitoring.tf:3-8

  CKV_AWS_79  [MEDIUM] Instance metadata service v1 enabled
              Resource: aws_instance.web
              File:     terraform/compute.tf:12-30

QUALITY GATE: FAILED (2 HIGH severity findings)

コメント