IAM

AWS のアクセス管理サービスで、誰が何のリソースにどのような操作を行えるかを制御する

AWSセキュリティ

IAM とは

IAM (Identity and Access Management) は、AWS のアクセス管理サービスで、「誰が (Principal)」「何のリソースに (Resource)」「どのような操作を (Action)」行えるかをポリシーで制御する。最小権限の原則に基づき、必要最小限のアクセス権のみを付与する。

主要な概念

概念 説明
ユーザー 人間のアカウント (コンソールログイン)
ロール サービスやアプリケーションが引き受ける権限
ポリシー JSON で記述されたアクセス許可のルール
グループ ユーザーをまとめてポリシーを適用

ポリシーの構造

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["dynamodb:GetItem", "dynamodb:PutItem"],
      "Resource": "arn:aws:dynamodb:ap-northeast-1:123456789012:table/users"
    }
  ]
}
フィールド 説明
Effect Allow or Deny
Action 許可する API 操作
Resource 対象リソースの ARN
Condition 条件 (IP 制限、MFA 必須など)

SAM のポリシーテンプレートで、最小権限のポリシーを簡潔に記述できる。

よくある間違い

ワイルドカードの乱用

// ❌ 全リソースに全操作を許可
{ "Effect": "Allow", "Action": "*", "Resource": "*" }

// ✅ 必要な操作と対象リソースのみ
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/*" }

アクセスキーの使用

❌ IAM ユーザーのアクセスキーを Lambda の環境変数に設定
✅ IAM ロールを Lambda に割り当て (自動的に一時的な認証情報を取得)

IAM ロール vs IAM ユーザー

観点 IAM ロール IAM ユーザー
認証情報 一時的 (STS) 永続的 (アクセスキー)
用途 サービス、CI/CD 人間のコンソールアクセス
セキュリティ 高い (自動ローテーション) 低い (キー漏洩リスク)

OIDC による外部 ID プロバイダー連携

GitHub Actions から IAM ロールを引き受ける (アクセスキー不要):

IAM の背景や設計思想は関連書籍に詳しい。

関連用語