LambdaでX-Rayを使おうとしたらAWSLambdaTracerAccessExecuteRoleポリシーを追加しろと怒られたが、そんなポリシーないぞという話

Lambda関数でX-Rayを使おうとしたところ、AWSLambdaTracerAccessExecuteRoleポリシーを追加しろとのエラーが表示されました。がそのようなIAMポリシーが見つかりませんでした。ということでLambda関数でX-Rayを利用する際に必要な権限について調べました。
2020.01.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

小ネタです。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:PutTraceSegmentsxray: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.