ポリシーのリソースセクションと条件セクションの微調整 - AWS Lambda

ポリシーのリソースセクションと条件セクションの微調整

AWS Identity and Access Management (IAM) ポリシーでリソースと条件を指定することで、ユーザーのアクセス許可の範囲を制限できます。ポリシーの各アクションが、それぞれの動作によって異なるリソースタイプと条件タイプの組み合わせをサポートします。

各 IAM ポリシーステートメントによって、リソースで実行されるアクションに対するアクセス許可が付与されます。アクションが名前の付いたリソースで動作しない場合、またはすべてのリソースに対してアクションを実行するアクセス許可を付与した場合、ポリシー内のリソースの値はワイルドカード (*) になります。多くのアクションでは、リソースの Amazon リソースネーム (ARN)、または複数のリソースに一致する ARN パターンを指定することによって、ユーザーによる変更が可能なリソースを制限できます。

リソースタイプ別の、アクションの範囲を制限する一般的な設計は次のとおりです。

  • 関数 - 関数を操作するアクションは、関数、バージョン、またはエイリアス ARN によって特定の関数に制限することができます。

  • イベントソースマッピング – アクションは、ARN によって特定のイベントソースマッピングリソースに制限することができます。イベントソースマッピングは常に関数に関連付けられます。また、lambda:FunctionArn 条件を使用して、関連する関数によってアクションを制限することもできます。

  • レイヤー - レイヤーの使用とアクセス許可に関連するアクションは、レイヤーのバージョンに影響します。

  • コード署名設定 – アクションは、ARN によって特定のコード署名設定リソースに制限することができます。

  • タグ – 標準のタグ条件を使用します。詳細については、「Lambda での属性ベースのアクセスコントロールの使用」を参照してください。

リソース別にアクセス許可を制限するには、ARN 別にリソースを指定します。

Lambda リソース ARN 形式
  • 関数 - arn:aws:lambda:us-west-2:123456789012:function:my-function

  • 関数のバージョン - arn:aws:lambda:us-west-2:123456789012:function:my-function:1

  • 関数のエイリアス - arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST

  • イベントソースマッピング - arn:aws:lambda:us-west-2:123456789012:event-source-mapping:fa123456-14a1-4fd2-9fec-83de64ad683de6d47

  • レイヤー - arn:aws:lambda:us-west-2:123456789012:layer:my-layer

  • レイヤーバージョン - arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1

  • コード署名設定 – arn:aws:lambda:us-west-2:123456789012:code-signing-config:my-csc

例えば、以下のポリシーでは、my-function という名前の関数を米国西部 (オレゴン) AWS リージョンで呼び出すことを、AWS アカウント 123456789012 のユーザーに対し許可します。

例 関数ポリシーを呼び出す
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Invoke", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" } ] }

アクションの識別子 (lambda:InvokeFunction) が、API オペレーション (Invoke) と異なる特別なケースです。その他のアクションのアクションの識別子は、lambda: プレフィックスがついたオペレーション名です。

ポリシーの条件セクションについて

条件は、アクションが許可されているかどうかを判断するために追加のロジックを適用するオプションのポリシー要素です。すべてのアクションでサポートされている共通の条件に加えて、Lambda は、一部のアクションが使用する追加パラメータの値を制限するための条件タイプも定義します。

例えば、lambda:Principal 条件では、関数のリソースベースのポリシーへの呼び出しアクセス権をユーザーが付与できる、サービスまたはアカウントを制限できます。次のポリシーを使用すると、ユーザーは、test という名前の関数を呼び出すアクセス許可を Amazon Simple Notification Service (Amazon SNS) トピックに付与できます。

例 関数ポリシーのアクセス許可を管理する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageFunctionPolicy", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:test:*", "Condition": { "StringEquals": { "lambda:Principal": "sns.amazonaws.com" } } } ] }

