SaaS型プロダクトをAWSで構築するにあたり、アカウント作成直後のIAM(Identity and Access Management)設計はセキュリティ・スケーラビリティ・自動化の基盤となります。本記事では、IAM設計のベストプラクティスと対応するAWS CLIコマンドを実務目線で解説します。
✅ ステップ 1:ルートユーザーの保護(GUI操作)
- MFA有効化(仮想MFA推奨)
- アクセスキーの削除(セキュリティ強化)
- ルートユーザーの運用禁止(緊急時専用)
※ これらはマネジメントコンソールでのみ実施可能。
✅ ステップ 2:IAM管理ユーザーの作成
手順
iam-admin
ユーザー作成AdministratorAccess
ポリシー付与- コンソールログイン用パスワード設定
- MFA設定(GUIまたは仮想MFA手順)
CLIコマンド
aws iam create-user --user-name iam-admin
aws iam attach-user-policy \
--user-name iam-admin \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam create-login-profile \
--user-name iam-admin \
--password 'StrongPa$$word123' \
--password-reset-required
✅ ステップ 3:IAMグループとロール設計
手順
- グループ例:Admins, Developers, ReadOnly
- ロール例:LambdaExecutionRole, CI/CD用Role
CLIコマンド
# グループ作成とポリシー付与
aws iam create-group --group-name Developers
aws iam attach-group-policy \
--group-name Developers \
--policy-arn arn:aws:iam::aws:policy/PowerUserAccess
# グループにユーザー追加
aws iam add-user-to-group \
--user-name iam-admin \
--group-name Developers
# Lambda実行ロール
cat <<EOF > lambda-assume-role.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "lambda.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}
EOF
aws iam create-role \
--role-name LambdaExecutionRole \
--assume-role-policy-document file://lambda-assume-role.json
aws iam attach-role-policy \
--role-name LambdaExecutionRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
✅ ステップ 4:最小権限のIAMポリシー
手順
- S3などのサービスに対して限定的なアクセスを付与
CLIコマンド
cat <<EOF > read-s3-specific.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::your-bucket-name/*"]
}
]
}
EOF
aws iam create-policy \
--policy-name ReadS3SpecificBucket \
--policy-document file://read-s3-specific.json
aws iam attach-user-policy \
--user-name iam-admin \
--policy-arn arn:aws:iam::aws:policy/ReadS3SpecificBucket
✅ ステップ 5:監査・可視化の設定
CLIコマンド
# CloudTrailの作成
aws cloudtrail create-trail \
--name OrganizationTrail \
--s3-bucket-name your-logging-bucket \
--is-multi-region-trail
aws cloudtrail start-logging --name OrganizationTrail
# IAM Access Analyzer
aws accessanalyzer create-analyzer \
--analyzer-name iam-analyzer \
--type ACCOUNT
✅ ステップ 6:定期的なIAM監査
CLIコマンド例
# IAMユーザー情報の取得
aws iam get-user --user-name iam-admin
# ロール一覧
aws iam list-roles
⚡️ まとめ
IAM設計は「最初に整える」ことで、後々の自動化・セキュリティ監査・組織拡張が容易になります。ご希望に応じて、Terraform/CDK版のコード化テンプレートもご提供可能です。
ご質問・追加リクエストがあれば、コメント欄またはお問い合わせフォームよりお気軽にどうぞ。
コメント