Lambda関数へのアクセス権を定義する方法

Ryo Sakaguchi
Grid Solutions
Published in
May 16, 2023

弊社はスマートグリッドに関わる多様なソフトウェアを開発している企業です。各サービスはマイクロサービス化されており、一部のサービスの実行にはAWS Lambdaを利用しております。

本記事ではAWS IAMやAWS Lambdaを初めて利用される方向けに、躓きやすい権限周りの基礎について解説いたします。

Lambda関数を実行するには、プリンシパル(アクションを実行する主体)にアクセス権を定義する必要があります。その方法は2種類あり、アイデンティティベースのポリシーを利用する方法とリソースベースのポリシーを利用する方法です。どちらを使ってもアクセス権を付与できます。

プリンシパルにアイデンティティベースのIAMポリシーを付与する方法

概要

この方法ではプリンシパルに関数のアクセス権を直接付与します。

プリンシパルとはAWSから認証を受け、アクションを実行したりリソースにアクセスしたりできる主体です。IAMユーザやロールなどがその例です。

特定のユーザに権限を付与したい場合などに便利です。

以下はアイデンティティベースのポリシーを利用した権限付与の例です。

まず今回のためにLambda関数sample_lambda_functionを作成します。呼び出すとHello Worldと返す単純な関数です。

次に、今回の検証のためにIAMユーザsample_userを作成します。このIAMユーザにはLambda関数の読み取り権限のポリシーを付与しますが、実行権限は与えません。

想定通り、このIAMユーザではLambda関数を実行できません。

しかしIAMユーザにアイデンティティベースのポリシーを付与することで、Lambda関数の実行権限を与えます。

するとLambda関数を実行できるようになります。これがアイデンティティベースのポリシーを利用した権限付与の流れになります。

Lambda関数にリソースベースのポリシーを付与する方法

概要

この方法ではLambda関数自体にポリシーを付与します。アイデンティティベースのポリシーで、プリンシパル(Lambda関数を呼ぶ側)に権限を付与していたのと対照的です。

リソースベースのポリシーにはプリンシパルを定義する必要があります。ここに示されたプリンシパルのみにそのポリシーが適用されます。

アイデンティティベースのポリシーの例に続く形で、リソースベースのポリシーも説明します。ここでもsample_userというユーザに実行権限を与えることを目的とします。

まず、アイデンティティベースのポリシーをIAMユーザから取り除き、Lambda関数を実行できないようにします。

次にLambda関数にリソースベースのポリシーを付与します。

リソースベースのポリシーは、Lambda関数のページの設定タブから設定できます。

「アクセス権限を追加」から、sample_userにアクセス権限を追加します。

プリンシパルの欄にsample_userが、アクションの欄にlambda:InvokeFunction(関数の実行権限)が設定されているのが分かります。

想定通り、Lambda関数を実行できるようになりました。

まとめ

本記事ではLambda関数にアクセス権を付与する2つの方法について紹介しました。

ユーザごとに権限を管理したい場合などはアイデンティティベースのポリシーを使用し、他サービスや外部からのアクセスについて定義したい場合などはリソースベースのポリシーを使用すると権限を管理しやすくなります。ぜひ使い分けてみてください。

--

--