T1-Q05: LambdaログがCloudWatch Logsに無いならS3権限ではなく実行ロールを見る
Lambdaの実行ログが見つからない問題を、実行ロール、CloudWatch Logs、S3保存先の責務境界で切り分ける。
AWS SCS-C03 Lambda CloudWatch Logs IAM
対象誤答: T1 Q05 LAMBDA CLOUDWATCH LOGS ROLE
あなたの選択と正答
| 観点 | 内容 |
|---|---|
| あなたの選択 | Lambda 関数の実行ロールに、CloudWatch Logs のログが格納される Amazon S3 バケットへの書き込み権限が付与されていなかった。 |
| 正答 | Lambda 関数の実行ロールに、CloudWatch Logs にログを書き込む権限が付与されていなかった。 |
| 誤答の引力 | CloudWatch Logsの保管先をS3だと思い込んでいる。Lambda標準ログはCloudWatch Logsのロググループ/ログストリームへ送られる。 |
| 判断軸 | Lambdaがログを書けないなら、実行ロールのlogs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEventsを見る。S3はCloudTrailログ配信やエクスポートの文脈。 |
この問題の芯
T1-Q05 は「Lambda が誤用されてデータが変更された。誰が実行し、どんな出力が出たかを調べたい。しかし CloudWatch Logs に Lambda のログがない」という問題。あなたは CloudWatch Logs がS3バケットに格納される前提の選択肢を選んだ。正答は Lambda 実行ロールに CloudWatch Logs 書き込み権限がないこと。
まず責務を分ける
Lambda の標準出力と標準エラーは、通常 CloudWatch Logs のロググループに送られる。必要なのは Lambda 実行ロール側の CloudWatch Logs 権限。
| 見たいもの | 主役 |
|---|---|
| 関数内の出力、例外、print/log | CloudWatch Logs |
| 誰がInvokeFunction APIを呼んだか | CloudTrail |
| CloudTrailログファイルの長期保管 | S3 |
| ログを検索、メトリクス化、アラーム化 | CloudWatch Logs / CloudWatch |
何が足りないとログが出ないか
Lambda が CloudWatch Logs に書くには、実行ロールに少なくとも次の系統の権限が必要。
{
"Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
"Effect": "Allow",
"Resource": "*"
}
この問題では「CloudWatch Logs にログが見つからない理由」を問われている。S3バケット権限は、Lambda標準ログの直接の書き込み先ではない。
次回の秒殺ルール
Lambdaログが出ない問題は、まず AWSLambdaBasicExecutionRole 相当のCloudWatch Logs権限を見る。
「誰がAPIを呼んだか」はCloudTrail。「関数が何を出力したか」はCloudWatch Logs。この2つを混ぜない。
仕上げの一問一答
- この問題の主語は何か: Lambda
- 先に除外する選択肢: 問題文の主語と違うサービス責務に寄っているもの。
- 最後に確認する語: 「最もコスト効率」「組織全体」「未指定を拒否」「監査」「自動有効化」などの制約語。