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

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

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.