マルチサービスアプリケーションロールのIAMポリシー
S3、DynamoDB、SQS、Secrets Manager、CloudWatch Logsにアクセスする典型的なサーバーレスアプリケーション向けの包括的なIAMポリシーを作成します。
Advanced Patterns
詳細な説明
マルチサービスアプリケーションロール
実際のアプリケーションが1つのAWSサービスだけを必要とすることはまれです。典型的なサーバーレスバックエンドはDynamoDBへの読み書き、S3へのファイルアップロード、SQSへのメッセージ送信、シークレットの読み取り、ログの書き込みを行うかもしれません。このポリシーは複数のサービス権限を単一のロールポリシーに統合します。
ポリシーJSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccess",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Query"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/users",
"arn:aws:dynamodb:us-east-1:123456789012:table/users/index/*"
]
},
{
"Sid": "S3ObjectAccess",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::myapp-uploads/*"
},
{
"Sid": "SQSSendMessages",
"Effect": "Allow",
"Action": ["sqs:SendMessage", "sqs:GetQueueUrl"],
"Resource": "arn:aws:sqs:us-east-1:123456789012:myapp-processing-queue"
},
{
"Sid": "SecretsRead",
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/*"
},
{
"Sid": "CloudWatchLogs",
"Effect": "Allow",
"Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
"Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/myapp-*:*"
}
]
}
設計原則
- サービスごとに1つのSid — どのサービスにアクセスしているかを監査しやすくします。
- 特定のリソースARN — AWSが必要とする場合を除き
"*"ワイルドカードなし。 - 最小限のアクション — アプリケーションが実際に使用する操作のみ。
- 管理アクションなし — インフラ自体の
Create、Delete、Describeなし。
ユースケース
サーバーレスバックエンド(Lambda + API Gateway)、コンテナ化されたマイクロサービス(ECS/EKS)、単一の実行コンテキストで複数のAWSサービスと対話するアプリケーション。