AWS Lambda
開発者ガイド

AWS Lambda アクセス権限モデル

エンドツーエンドの AWS Lambda ベースアプリケーションを機能させるには、さまざまなアクセス権限を管理する必要があります。以下に例を示します。

  • ストリームベースのサービス (Amazon Kinesis Data Streams および DynamoDB) または Amazon SQS キューを除くイベントソースの場合、AWS Lambda 関数を呼び出すには、イベントソースのアクセス権限を付与する必要があります。

     

  • ポーリングベースのイベントソース (Amazon Kinesis Data Streams と DynamoDB ストリーム、および Amazon SQS キュー) の場合、AWS Lambda はユーザーに代わってリソースをポーリングして、新しいレコードを読み取ります。これを有効にするには、新しいレコードにアクセスする AWS Lambda アクセス権限を付与する必要があります。また、AWS Lambda は、このイベントソースにサブスクライブしてイベントソースを処理する Lambda 関数を呼び出します。

     

  • Lambda 関数を直接呼び出すその他のイベントソースに、AWS Lambda 関数を呼び出すイベントソースのアクセス権限を付与する必要があります。

     

以下のセクションでは、アクセス権限管理について説明します。

アクセス権限の管理: IAM ロール (実行ロール) を使用する

各 Lambda 関数には、関連付けられた IAM ロール (実行ロール) があります。Lambda 関数を作成するときに、その IAM ロールを指定します。このロールに付与するアクセス権限によって、AWS Lambda がそのロールを引き受けた場合にできることが決まります。IAM ロールに付与するアクセス権限には 2 つのタイプがあります。

  • Lambda 関数コードが AWS リソースにアクセスする場合 (S3 バケットからのオブジェクトの読み込みや CloudWatch Logs へのログの書き込みなど)、関連する Amazon S3 および CloudWatch アクションに対するアクセス権限をロールに付与する必要があります。

     

  • イベントソースがポーリングベース (Amazon Kinesis Data Streams、DynamoDB、Amazon SQS) の場合、AWS Lambda はユーザーに代わってそのリソースをポーリングします。AWS Lambda には、新しいレコードを読み取るストリームまたはキューをポーリングするアクセス権限が必要です。これを有効にするには、新しいレコードにアクセスする AWS Lambda アクセス権限を付与する必要があります。また、AWS Lambda は、このイベントソースにサブスクライブしてイベントソースを処理する Lambda 関数を呼び出します。

IAM ロールの詳細については、『IAM ユーザーガイド』の「ロール (委任とフェデレーション)」を参照してください。

重要

IAM ロールを作成するユーザーは、有効となり、このロールを引き受けるアクセス権限を AWS Lambda に渡します。このためにユーザーには、iam:PassRole アクションのアクセス権限が必要です。管理者権限を持つユーザーがこのロールを作成する場合は、管理者ユーザーに iam:PassRole アクションを含むフルアクセス権限があるため、iam:PassRole に対するアクセス権限をセットアップするための操作は必要ありません。

実行ロールの作成プロセスを単純化するために、AWS Lambda には、ユーザーが使用できる以下の AWS 管理対象 (定義済み) アクセス権限ポリシーが用意されています。これらのポリシーには、特定のシナリオ向けの一般的なアクセス権限が含まれています。

  • AWSLambdaBasicExecutionRole – ログを作成する Amazon CloudWatch Logs アクションのアクセス権限のみを付与します。Lambda 関数がログ作成以外に他の AWS リソースにアクセスしない場合は、このポリシーを使用できます。

     

  • AWSLambdaKinesisExecutionRole – Amazon Kinesis Data Streams アクションおよび CloudWatch Logs アクションのアクセス権限を付与します。Kinesis ストリームイベントを処理する Lambda 関数を作成する場合は、このアクセス権限ポリシーを添付できます。

     

  • AWSLambdaDynamoDBExecutionRole – DynamoDB アクションおよび CloudWatch Logs アクションのアクセス権限を付与します。DynamoDB ストリームイベントを処理する Lambda 関数を作成する場合は、このアクセス権限ポリシーを添付できます。

     

  • AWSLambdaVPCAccessExecutionRole – Elastic Network Interface (ENI) を管理する Amazon Elastic Compute Cloud (Amazon EC2) アクションのアクセス権限を付与します。Amazon Virtual Private Cloud (Amazon VPC) サービスの VPC のリソースにアクセスする Lambda 関数を作成する場合は、このアクセス権限ポリシーを添付できます。このポリシーは、ログを作成する CloudWatch Logs アクションに対するアクセス権限も付与します。

    これらの AWS 管理対象アクセス権限ポリシーは IAM コンソールで確認できます。これらのポリシーを検索すると、これらのポリシーそれぞれに付与されたアクセス権限を表示できます。

権限の管理: Lambda 関数ポリシーを使用する

ストリームベース (Kinesis および DynamoDB) またはメッセージベース (Amazon SQS) のポーリングベースのソースを除く、すべてのサポートされているイベントソースは、必要なアクセス権限が付与することで提供される、プッシュモデルを使用する Lambda 関数を呼び出します。たとえば、バケットに新しいオブジェクトが作成されたときに Amazon S3 で Lambda 関数を呼び出す場合、Amazon S3 には Lambda 関数を呼び出すアクセス権限が必要です。

これらのアクセス権限は関数ポリシーを使用して付与します。(サンプルリストについては、ポリシーテンプレート を参照してください)。AWS Lambda には、関数ポリシーのアクセス権限を管理するための API が用意されています。例については、「AddPermission」を参照してください。

また、関数ポリシーを使用してクロスアカウントのアクセス権限を付与することもできます。たとえば、ユーザー定義アプリケーションとそれが呼び出す Lambda 関数が同じ AWS アカウントに属する場合、明示的なアクセス権限を付与する必要はありません。その他の場合は、Lambda 関数を所有する AWS アカウントは、Lambda 関数に関連付けられたアクセス権限ポリシーに、クロスアカウントアクセス権限を許可するがあります。

注記

Lambda 関数ポリシーを使用する代わりに、イベントソース (たとえば Amazon S3 または DynamoDB) に Lambda 関数を呼び出すアクセス権限を付与する別の IAM ロールを作成できます。ただしリソースポリシーの方が、セットアップが簡単で、どのイベントソースが Lambda 関数を呼び出すアクセス権限を持っているかを追跡するのも簡単です。

Lambda 関数ポリシーの詳細については、「AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)」を参照してください。Lambda 権限の詳細については、「AWS Lambda に対する認証とアクセスコントロール」を参照してください。

推奨事項

次のトピックは「Lambda 実行環境と利用できるライブラリ」です。

Lambda 関数のビルド を確認して、ご利用開始にあたって の演習を試してから、ユースケース を調べることをお勧めします。各ユースケースには、エンドツーエンドエクスペリエンスを体験できるエンドツーエンドの説明が記載されています。