Lambda 実行ロール - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Lambda 実行ロール

Lambda 関数の実行ロールは、AWS サービスおよびリソースにアクセスする許可を関数に付与する AWS Identity and Access Management (IAM) ロールです。例えば、Amazon にログを送信 CloudWatch し、トレースデータを にアップロードするアクセス許可を持つ実行ロールを作成できますAWS X-Ray。このページでは、Lambda 関数の実行ロールを作成、表示、および管理する方法について説明します。

関数を作成する際に、実行ロールを提供します。関数を呼び出すと、Lambda はこのロールを引き継いで関数に一時的な認証情報を自動的に渡します。関数コードで sts:AssumeRole を呼び出す必要はありません。

Lambda が実行ロールを適切に引き受けるには、ロールの信頼ポリシーが、Lambda サービスプリンシパル (lambda.amazonaws.com) を信頼できるサービスとして指定する必要があります。

関数の実行ロールを表示するには
  1. Lambda コンソールの関数ページを開きます。

  2. 関数の名前を選択します。

  3. [設定][アクセス権限] の順に選択します。

  4. [Resource summary] (リソースの概要) で、関数からアクセスが可能なサービスとリソースを確認します。

  5. ドロップダウンリストからサービスを選択すると、そのサービスに関連するアクセス許可が表示されます。

アクセス許可は、関数の実行ロールからいつでも追加または削除できます。または、別のロールを使用するように関数を設定することもできます。AWS SDK で関数を使用して呼び出すサービスや、オプションの機能を有効にするために Lambda で使用するサービス用のアクセス許可を追加します。

関数にアクセス許可を追加する場合は、そのコードまたは設定も更新します。これにより、(古い認証情報により実行中の) 関数のインスタンスが、強制的に停止され置き換えられます。

IAM コンソールでの実行ロールの作成

デフォルトでは、Lambda コンソールで関数を作成するときに、Lambda により最小限のアクセス許可で実行ロールが作成されます。IAM コンソールで実行ロールを作成することもできます。

IAM コンソールで実行ロールを作成するには
  1. IAM コンソールの [Roles (ロール)] ページを開きます。

  2. [ロールの作成] を選択します。

  3. [ユースケース] で、Lambda を選択します。

  4. [次へ] をクリックします。

  5. AWS 管理ポリシー AWSLambdaBasicExecutionRoleおよび を選択しますAWSXRayDaemonWriteAccess

  6. [次へ] をクリックします。

  7. [Role name] ボックスに入力し、[Create role] を選択します。

詳しい手順については、IAM ユーザーガイドの AWS サービスのロールの作成 (コンソール) を参照してください。

Lambda 実行ロールへの最小権限アクセスを付与する

デプロイのフェーズで Lambda 関数の IAM ロールを初めて作成するときに、必要な範囲を超えたアクセス許可を付与することがあります。ベストプラクティスとしては、本番環境に関数を公開する前に、ポリシーを調整して必要なアクセス許可のみを含めるようにします。詳細については、「IAM ユーザーガイド」の「最小特権アクセス許可を適用する」を参照してください。

IAM 実行ロールポリシーに必要なアクセス許可を確認するときは、IAM Access Analyzer を使用します。IAM Access Analyzer は、指定した日付範囲で AWS CloudTrail ログを確認し、その期間中に関数が使用したアクセス許可のみを持つポリシーテンプレートを生成します。このテンプレートを使用することで、きめ細かなアクセス許可で管理ポリシーを作成し、それを IAM ロールにアタッチすることができます。これにより、特定のユースケースでロールが AWS リソースとインタラクションするために必要なアクセス許可のみを付与します。

詳細については、「IAM ユーザーガイド」の「アクセスアクティビティに基づいてポリシーを生成する」を参照してください。

IAM API によるロールの管理

