hoicil-spot-tf の規約を分析し、専用のピース・ファセットを作成。 plan → implement → 3並列レビュー → fix → COMPLETE のワークフロー。 カテゴリに「インフラストラクチャ」を追加。
89 lines
2.9 KiB
Markdown
89 lines
2.9 KiB
Markdown
# 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 等)に代替案の検討なし | 警告 |
|