LambdaでX-Rayを使おうとしたらAWSLambdaTracerAccessExecuteRoleポリシーを追加しろと怒られたが、そんなポリシーないぞという話
小ネタです。LambdaでX-Rayを使おうとして少し躓いた点を共有します。
ハマったこと
- 作成したLambda関数が思ったとおりに動作しなかったので、トラブルシューティングのためX-Rayを使ってみようと思いました。Lambda関数のコンソール下部の方にあるX-Ray欄の「アクティブトレース」チェックボックスにチェックを入れて「保存」します。
-
すると保存が完了せず、代わりにエラーメッセージが表示されました。
ロールに AWSLambdaTracerAccessExecutionRole ポリシーを追加する際にエラーが発生しました。IAM コンソールにアクセスし、必要な権限を手動で追加してください。
- なるほど、Lambda関数にアタッチしているIAMロールにこの
AWSLambdaTracerAccessExecutionRole
というポリシーを追加すればよいのね、OKOK…IAMのコンソールに移動して、ロールにポリシーをアタッチするぞ。 - あれ、ポリシーヒットしないぞ?AWS管理ポリシーであるんじゃないの?
というわけで、Lambda関数でX-Rayを利用するときに必要なIAMの権限は何かというお話です。
結論: AWSXrayWriteOnlyAccess
、もしくは2種のPut許可を付与したポリシーを使いましょう
前述のLambda関数コンソールのX-Ray欄の「情報」をクリックすれば答えが書いてありました。
クリックすると画面右にヘルプが表示されます。
X-Ray にデータを送信するには、関数に実行ロールでトレースデータ (xray:PutTraceSegments) およびテレメトリ (xray:PutTelemetryRecords) をアップロードするアクセス許可が必要です。アクティブトレースを有効にすると、Lambda コンソールは実行ロールにこれらのアクセス許可を追加しようとします。ロールを管理するアクセス許可がない場合は、管理者に実行ロールの更新を依頼してください。
というわけで、最低限xray:PutTraceSegments
とxray:PutTelemetryRecords
があれば動作するようです。また、これらを含んでいる最小権限のAWS管理ポリシーはAWSXrayWriteOnlyAccess
なので、こちらを使っても良いでしょう。
ドキュメントにも記載あり
Your function needs permission to upload trace data to X-Ray. When you enable active tracing in the Lambda console, Lambda adds the required permissions to your function's execution role. Otherwise, add the AWSXrayWriteOnlyAccess policy to the execution role.