AWS Lambda 実行ロール
Lambda 関数の実行ロールは、AWS サービスおよびリソースにアクセスする許可を関数に付与する AWS Identity and Access Management (IAM) ロールです。関数を作成する際にこのロールを指定することで、関数が呼び出されると、Lambda によってこのロールが引き受けられます。Amazon CloudWatch にログを送信するアクセス許可を含む開発用の実行ロールを作成し、トレースデータを AWS X-Ray にアップロードすることができます。
関数の実行ロールを表示するには
-
Lambda コンソールの [Functions (関数)
] ページを開きます。 -
関数を選択します。
-
[設定] を選択して、[アクセス許可] を選択します。
-
[リソースの概要] で、関数がアクセスできるサービスとリソースを確認します。次の例は、Lambda コンソールで実行ロールを作成するときに Lambda により実行ロールに追加される CloudWatch Logs アクセス許可を示しています。
-
ドロップダウンリストからサービスを選択すると、そのサービスに関連するアクセス許可が表示されます。
アクセス許可は、関数の実行ロールからいつでも追加または削除できます。または、別のロールを使用するように関数を設定することもできます。AWS SDK で関数を使用して呼び出すサービスや、オプションの機能を有効にするために Lambda で使用するサービス用のアクセス許可を追加します。
関数にアクセス許可を追加する場合は、そのコードまたは設定も更新します。これにより、認証情報が古くなっている、関数の実行中のインスタンスが強制的に停止され置き換えられます。
IAM コンソールでの実行ロールの作成
デフォルトでは、Lambda コンソールで関数を作成するときに、Lambda により最小限のアクセス許可で実行ロールが作成されます。IAM コンソールで実行ロールを作成することもできます。
IAM コンソールで実行ロールを作成するには
-
IAM コンソールの [Roles (ロール)
] ページを開きます。 -
[Create role (ロールの作成)] を選択します。
-
[一般的なユースケース] で、[Lambda] を選択します。
-
[Next: Permissions (次へ: アクセス許可)] を選択します。
-
[アクセス許可ポリシーのアタッチ] で、[AWSLambdaBasicExecutionRole] および [AWSXRayDaemonWriteAccess] AWS 管理ポリシーを選択します。
-
[次へ: タグ] を選択します。
-
[Next: Review] を選択します。
-
[ロール名] に
lambda-role
と入力します。 -
[ロールの作成] を選択します。
詳細な手順については、IAM ユーザーガイドの「AWS サービス用のロールを作成する (コンソール)」を参照してください。
IAM API によるロールの管理
AWS Command Line Interface (AWS CLI) を使用して実行ロールを作成するには、create-role
コマンドを使用します。
$
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" } ] } } }
trust-policy.json
ファイルは、ロールの 信頼ポリシーを定義する現在のディレクトリにある JSON ファイルです。この信頼ポリシーにより、サービスプリンシパルに AWS Security Token Service AssumeRole
アクションを呼び出す lambda.amazonaws.com
アクセス許可を付与することで、Lambda はロールのアクセス許可を使用できます。
例 trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
インラインで信頼ポリシーを指定することもできます。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"}]}'
アクセス許可をロールに追加するには、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 機能用の AWS 管理ポリシー
次の AWS 管理ポリシーでは、Lambda 機能を使用するために必要なアクセス許可を付与します。
-
AWSLambdaBasicExecutionRole – ログを CloudWatch にアップロードするためのアクセス許可。
-
AWSLambdaDynamoDBExecutionRole – Amazon DynamoDB ストリームからレコードを読み出すためのアクセス許可。
-
AWSLambdaKinesisExecutionRole – Amazon Kinesis データストリームまたはコンシューマーからイベントを呼び出すためのアクセス許可。
-
AWSLambdaMQExecutionRole – Amazon MQ ブローカーからレコードを読み取るアクセス許可。
-
AWSLambdaMSKExecutionRole – Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターからレコードを読み取るアクセス許可。
-
AWSLambdaSQSQueueExecutionRole – Amazon Simple Queue Service (Amazon SQS) キューからメッセージを読み出すためのアクセス許可。
-
AWSLambdaVPCAccessExecutionRole – 関数を Virtual Private Cloud (VPC) に接続するように Elastic Network Interface を管理するためのアクセス許可。
-
AWSXRayDaemonWriteAccess – トレースデータを X-Ray をアップロードするためのアクセス許可。
-
CloudWatchLambdaInsightsExecutionRolePolicy – ランタイムメトリクスを CloudWatch Lambda Insights に書き込むアクセス許可です。
一部の機能の場合、Lambda コンソールはカスタマー管理ポリシーの実行ロールに対して、不足しているアクセス許可を追加しようとします。これらのポリシーは数が増える可能性があります。余分なポリシーを作成しないように、機能を有効にする前に関連する AWS 管理ポリシーを実行ロールに追加します。
イベントソースマッピングを使用して関数を呼び出すと、Lambda は実行ロールを使用してイベントデータを読み出します。例えば、Kinesis のイベントソースマッピングでは、データストリームからイベントを読み出し、バッチで関数に送信します。イベントソースマッピングが使用可能なサービスは、次のとおりです。
Lambda がイベントを読み取るサービス
Lambda コンソールには、AWS 管理ポリシーに加えて、追加のユースケース用のアクセス許可を含むカスタムポリシーを作成するためのテンプレートが用意されています。Lambda
コンソールで関数を作成する際、1 つ以上のテンプレートのアクセス許可を使用して新しい実行ロールを作成することを選択できます。これらのテンプレートは、設計図から関数を作成する場合、または他のサービスへのアクセスを必要とするオプションを設定する場合にも自動的に適用されます。サンプルテンプレートは、本ガイドの
GitHub リポジトリ