Lambda アクションのリソースと条件 - 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 です。

Lambda およびその他の AWS のサービスの、リソースおよび条件の詳細については、IAM ユーザーガイドアクション、リソース、および条件キーを参照してください。

関数のリソース名

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

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

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

注記

アカウント ID を照合するためにワイルドカード文字を使用することはできません。受け付けられる構文の詳細については、「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*" } ] }

関数のアクション

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

関数
[Action] (アクション) リソース 条件

AddPermission

RemovePermission

関数

関数のバージョン

関数のエイリアス

lambda:Principal

呼び出し

アクセス許可: lambda:InvokeFunction

関数

関数のバージョン

関数のエイリアス

なし

CreateFunction

UpdateFunctionConfiguration

関数

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionConfiguration

GetPolicy

ListAliases

ListVersionsByFunction

PublishVersion

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

関数

なし

GetAccountSettings

ListFunctions

ListTags

TagResource

UntagResource

*

なし

イベントソースのマッピングアクション

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

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

イベントソースマッピング
アクション リソース 条件

DeleteEventSourceMapping

UpdateEventSourceMapping

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

lambda:FunctionArn

CreateEventSourceMapping

*

lambda:FunctionArn

GetEventSourceMapping

ListEventSourceMappings

*

なし

レイヤーのアクション

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

注記

注意: GetLayerVersion アクションは GetLayerVersionByArn もカバーします。Lambda は、GetLayerVersionByArn を IAM アクションとしてサポートしていません。

レイヤー
[Action] (アクション) リソース 条件

AddLayerVersionPermission

RemoveLayerVersionPermission

GetLayerVersion

GetLayerVersionPolicy

DeleteLayerVersion

レイヤーバージョン

なし

ListLayerVersions

PublishLayerVersion

Layer

なし

ListLayers

*

なし