infra-security-review について
infra-security-reviewは、IaCコードのセキュリティレビュー向けチェックリストと検索パターンを提供し、インフラのセキュリティ担当者を対象とします。状態ストレージ、シークレット、ネットワーク、コンピュート、データベース、ストレージのリスクを深刻度別に扱い、レポートテンプレートも備えています。
主な機能
- 01状態バックエンド設定のリスク確認
- 02ハードコードされたシークレットや認証情報の検出
- 03ネットワークとコンピュートのセキュリティ設定のレビュー
- 04データベースとストレージの公開リスク確認
- 05深刻度ガイドとレポートテンプレート
活用シーン
- 01IaCの状態ストレージセキュリティをレビュー
- 02コード内の認証情報の露出を検出
- 03インフラのネットワークアクセス設定を確認
- 04レビュー結果と修正案を記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ majesticlabs-dev/ majestic-marketplace --skill infra-security-reviewインストール後、Claude Code で/infra-security-reviewを入力して読み込まれたか確認します。
詳細
インフラストラクチャセキュリティレビューのパターン
IaC コードをレビューするためのセキュリティチェックリストと grep パターンです。インフラストラクチャのセキュリティを検証する際に、これらのパターンを使用してください。
セキュリティチェックリスト
State バックエンドのセキュリティ
| チェック項目 | 重大度 | パターン |
|---|---|---|
| 暗号化されていない S3 バケット | Critical | encrypt = false または未設定 |
| State のロック設定がない | High | DynamoDB テーブルが設定されていない |
| パブリックバケットポリシー | Critical | block_public_* がすべて true ではない |
| バージョニングが設定されていない | Medium | versioning が有効になっていない |
シークレットの露出
| チェック項目 | 重大度 | パターン |
|---|---|---|
| AWS キーのハードコード | Critical | AKIA[0-9A-Z]{16} |
| パスワードのハードコード | Critical | password\s*=\s*"[^"]+[^}]" |
| コード内のデータベース認証情報 | Critical | パスワードを含む DATABASE_URL |
| 変数内の API キー | High | デフォルト値の api_key、secret_key |
ネットワークセキュリティ
| チェック項目 | 重大度 | パターン |
|---|---|---|
| SSH が全世界に公開されている | Critical | ポート 22 での 0.0.0.0/0 |
| データベースにパブリックアクセスできる | Critical | private_network_uuid が未設定 |
| CIDR 範囲が広すぎる | Medium | パブリックリソースでの /8、/16 |
| ファイアウォールが設定されていない | High | ファイアウォールリソースのない Droplet |
コンピュートセキュリティ
| チェック項目 | 重大度 | パターン |
|---|---|---|
| root ログインが有効になっている | High | cloud-init 内の PermitRootLogin yes |
| パスワード認証が有効になっている | Medium | PasswordAuthentication yes |
| SSH の強化設定がない | Low | ClientAliveInterval の設定がない |
| 監視が設定されていない | Low | monitoring = false |
データベースセキュリティ
| チェック項目 | 重大度 | パターン |
|---|---|---|
| データベースへのパブリックアクセス | Critical | データベースのファイアウォールルールがない |
| VPC に接続されていない | High | private_network_uuid が未設定 |
| 古いバージョン | Medium | 古いデータベースエンジンのバージョン |
| 本番環境が単一ノード | Low | 本番環境での node_count = 1 |
ストレージセキュリティ
| チェック項目 | 重大度 | パターン |
|---|---|---|
| S3 バケットがパブリック | Critical | acl = "public-read" |
| 暗号化が設定されていない | High | SSE の設定がない |
| アクセスログがない | Medium | アクセスログバケットが未設定 |
Grep パターン
# Hardcoded secrets
grep -rE 'AKIA[0-9A-Z]{16}' *.tf
grep -rE 'password\s*=\s*"[^$\{][^"]*"' *.tf
grep -rE 'secret.*=\s*"[^$\{][^"]*"' *.tf
grep -rE 'api_key\s*=\s*"' *.tf
# Network exposure
grep -rE '0\.0\.0\.0/0.*22' *.tf
grep -rE 'cidr_blocks.*0\.0\.0\.0/0' *.tf
grep -rE 'publicly_accessible\s*=\s*true' *.tf
# State security
grep -rE 'encrypt\s*=\s*false' *.tf
grep -rE 'block_public_acls\s*=\s*false' *.tf
# Cloud-init issues
grep -rE 'PermitRootLogin\s+yes' *.tf *.yaml
grep -rE 'PasswordAuthentication\s+yes' *.tf *.yaml
レポートテンプレート
# Infrastructure Security Review
**Repository:** [name]
**Date:** [date]
**Files Reviewed:** [count]
## Summary
| Severity | Count |
|----------|-------|
| Critical | X |
| High | X |
| Medium | X |
| Low | X |
## Findings
### [SEVERITY-001] Title
**File:** `path/to/file.tf:line`
**Resource:** `resource_type.name`
**Issue:**
Description of the security issue.
**Current:**
```hcl
[current code]
修正方法:
[fixed code]
コンプライアンスに関する注意事項
- State の暗号化が有効(SOC 2)
- 認証情報がハードコードされていない(PCI-DSS)
- ネットワークがセグメント化されている(HIPAA)
- アクセスログが有効(すべてのフレームワーク)
## Severity Guide
| Severity | Definition | Action |
|----------|------------|--------|
| Critical | Direct security exposure, data breach risk | Block deployment |
| High | Significant risk, exploitable weakness | Fix before production |
| Medium | Best practice violation, indirect risk | Fix within 30 days |
| Low | Minor hardening opportunity | Address when convenient |
コメント
Markdown 対応