実行ロールを使用した Lambda 関数のアクセス許可の定義 - AWS Lambda

実行ロールを使用した Lambda 関数のアクセス許可の定義

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

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

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

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

デフォルトでは、Lambda コンソールで関数を作成するときに、Lambda により最小限のアクセス許可で実行ロールが作成されます。具体的には、この実行ロールには AWSLambdaBasicExecutionRole マネージドポリシーが含まれており、Amazon CloudWatch Logs にイベントをログ記録するための基本的なアクセス許可を関数に付与します。

通常、関数には、より意味のあるタスクを実行するための追加のアクセス許可が必要です。例えば、Amazon DynamoDB データベースのエントリを更新してイベントに応答する Lambda 関数があるとします。IAM コンソールを使用して、必要なアクセス許可を持つ実行ロールを作成できます。

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

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

  3. [信頼されたエンティティタイプ] から、[AWS サービス] を選択します。

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

  5. [Next] を選択します。

  6. ロールにアタッチする AWS マネージドポリシーを選択します。例えば、関数が DynamoDB にアクセスする必要がある場合は、AWSLambdaDynamoDBExecutionRole マネージドポリシーを選択します。

  7. [Next] を選択します。

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

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

実行ロールを作成したら、それを関数にアタッチします。Lambda コンソールで関数を作成するときに、以前に作成した任意の実行ロールを関数にアタッチできます。既存の関数に新しい実行ロールをアタッチする場合は、「関数の実行ロールの更新」の手順に従います。

AWS CLI を使用したロールの作成と管理

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" } ] } } }

ロールにアクセス許可を追加するには、attach-policy-to-role コマンドを使用します。次のコマンドは、AWSLambdaBasicExecutionRole マネージドポリシーを lambda-ex 実行ロールにアタッチします。

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

実行ロールを作成したら、それを関数にアタッチします。Lambda コンソールで関数を作成するときに、以前に作成した任意の実行ロールを関数にアタッチできます。既存の関数に新しい実行ロールをアタッチする場合は、「関数の実行ロールの更新」の手順に従います。

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

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

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

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