AWS Lambda
開発者ガイド

Lambda アクションのリソースと条件

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

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

リソース別にアクセス許可を制限するには、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

たとえば、以下のポリシーでは、123456789012 アカウントのユーザーは、my-function という名前の関数を 米国西部 (オレゴン) で呼び出すことができます。

例 関数を呼び出す

{ "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 という名前の関数を呼び出すアクセス許可を 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 と指定します。

関数

以下の表で説明されているように、関数を操作するアクションは、関数、バージョン、またはエイリアス ARN によって特定の関数に制限することができます。リソース制限をサポートしていないアクションは、すべてのリソースにのみ付与することができます (*)。

関数

アクション リソース 条件

AddPermission

RemovePermission

関数

Function version

関数のエイリアス

lambda:Principal

Invoke

アクセス許可: lambda:InvokeFunction

関数

Function version

関数のエイリアス

なし

CreateFunction

UpdateFunctionConfiguration

関数

lambda:Layer

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionConfiguration

GetPolicy

ListAliases

ListVersionsByFunction

PublishVersion

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

関数

なし

GetAccountSettings

ListFunctions

ListTags

TagResource

UntagResource

*

なし

イベントソースマッピング

イベントソースマッピングで、アクセス許可の削除および更新は、特定のイベントソースに制限されています。lambda:FunctionArn 条件では、ユーザーが呼び出すイベントソースを設定できる関数を制限することができます。

次のポリシーでは、my-function という名前の関数を呼び出した場合にのみイベントソースマッピングを管理することをユーザーに許可します。

例 関数のイベントソースを管理する

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EventSourceMappings", "Effect": "Allow", "Action": [ "lambda:CreateEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:DeleteEventSourceMapping" ], "Resource": "*", "Condition": {"StringEquals": {"lambda:FunctionArn": "arn:aws:lambda:*:123456789012:function:my-function"}} } ] }

これらのアクションでは、リソースはイベントソースマッピングであるため、Lambda では、イベントソースマッピングで呼び出される関数に基づき、アクセス許可を制限することができる条件を提供します。

イベントソースマッピング

アクション リソース 条件

DeleteEventSourceMapping

UpdateEventSourceMapping

イベントソースマッピング

lambda:FunctionArn

CreateEventSourceMapping

*

lambda:FunctionArn

GetEventSourceMapping

ListEventSourceMappings

*

なし

レイヤー

レイヤーアクションでは、関数を使用してユーザーが管理または使用できるレイヤーを制限できます。レイヤーの使用とアクセス許可に関連するアクションはレイヤーのバージョン、PublishLayerVersion はレイヤー名に影響します。いずれも、ワイルドカードとあわせて使用して、ユーザーが操作できるレイヤーを名前で制限することができます。

次のポリシーでは、レイヤーを公開し、それらを関数と共に使用するためのユーザーアクセス許可を付与します。リソースパターンでは、レイヤーの名前が test- で開始している限り、ユーザーは、すべてのリージョンですべてのレイヤーバージョンを使用できます。

例 レイヤーポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Publish", "Effect": "Allow", "Action": [ "lambda:PublishLayerVersion" ], "Resource": "arn:aws:lambda:*:123456789012:layer:test-*" }, { "Sid": "Use", "Effect": "Allow", "Action": [ "lambda:GetLayerVersion" ], "Resource": "arn:aws:lambda:*:123456789012:layer:test-*:*" } ] }

レイヤー

アクション リソース 条件

AddLayerVersionPermission

RemoveLayerVersionPermission

GetLayerVersion

GetLayerVersionPolicy

DeleteLayerVersion

レイヤーバージョン

なし

PublishLayerVersion

レイヤー

なし

ListLayers

ListLayerVersions

*

なし