AWS Lambda 関数の実行ロールのアクセス許可と、呼び出しアクセス許可の違いについて知りたいです。Lamda 用の、2 種類の AWS Identity and Access Management (IAM) アクセス許可の違いについても把握したいです。
解決策
重要: IAM ポリシーを作成するときは、特定のタスクを実行するために必要なアクセス許可のみを付与することがベストプラクティスです。
Lambda 関数実行ロールのアクセス許可
Lambda 実行ロールのアクセス許可は、Lambda 関数に特定の AWS サービスとリソースへのアクセス許可を付与する IAM アクセス許可です。サービスまたはリソースに対する関数実行ロールのアクセス許可を付与しないと、関数はサービスまたはリソースにアクセスできません。
実行ロールのアクセス許可を付与する
Lambda 実行ロールのアクセス許可を付与するには、IAM ポリシーステートメントの Action 要素に s3:GetObject や sns:Publish などのサービス固有の API アクションを含めます。次に、Lambda 関数が呼び出されたときに引き受ける IAM 実行ロールにポリシーをアタッチします。
キューまたはデータストリームを生成するサービスでは、キューまたはデータストリームをポーリングするために、Lambda にイベントソースマッピングを設定する必要があります。イベントソースマッピングは、関数実行ロールのアクセス許可を使用してイベントソース内の項目の読み取りと管理を行います。
注: アクセス許可、イベント構造、設定、ポーリングの動作は、イベントソースに左右されます。Lambda のポーリングアクセス許可を含む IAM ポリシーの例については、「IAM ポリシーで AWS Lambda 関数に Amazon DynamoDB ストリームレコードへのアクセスを許可する」を参照してください。
Lambda 関数呼び出しアクセス許可
Lambda 関数呼び出しアクセス許可は、特定のサービスまたはリソースに Lambda 関数を呼び出すためのアクセス許可を付与する IAM アクセス許可です。Lambda 関数にサービスまたはリソースの呼び出しアクセス許可を付与しないと、そのサービスまたはリソースは関数を呼び出せません。
重要: Lambda 関数にイベントソースをプッシュするサービスには、呼び出しアクセス許可を付与する必要があります。たとえば、関数のリソースベースのポリシーを使用して、Amazon API Gateway に Lambda 関数呼び出しのアクセス許可を付与します。
呼び出しアクセス許可を付与する
Lambda 呼び出しアクセス許可を付与するには、Lambda 関数 の IAM リソースベースのポリシーステートメントで、Action 要素に lambda:InvokeFunction API アクションを含めます。Lambda 関数のリソースベースのポリシーは、関数の実行ロールとは別途設定します。
注: この場合、lambda:InvokeFunction アクション識別子は Invoke API 操作とは異なります。他のアクションでは、アクション識別子は lambda: というプレフィックスが付いた操作名です。
Lambda コンソールを使用して関数にトリガーを追加すると、必要な呼び出しアクセス許可が関数のリソースベースのポリシーに自動的に追加されます。コンソールでは使用できない AWS アカウントまたはサービスにアクセス許可を付与するには、Lambda AddPermission API アクションを使用する必要があります。
詳細については、「Lambda 関数に AWS サービスへのアクセスを付与する」を参照してください。
関連情報
AWS Lambda でアクセス許可を管理する
実行ロールで AWS マネージドポリシーを使用する