AWS Command Line Interface (AWS CLI) を使用して実行ロールを作成するには、create-role コマンドを使用します。このコマンドを使用するときに、信頼ポリシーインラインを指定することもできます。ロールの信頼ポリシーでは、指定したプリンシパルに、ロールを引き受けるための許可を付与します。次の例では、Lambda サービスプリンシパルに自分の役割を引き受けるアクセス権限を付与します。JSON 文字列で引用符をエスケープするための要件は、シェルに応じて異なることに注意してください。

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

また、個別の JSON ファイルを使用してロールの信頼ポリシーを定義することもできます。次の例では、trust-policy.json は現在のディレクトリにあるファイルです。

例 trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

以下の出力が表示されます。

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
注記

関数を呼び出すと、Lambda が自動的に実行ロールを引き受けます。関数コードで sts:AssumeRole を手動で呼び出すことは避けることが推奨されます。ユースケースでロール自体を引き受ける必要がある場合は、ロール自体を信頼できるプリンシパルとしてロールの信頼ポリシーに含める必要があります。詳細については、「IAM ユーザーガイド」の「ロールの信頼ポリシーの変更 (コンソール)」を参照してください。

ロールにアクセス許可を追加するには、attach-policy-to-role コマンドを使用します。AWSLambdaBasicExecutionRole マネージドポリシーを追加して開始します。

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

一時的なセキュリティ認証情報のセッション期間

Lambda は、関数に関連付けられた実行ロールを引き受け、一時的なセキュリティ認証情報を取得します。この認証情報は、関数の呼び出し時に環境変数として使用できます。事前に署名された Amazon S3 URL を作成する場合など、これらの一時的な認証情報を Lambda の外部で使用する場合、セッション時間を制御することはできません。IAM 最大セッション時間のセッティングは、Lambdaなどの AWS サービスが引き受けるセッションを制限されません。セッション期間を制御する必要がある場合は、sts:AssumeRole アクションを使用します。

Lambda 機能の AWS マネージドポリシー

次の AWS マネージドポリシーは、Lambda の機能を使うために必要なアクセス許可を付与します。

変更 説明 日付

AWSLambdaMSKExecutionRole – Lambda は、このポリシーに kafka:DescribeClusterV2 アクセス許可を追加しました。

