mcpField
C
config-scan

config-scan

github.com/jwyniaセキュリティ179338 回インストール35 週間前に更新
リポジトリ

config-scan について

アプリケーション設定とIaCのセキュリティを確認するスキルです。環境ファイル、Docker、Kubernetes、Terraformなどをスキャンし、プロファイルや除外ルールも利用できます。

主な機能

  1. 01環境ファイルの秘密情報と危険な初期値を検査
  2. 02Dockerのセキュリティ設定を確認
  3. 03Kubernetesマニフェストをレビュー
  4. 04TerraformとIaCの設定ミスを検出
  5. 05スキャンプロファイルと除外ルールを適用

活用シーン

  1. 01デプロイ前の設定ファイルの確認
  2. 02DockerイメージとCompose設定の点検
  3. 03Kubernetesワークロードのリスク特定
  4. 04CI/CDへの設定チェックの追加

インストール

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

$npx skills add https://github.com/jwynia/agent-skills --skill config-scan

インストール後、Claude Code で/config-scanを入力して読み込まれたか確認します。

詳細

Config Scan

設定ファイルと Infrastructure as Code のセキュリティレビュー。

クイックスタート

/config-scan                      # Scan all config files
/config-scan --docker             # Docker files only
/config-scan --k8s                # Kubernetes manifests
/config-scan --terraform          # Terraform files
/config-scan --env                # Environment files

このスキルで検出できる項目

環境ファイル
  • .env ファイル内のシークレット
  • 安全でないデフォルト値
  • 必須のセキュリティ変数の不足
Docker セキュリティ
  • root として実行
  • 機密性の高いポートの公開
  • 安全でないベースイメージ
  • セキュリティオプションの不足
Kubernetes セキュリティ
  • 特権コンテナ
  • リソース制限の不足
  • 安全でないサービスアカウント
  • ネットワークポリシーの不備
Infrastructure as Code
  • 過度に許可範囲の広い IAM ポリシー
  • パブリック S3 バケット
  • 暗号化されていないストレージ
  • セキュリティグループの不足
アプリケーション設定
  • デバッグモードが有効
  • 詳細すぎるエラーメッセージ
  • 安全でないデフォルト設定

スキャンのカテゴリ

環境ファイル

スキャン対象ファイル:.env、.env.*、*.env

問題深刻度説明
.env 内のシークレットHIGH認証情報にはシークレットマネージャーを使用してください
.env がコミット済みCRITICAL.gitignore に追加してください
DEBUG=trueHIGH本番環境の設定でデバッグモードが有効
弱いシークレットMEDIUM短い値または単純な値

検出パターン:

# Committed .env files
git ls-files | grep -E '\.env$|\.env\.'

# Secrets in env files
(PASSWORD|SECRET|KEY|TOKEN|CREDENTIAL)=.+

# Debug flags
DEBUG=(true|1|yes)
NODE_ENV=development
Docker セキュリティ

スキャン対象ファイル:Dockerfile、docker-compose.yml

問題深刻度説明
USER rootHIGHコンテナが root として実行されます
COPY secretsCRITICALシークレットがイメージにコピーされます
latest タグMEDIUMベースイメージのバージョンが固定されていません
公開ポートLOW広範なポート公開
ヘルスチェックなしLOWヘルス監視がありません

検出パターン:

# Running as root (no USER directive)
FROM.*\n(?!.*USER)

# Copying secrets
COPY.*\.(pem|key|crt|env)
COPY.*secret
COPY.*password

# Unpinned images
FROM\s+\w+:latest
FROM\s+\w+\s*$

# Dangerous capabilities
--privileged
--cap-add

docker-compose.yml の問題:

# Privileged mode
privileged: true

# All capabilities
cap_add:
  - ALL

# Host network
network_mode: host

# Sensitive mounts
volumes:
  - /:/host
  - /var/run/docker.sock
Kubernetes セキュリティ

スキャン対象ファイル:*.yaml、*.yml(k8s マニフェスト)

問題深刻度説明
privileged: trueCRITICALホストへの完全なアクセス
runAsRootHIGHコンテナが root として実行されます
リソース制限なしMEDIUMDoS のリスク
hostNetworkHIGHPod がホストネットワークを使用
securityContext なしMEDIUMセキュリティ設定がありません

検出パターン:

# Privileged containers
securityContext:
  privileged: true

# Running as root
securityContext:
  runAsUser: 0
runAsNonRoot: false

# Host access
hostNetwork: true
hostPID: true
hostIPC: true

# Dangerous volume mounts
volumes:
  - hostPath:
      path: /

# Missing limits
# (absence of resources.limits)

# Wildcard RBAC
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]
Terraform/IaC

スキャン対象ファイル:*.tf、*.tfvars

