メニュー
AWS Lambda
開発者ガイド

AWS Lambda アクセス権限モデル

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

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

     

  • ストリームベースのイベントソース (Amazon Kinesis Streams および DynamoDB ストリーム) の場合、AWS Lambda はユーザーに代わってストリームをポーリングし、ストリームの新しいレコードを読み取ります。そのため、関連するストリームアクションに AWS Lambda アクセス権限を付与する必要があります。

     

  • Lambda 関数を呼び出す場合、アカウントの AWS リソースにアクセスする場合があります (たとえば、S3 バケットからのオブジェクトの読み込み)。AWS Lambda は、(Lambda 関数の作成時に指定したロールを引き受けて) ユーザーに代わって Lambda 関数を実行します。したがって、オブジェクトの読み込みに必要な Amazon S3 アクションの権限など、Lambda 関数に必要なアクセス権限をロールに付与する必要があります。

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

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

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

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

     

  • イベントソースがストリームベース (Amazon Kinesis Streams および DynamoDB ストリーム) の場合、AWS Lambda はユーザーに代わってそのストリームをポーリングします。AWS Lambda がストリームをポーリングして、ストリームの新しいレコードを読み取るには、アクセス権限が必要です。そのため、このロールに関連するアクセス権限を付与する必要があります。

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

重要

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

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

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

     

  • AWSLambdaKinesisExecutionRole – Amazon Kinesis 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 ストリーム) を除き、必要なアクセス権限が付与されていれば、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 に対する認証とアクセスコントロール」を参照してください。

推奨事項

AWS Lambda を初めて使用する場合は、「仕組み」セクションのすべてのトピックに目を通し、Lambda の内容を確認しておくことをお勧めします。次のトピックは「Lambda 実行環境と利用できるライブラリ」です。

「仕組み」セクションのすべてのトピックに目を通した後は、Lambda 関数のビルドを確認して、ご利用開始にあたっての実習を体験し、ユースケースについて学習することをお勧めします。各ユースケースには、エンドツーエンドエクスペリエンスを体験できるエンドツーエンドの説明が記載されています。