この条件では、プリンシパルが Amazon SNS で、別のサービスやアカウントでないことが必要です。リソースパターンでは、関数名が test で、バージョン番号またはエイリアスが含まれている必要があります。例えば、test:v1 と指定します。

Lambda およびその他の AWS サービスのリソースと条件の詳細については、「サービス認可リファレンス」の「AWS のサービスのアクション、リソース、および条件キー」を参照してください。

ポリシーのリソースセクションで関数を参照する

Amazon リソースネーム (ARN) を使用して、ポリシーステートメント内で Lambda 関数を参照します。関数 ARN の形式は、関数全体を参照する (修飾)か、関数のバージョンエイリアスを参照する (非修飾) かに応じて異なります。

Lambda API コールを行うとき、ユーザーは、GetFunction FunctionName パラメータにあるバージョン ARN またはエイリアス ARN を渡すか、 GetFunction Qualifier パラメータにある値を設定することで、バージョンまたはエイリアスを指定することができます。Lambda は、IAM ポリシー内のリソース要素を、API コールで渡された FunctionNameQualifier の両方と比較することによって、認可の決定を行います。一致しないものがある場合、Lambda はそのリクエストを拒否します。

関数に対するアクションを許可するか拒否するかにかかわらず、期待どおりの結果を得るには、ポリシーステートメントで正しい関数の ARN タイプを使用する必要があります。例えば、ポリシーが非修飾 ARN を参照する場合、Lambda は非修飾 ARN を参照するリクエストを受け入れますが、修飾 ARN を参照するリクエストは拒否します。

注記

アカウント ID を照合するためにワイルドカード文字 (*) を使用することはできません。認められる構文の詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシーリファレンス」を参照してください。

例 非修飾 ARN の呼び出しの許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction" } ] }

ポリシーが特定の修飾 ARN を参照する場合、Lambda はその ARN を参照するリクエストを受け入れますが、非修飾 ARN や別の修飾 ARN (myFunction:2 など) を参照するリクエストは拒否します。

例 特定の修飾 ARN の呼び出しの許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1" } ] }

ポリシーが :* を使用して任意の修飾 ARN を参照する場合、Lambda は修飾 ARN ならどれでも受け入れますが、非修飾 ARN を参照するリクエストは拒否します。

例 任意の修飾 ARN の呼び出しの許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" } ] }

ポリシーが * を使用して任意の ARN を参照する場合、Lambda はすべての修飾 ARN と非修飾 ARN を受け入れます。

例 任意の修飾または非修飾 ARN の呼び出しの許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*" } ] }

サポートされている IAM アクションと関数の動作

アクションは、IAM ポリシーを通じて許可できる操作を定義します。Lambda でサポートされるアクションのリストについては、「サービス認可リファレンス」の「AWS Lambda のアクション、リソース、および条件キー」を参照してください。ほとんどの場合、IAM アクションで Lambda API アクションを許可する場合、IAM アクションの名前は Lambda API アクションの名前と同じですが、以下の例外があります。

API アクション IAM アクション
Invoke lambda:InvokeFunction

GetLayerVersion

GetLayerVersionByArn

lambda:GetLayerVersion

「サービス認可リファレンス」で定義されているリソースと条件に加えて、Lambda では特定のアクションに対して以下のリソースと条件をサポートしています。これらの多くは、ポリシーのリソースセクションの関数の参照に関連しています。以下の表で説明されているように、関数を操作するアクションは、関数、バージョン、またはエイリアス ARN によって特定の関数に制限することができます。

アクション リソース 条件

AddPermission

RemovePermission

Invokeアクセス許可: lambda:InvokeFunction

関数のバージョン

関数のエイリアス

該当なし

UpdateFunctionConfiguration

該当なし

lambda:CodeSigningConfigArn

CreateFunctionUrlConfig

DeleteFunctionUrlConfig

GetFunctionUrlConfig

UpdateFunctionUrlConfig

関数のエイリアス

該当なし