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 の背景や設計思想は関連書籍に詳しい。