セキュリティチェックスキル
このスキルを使用して、Terraformコード内のセキュリティ設定ミス/ベストプラクティス逸脱を特定します。
実行手順
Step 1: 入力の確認
何を材料にレビューするかを明示します:
- •git diff(Terraform 配下)
- •terraform plan (JSON)(存在する場合)
Step 2: セキュリティ観点のチェック
| 観点 | チェック内容 |
|---|---|
| 公開範囲 | Security Group / ALB / RDS / S3 / CloudFront が意図せず public になっていないか |
| 暗号化 | EBS / RDS / S3 / Secrets 等の暗号化が有効か |
| ログ/監査 | ALB access log、CloudTrail / Config 等が設計上必要なら有効か |
| 最小権限 | IAM policy がワイルドカード過多(*)になっていないか |
| ネットワーク分離 | DB が public subnet に出ていないか、NACL / Route が意図通りか |
| 秘密情報 | TFVars / コードにパスワード等が平文で入っていないか |
レポート出力フォーマット
markdown
## 🔒 セキュリティチェック結果
### 🔴 重大(即時対応必須)
- **対象**: `ファイル名` (リソース名)
- **問題**: 具体的なリスク
- **修正案**:
```hcl
# 修正後のコード
```
### 🟡 中(対応推奨)
- ...
### 🟢 軽微(改善提案)
- ...
### ✅ 問題なし
確認済み項目のサマリー
代表的なセキュリティ問題と修正例
1. S3 パブリックアクセス
hcl
# ❌ 問題: パブリックアクセス可能
resource "aws_s3_bucket" "bad" {
bucket = "my-bucket"
}
# ✅ 修正: パブリックアクセスブロック
resource "aws_s3_bucket_public_access_block" "good" {
bucket = aws_s3_bucket.main.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
2. Security Group 0.0.0.0/0
hcl
# ❌ 問題: 全世界に SSH 開放
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# ✅ 修正: 特定 IP に限定
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["203.0.113.0/24"] # 社内 IP のみ
}
3. RDS パブリックアクセス
hcl
# ❌ 問題 publicly_accessible = true # ✅ 修正 publicly_accessible = false
4. IAM ワイルドカード
hcl
# ❌ 問題: 過剰な権限
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
# ✅ 修正: 最小権限
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}
注意事項
- •このスキルは「レビューの観点」を提供するドキュメントです
- •結果は推論ベースなので、網羅性・厳密性が必要な場合は Checkov 等のスキャナ導入を検討してください