0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【簡単Terraform】【初心者向け】AWS 実践系 TerraformでAWS IAMポリシーを管理する方法

Posted at

本記事では、AWS IAM ポリシーを Terraform(HCL)で管理する実践的な方法について解説します。
手動設定(AWS コンソール)から IaC(Infrastructure as Code)へ移行したい方を対象に、
設計方針・サンプルコード・運用時の注意点までをまとめています。


🎯 対象読者

  • AWS を使い始めたが、IAM 管理が煩雑になってきた方
  • Terraform を実務で使い始めたいエンジニア
  • IAM ロール・ポリシーをコードで安全に管理したい方

🧩 なぜ Terraform で IAM を管理するのか

IAM をコンソールで管理すると、以下の課題が発生しがちです。

  • 誰が・いつ・何を変更したか分からない
  • 環境(dev / stg / prod)ごとの差分管理が困難
  • 再現性が低く、属人化しやすい

Terraform を使うことで、

  • 変更履歴を Git で管理
  • 同一構成を複数環境へ安全に展開
  • レビュー可能な IAM 設計

が可能になります。


🛠 Terraform による IAM 管理の基本構成

管理対象

  • IAM Policy
  • IAM Role
  • Policy Attachment

ディレクトリ例

iam/
 ├─ main.tf
 ├─ variables.tf
 ├─ outputs.tf

✍️ IAM ポリシーを HCL で定義する

例:S3 読み取り専用ポリシー

resource "aws_iam_policy" "s3_read_only" {
  name        = "s3-read-only-policy"
  description = "Allow read-only access to S3"

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = [
          "s3:GetObject",
          "s3:ListBucket"
        ]
        Resource = "*"
      }
    ]
  })
}

📌 ポイント

  • jsonencode を使うことで、JSON を HCL 内で安全に記述可能
  • 可読性・レビュー性が向上

👤 IAM ロールとポリシーの関連付け

resource "aws_iam_role" "example_role" {
  name = "example-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Service = "ec2.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "attach" {
  role       = aws_iam_role.example_role.name
  policy_arn = aws_iam_policy.s3_read_only.arn
}

🚨 実務での注意点

1️⃣ Managed Policy と Inline Policy の使い分け

  • 共通利用 → Managed Policy
  • 個別用途 → Inline Policy

2️⃣ ポリシー肥大化を防ぐ

  • 1 Policy = 1 責務を意識
  • 不要な * を避ける

3️⃣ terraform plan を必ずレビュー

IAM は セキュリティ直結のため、
plan の差分確認は必須です。


📦 運用を楽にするコツ

  • 環境別に Workspace / module 分離
  • IAM 用 module を作成して再利用
  • CI で terraform plan を自動実行

✅ まとめ

Terraform を使った IAM 管理は、

  • 🔒 セキュリティ向上
  • 📄 構成の可視化
  • 🔁 再現性の高い運用

を実現します。

まずは 小さな IAM ポリシーから Terraform 管理を始めてみてください。


🔗 参考リンク

  • Terraform AWS Provider IAM Docs
  • AWS IAM ベストプラクティス
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?