問題深刻度説明
パブリック S3 バケットCRITICALデータが露出します
IAM ポリシー内の *HIGH過度に許可範囲が広い
暗号化なしHIGH保存データが暗号化されていません
0.0.0.0/0 ingressHIGHインターネットに公開されています
ハードコードされたシークレットCRITICALTF に認証情報があります

検出パターン:

# Public S3
acl = "public-read"
acl = "public-read-write"

# Overly permissive IAM
"Action": "*"
"Resource": "*"
"Principal": "*"

# Open security groups
cidr_blocks = ["0.0.0.0/0"]
ingress {
  from_port = 0
  to_port   = 65535

# Missing encryption
encrypted = false
# (or absence of encryption settings)

# Hardcoded secrets
password = "..."
secret_key = "..."
アプリケーション設定

スキャン対象ファイル:config/*.json、*.config.js、application.yml

問題深刻度説明
DEBUG=trueHIGH本番環境でデバッグが有効
詳細なエラーMEDIUMスタックトレースが露出します
CORS *HIGHすべてのオリジンが許可されています
HTTPS なしMEDIUM通信が暗号化されていません

検出パターン:

// Debug mode
debug: true,
DEBUG: true,
NODE_ENV: 'development'

// Verbose errors
showStackTrace: true
detailedErrors: true

// CORS
origin: '*'
origin: true
Access-Control-Allow-Origin: *

// Session security
secure: false  // cookies
httpOnly: false
sameSite: 'none'

出力形式

CONFIG SCAN RESULTS
===================

Files scanned: 23
Issues found: 15

CRITICAL (2)
------------
[!] Dockerfile:1 - Running as root
    No USER directive found
    Fix: Add "USER node" or similar non-root user

[!] terraform/s3.tf:12 - Public S3 bucket
    acl = "public-read"
    Fix: Remove public ACL, use bucket policies

HIGH (5)
--------
[H] docker-compose.yml:15 - Privileged container
    privileged: true
    Fix: Remove privileged flag, use specific capabilities

[H] k8s/deployment.yaml:34 - Missing resource limits
    No CPU/memory limits defined
    Fix: Add resources.limits section

...

MEDIUM (8)
----------
...

設定

無視ルール

.config-scan-ignore を作成します:

# Ignore specific files
files:
  - "docker-compose.dev.yml"
  - "terraform/modules/test/**"

# Ignore specific rules
rules:
  - id: "docker-root-user"
    files: ["Dockerfile.dev"]
    reason: "Development only"

  - id: "k8s-no-limits"
    reason: "Handled by LimitRange"
スキャンプロファイル
# .config-scan.yaml
profile: production  # or: development, strict

# Custom thresholds
thresholds:
  fail_on: high
  warn_on: medium

# Specific scanners
scanners:
  docker: true
  kubernetes: true
  terraform: true
  env_files: true
  app_config: true

チェック対象のベストプラクティス

Docker
  • 非 root ユーザーを指定
  • ベースイメージをダイジェストで固定
  • ビルドにシークレットを含めない
  • マルチステージビルドを使用
  • ヘルスチェックを定義
  • root ファイルシステムを読み取り専用に設定
Kubernetes
  • 非 root のセキュリティコンテキスト
  • リソース制限を定義
  • ネットワークポリシーを適用
  • 特権コンテナを使用しない
  • サービスアカウントの権限を適切に設定
  • シークレットを保存時に暗号化
Terraform
  • 状態ファイルを暗号化
  • シークレットをハードコードしない
  • IAM の最小権限
  • 暗号化を有効化
  • ロギングを有効化
  • デフォルトでパブリックアクセスを許可しない

修正例

Docker:非 root として実行
# Before
FROM node:18

# After
FROM node:18
RUN groupadd -r app && useradd -r -g app app
USER app
Kubernetes:セキュリティコンテキスト
# Before
containers:
  - name: app
    image: myapp

# After
containers:
  - name: app
    image: myapp
    securityContext:
      runAsNonRoot: true
      runAsUser: 1000
      readOnlyRootFilesystem: true
      allowPrivilegeEscalation: false
Terraform:プライベート S3
# Before
resource "aws_s3_bucket" "data" {
  acl = "public-read"
}

# After
resource "aws_s3_bucket" "data" {
  # No ACL (private by default)
}

resource "aws_s3_bucket_public_access_block" "data" {
  bucket = aws_s3_bucket.data.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

CI/CD との統合

# GitHub Actions
- name: Config Security Scan
  run: |
    /config-scan --fail-on high

- name: Docker Scan
  run: |
    /config-scan --docker --fail-on critical

関連スキル

  • /security-scan - セキュリティの包括的な分析
  • /secrets-scan - 認証情報の検出
  • /dependency-scan - パッケージの脆弱性

コメント