

# 実行ロールを使用した Lambda 関数のアクセス許可の定義
<a name="lambda-intro-execution-role"></a>

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

関数を呼び出すと、Lambda が自動的に実行ロールを引き受けます。関数コード内で、実行ロールを引き受けるために `sts:AssumeRole` を手動で呼び出すことは避けてください。ユースケースでロール自体を引き受ける必要がある場合は、ロール自体を信頼できるプリンシパルとしてロールの信頼ポリシーに含める必要があります。詳細については、「IAM ユーザーガイド」の「[ロールの信頼ポリシーの変更 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)」を参照してください。

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

**Topics**
+ [IAM コンソールでの実行ロールの作成](#permissions-executionrole-console)
+ [AWS CLI を使用したロールの作成と管理](#permissions-executionrole-api)
+ [Lambda 実行ロールへの最小権限アクセスを付与する](#permissions-executionrole-least-privilege)
+ [実行ロールのアクセス許可の表示と更新](permissions-executionrole-update.md)
+ [実行ロールでの AWS マネージドポリシーの使用](permissions-managed-policies.md)
+ [ソース関数 ARN を使用した関数のアクセス動作の制御](permissions-source-function-arn.md)

## IAM コンソールでの実行ロールの作成
<a name="permissions-executionrole-console"></a>

デフォルトでは、[Lambda コンソールで関数を作成する](getting-started.md#getting-started-create-function)ときに、Lambda により最小限のアクセス許可で実行ロールが作成されます。具体的には、この実行ロールには [`AWSLambdaBasicExecutionRole` マネージドポリシー](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaBasicExecutionRole.html)が含まれており、Amazon CloudWatch Logs にイベントをログ記録するための基本的なアクセス許可を関数に付与します。**[アクセス許可]** セクションで **[デフォルトのロールの作成]** を選択できます。

既存のロールを選択するには、**[アクセス許可]** セクションで **[別のロールを使用する]** を選択します。Lambda 関数で、イベントに応じて Amazon DynamoDB データベースのエントリを更新するなどのタスクを実行するために追加のアクセス許可が必要な場合は、必要なアクセス許可を持つカスタム実行ロールを作成できます。これを行うには、**[アクセス許可]** セクションで **[別のロールを使用する]** を選択します。これにより、アクセス許可をカスタマイズできるドロワーが開きます。

**コンソールから実行ロールを設定するには**

1. ロールの詳細セクションに **[ロール名]** を入力します。

1. **[ポリシー]** セクションで、**[既存のポリシーを選択]** を選択します。

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

1. [**ロールの作成**] を選択してください。

あるいは、[Lambda コンソールで関数を作成する](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#getting-started-create-function)ときに、以前に作成した任意の実行ロールを関数にアタッチできます。既存の関数に新しい実行ロールをアタッチする場合は、「[関数の実行ロールの更新](permissions-executionrole-update.md)」の手順に従います。

## AWS CLI を使用したロールの作成と管理
<a name="permissions-executionrole-api"></a>

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` は現在のディレクトリにあるファイルです。

**Example 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
```

ロールにアクセス許可を追加するには、**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 コンソールで関数を作成する](getting-started.md#getting-started-create-function)ときに、以前に作成した任意の実行ロールを関数にアタッチできます。既存の関数に新しい実行ロールをアタッチする場合は、「[関数の実行ロールの更新](permissions-executionrole-update.md#update-execution-role)」の手順に従います。

## Lambda 実行ロールへの最小権限アクセスを付与する
<a name="permissions-executionrole-least-privilege"></a>

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

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

詳細については、「*IAM ユーザーガイド*」の「[アクセスアクティビティに基づくポリシーの生成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_generate-policy.html)」を参照してください。