AWSLambdaMSKExecutionRole は、Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターからのレコードの読み取りとアクセス、Elastic Network Interface (ENIsの管理、および CloudWatch Logs への書き込みを行うためのアクセス許可を付与します。

2022 年 6 月 17 日

AWSLambdaBasicExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaBasicExecutionRole は、ログを CloudWatch にアップロードするための許可を付与します。

2022 年 2 月 14 日

AWSLambdaDynamoDBExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaDynamoDBExecutionRole は、Amazon DynamoDB ストリームからレコードを読み取り、 CloudWatch ログに書き込むためのアクセス許可を付与します。

2022 年 2 月 14 日

AWSLambdaKinesisExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaKinesisExecutionRole は、Amazon Kinesis データストリームからイベントを読み取り、 CloudWatch ログに書き込むためのアクセス許可を付与します。

2022 年 2 月 14 日

AWSLambdaMSKExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaMSKExecutionRole は、Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターからのレコードの読み取りとアクセス、Elastic Network Interface (ENIsの管理、および CloudWatch Logs への書き込みを行うためのアクセス許可を付与します。

2022 年 2 月 14 日

AWSLambdaSQSQueueExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaSQSQueueExecutionRole は、Amazon Simple Queue Service (Amazon SQS) キューからメッセージを読み取り、 CloudWatch ログに書き込むためのアクセス許可を付与します。

2022 年 2 月 14 日

AWSLambdaVPCAccessExecutionRole – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSLambdaVPCAccessExecutionRole は、Amazon VPC 内の ENIs を管理し、 CloudWatch ログに書き込むためのアクセス許可を付与します。

2022 年 2 月 14 日

AWSXRayDaemonWriteAccess – Lambda は、このポリシーに対する変更の追跡を開始しました。

AWSXRayDaemonWriteAccess は、トレースデータを X-Ray にアップロードするための許可を付与します。

2022 年 2 月 14 日

CloudWatchLambdaInsightsExecutionRolePolicy – Lambda は、このポリシーに対する変更の追跡を開始しました。

CloudWatchLambdaInsightsExecutionRolePolicy は、ランタイムメトリクスを CloudWatch Lambda Insights に書き込むアクセス許可を付与します。

2022 年 2 月 14 日

AmazonS3ObjectLambdaExecutionRolePolicy – Lambda は、このポリシーに対する変更の追跡を開始しました。

AmazonS3ObjectLambdaExecutionRolePolicy は、Amazon Simple Storage Service (Amazon S3) オブジェクトの Lambda とやり取りし、 CloudWatch ログに書き込むためのアクセス許可を付与します。

2022 年 2 月 14 日

一部の機能では、Lambda コンソールは、カスタマーマネージドポリシーの実行ロールに対して、不足しているアクセス許可を追加しようとします。これらのポリシーは数が増える可能性があります。余分なポリシーを作成しないように、機能を有効にする前に関連する AWS 管理ポリシーを実行ロールに追加します。

イベントソースマッピングを使用して関数を呼び出すと、Lambda は実行ロールを使用してイベントデータを読み出します。例えば、Kinesis のイベントソースマッピングでは、データストリームからイベントを読み出し、バッチで関数に送信します。

アカウント内でサービスがロールを引き受ける場合は、ロール信頼ポリシーに aws:SourceAccount または aws:SourceArn のグローバル条件コンテキストキーを含めることで、期待するリソースによって生成されたリクエストのみに、ロールのアクセスを制限できます。詳細については、「AWS Security Token Service のサービス間の混乱した代理の防止」を参照してください。

イベントソースマッピングが使用可能なサービスは、次のとおりです。

Lambda コンソールには、AWS マネージドポリシーに加えて、追加のユースケース用のアクセス許可を含むカスタムポリシーを作成するためのテンプレートが用意されています。Lambda コンソールで関数を作成する際、1 つ以上のテンプレートのアクセス許可を使用して新しい実行ロールを作成することを選択できます。これらのテンプレートは、設計図から関数を作成する場合、または他のサービスへのアクセスを必要とするオプションを設定する場合にも自動的に適用されます。サンプルテンプレートは、このガイドのGitHubリポジトリ にあります。

Lambda 実行環境での認証情報の使用

一般的に、Lambda 関数のコードは、他の AWS のサービスに対し API リクエストを送信します。これらのリクエストを行うために、Lambda は関数の実行ロールを引き受けることによって、認証情報のセットを一時的に生成します。これらの認証情報は、関数の呼び出し中に環境変数として利用できます。AWS SDK を使用している場合に、コード内で SDK の認証情報を直接提供する必要はありません。デフォルトで、認証情報プロバイダーチェーンは認証情報を設定できる各場所を順番にチェックし、最初に利用できるものを選択します。これは通常、環境変数 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY、および AWS_SESSION_TOKEN) です。

Lambda は、リクエストが実行環境内から実行される AWS API リクエストである場合、ソース関数 ARN を認証情報コンテキストに挿入します。Lambda は、Lambda がユーザーに代わって実行環境外で実行する以下の AWS API リクエストにも、ソース関数 ARN を挿入します。

サービス [アクション] 理由
CloudWatch ログ CreateLogGroup, CreateLogStream, PutLogEvents

CloudWatch Logs ロググループにログを保存するには

X-Ray PutTraceSegments

X-Ray にトレースデータを送信する

Amazon EFS ClientMount

関数を Amazon Elastic File System (Amazon EFS) ファイルシステムに接続する

ソース関数 ARN は、Lambda が同じ実行ロールを使用して、実行環境外でユーザーに代わって実行するその他の AWS API 呼び出しには含まれていません。このように、実行環境外で実行される API 呼び出しの例としては、以下が挙げられます。

  • 環境変数を自動的に暗号化および復号化するための AWS Key Management Service (AWS KMS) の呼び出し。

  • VPC 対応関数用の Elastic Network Interfaces (ENI) を作成するための Amazon Elastic Compute Cloud (Amazon EC2) の呼び出し。

  • イベントソースマッピングとしてセットアップされたイベントソースから読み込むための、Amazon Simple Queue Service (Amazon SQS) などの AWS サービスの呼び出し。

認証情報コンテキストに挿入されたソース関数 ARN を使用すると、特定の Lambda 関数のコードからリソースへの呼び出しが行われたのかどうかを確認できます。これを確認するには、IAM ID ベースのポリシーまたはサービス コントロール ポリシー (SCP) で lambda:SourceFunctionArn 条件キーを使用します。

注記

リソースベースのポリシーにある lambda:SourceFunctionArn は使用できませんでした。

ID ベースのポリシーまたは SCP でこの条件キーを使用することで、関数コードが他の AWS のサービスに対し実行する、API アクションのためのセキュリティ制御を実装できます。こういったセキュリティアプリケーションには、認証情報の漏洩の原因を特定する場合など、重要なものがいくつか含まれています。

注記

lambda:SourceFunctionArn 条件キーは、lambda:FunctionArn および aws:SourceArn 条件キーとは異なります。lambda:FunctionArn 条件キーは、イベントソースマッピングにのみ適用され、イベントソースから呼び出しが可能な関数を定義するのに使用されます。aws:SourceArn 条件キーは、Lambda 関数がターゲットリソースであるポリシーにのみ適用され、その機能を呼び出すことができる他の AWS サービスとリソースを定義するのに役立ちます。lambda:SourceFunctionArn 条件キーは任意の ID ベースのポリシーまたは SCP に適用して、他のリソースに対して特定の AWS API 呼び出しを行う許可を持つ特定の Lambda 関数を定義します。

ポリシーで lambda:SourceFunctionArn を使用するには、それを、任意の ARN 条件演算子に条件として含めます。キーの値は有効な ARN にする必要があります。

例えば、Lambda 関数のコードが特定の Amazon S3 バケットをターゲットとして、s3:PutObject 呼び出しを実行したとします。これには、Lambda 関数の 1 つだけに、対象のバケットに対する s3:PutObject アクセスを許可する必要があります。この場合、関数の実行ロールには、次のようなポリシーがアタッチされている必要があります。

例 特定の Lambda 関数に Amazon S3 リソースへのアクセスを許可するポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::lambda_bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

このポリシーでは、ARN が arn:aws:lambda:us-east-1:123456789012:function:source_lambda である Lambda 関数がソースの場合にのみ、s3:PutObject アクセスを許可します。このポリシーは、他の呼び出し ID に対して s3:PutObject アクセスを許可することはありません。別の関数またはエンティティが、同じ実行ロールを使用し s3:PutObject 呼び出しを行った場合も同様です。

注記

lambda:SourceFunctionARN 条件キーは、Lambda 関数のバージョンや関数エイリアスをサポートしていません。特定の関数バージョンまたはエイリアスの ARN を使用しても、関数には指定したアクションを実行するアクセス許可は付与されません。関数には、必ずバージョンやエイリアスのサフィックスが付いていない、修飾されていない ARN を使用してください。

サービスコントロールポリシーlambda:SourceFunctionArn を使用することもできます。例えば、バケットへのアクセスを、単一の Lambda 関数のコードまたは特定の Amazon Virtual Private Cloud (VPC) からの呼び出しに制限したいとします。以下の SCP は、これを示したものです。

例 特定の条件下で Amazon S3 へのアクセスを拒否するポリシー
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] }, "ArnNotEqualsIfExists": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

このポリシーは、ARN arn:aws:lambda:*:123456789012:function:source_lambda を持つ特定の Lambda 関数からのものでない限り、または指定された VPC からのものでない限り、すべての S3 アクションを拒否します。StringNotEqualsIfExists 演算子は、aws:SourceVpc キー がリクエストに含まれている場合にのみ、IAM に対し、この条件を処理することを指示します。これと同様に、IAM は lambda:SourceFunctionArn が存在する場合にのみ ArnNotEqualsIfExists を認識します。