nrslib 1cd063680c feat: Terraform/AWS ピースとファセット一式を追加
hoicil-spot-tf の規約を分析し、専用のピース・ファセットを作成。
plan → implement → 3並列レビュー → fix → COMPLETE のワークフロー。
カテゴリに「インフラストラクチャ」を追加。
2026-02-25 23:50:52 +09:00

89 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Terraform ポリシー
安全性と保守性を最優先し、一貫した規約に従うインフラコードを書く。
## 原則
| 原則 | 基準 |
|------|------|
| Security by Default | セキュリティはデフォルトで厳格。緩和は明示的かつ理由付き |
| Fail Fast | 必須値にデフォルトを入れない。不足は即エラー |
| 命名一貫性 | `name_prefix` パターンで全リソースを統一命名 |
| 最小権限 | IAM は必要最小限のアクション・リソースに絞る |
| コスト意識 | トレードオフはコメントで文書化 |
| DRY | `locals` で共通値を計算。重複排除 |
| 1ファイル1関心事 | リソースカテゴリごとにファイル分割 |
## 変数宣言
| 基準 | 判定 |
|------|------|
| `type` なし | REJECT |
| `description` なし | REJECT |
| 機密値に `sensitive = true` なし | REJECT |
| 環境依存値にデフォルト設定 | REJECT |
| 定数的な値(ポート番号等)にデフォルト設定 | OK |
```hcl
# REJECT - type/description なし
variable "region" {}
# REJECT - 機密値に sensitive なし
variable "db_password" {
type = string
}
# OK - 定数的な値にデフォルト
variable "container_port" {
type = number
description = "Container port for the application"
default = 8080
}
```
## セキュリティ
| 基準 | 判定 |
|------|------|
| EC2 で IMDSv2 未強制(`http_tokens != "required"` | REJECT |
| EBS/RDS 暗号化なし | REJECT |
| S3 パブリックアクセスブロックなし | REJECT |
| セキュリティグループで `0.0.0.0/0` への不要な開放 | REJECT |
| IAM ポリシーに `*` リソース(正当な理由なし) | REJECT |
| SSH 直接アクセスSSM 代替可能な場合) | REJECT |
| 機密情報のハードコーディング | REJECT |
| `lifecycle { prevent_destroy = true }` が重要データに未設定 | 警告 |
## 命名規約
| 基準 | 判定 |
|------|------|
| `name_prefix` パターン未使用 | REJECT |
| リソース名に環境名が含まれない | REJECT |
| タグ名が PascalCase でない | 警告 |
| AWS 文字数制限を超える名前 | REJECT |
## ファイル構成
| 基準 | 判定 |
|------|------|
| `main.tf` にリソース定義が混在 | REJECT |
| `variables.tf` にリソースが定義されている | REJECT |
| 1ファイルに複数カテゴリのリソースが混在 | 警告 |
| 未使用の variable / output / data source | REJECT |
## タグ管理
| 基準 | 判定 |
|------|------|
| provider `default_tags` 未設定 | REJECT |
| `default_tags` と個別リソースでタグが重複 | 警告 |
| `ManagedBy = "Terraform"` タグなし | 警告 |
## コスト管理
| 基準 | 判定 |
|------|------|
| コスト影響のある選択にコメントなし | 警告 |
| 高コストリソースNAT Gateway 等)に代替案の検討なし | 警告 |