Lambda関数へのアクセス権を定義する方法
弊社はスマートグリッドに関わる多様なソフトウェアを開発している企業です。各サービスはマイクロサービス化されており、一部のサービスの実行には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つの方法について紹介しました。
ユーザごとに権限を管理したい場合などはアイデンティティベースのポリシーを使用し、他サービスや外部からのアクセスについて定義したい場合などはリソースベースのポリシーを使用すると権限を管理しやすくなります。ぜひ使い分けてみてください。