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 コールで渡された FunctionName と比較することにより、認可の決定を下します。

特にアクセスを拒否するポリシーで、想定どおりの結果を得るには、ポリシーで正しい関数 ARN タイプを使用する必要があります。関数で Deny ステートメントを使用するためのベストプラクティスに従うことをお勧めします。

関数で Deny ステートメントを使用するためのベストプラクティス

以下の表は、Deny 効果で使用するリソースをまとめたものです。「リソース」列で、MyFunction は関数の名前であり、:1 は関数のバージョン 1 を参照し、MyAlias は関数のエイリアスの名前です。

リソースのベストプラクティス
ポリシーの目的 リソース

関数のすべてのバージョンへのアクセスを拒否する

MyFunction*

特定のエイリアスへのアクセスを拒否する

MyFunction:MyAlias、、および MyFunction

関数の特定のバージョンへのアクセスを拒否する

MyFunction:1、、および MyFunction

以下のセクションでは、ポリシーの目的別にポリシーステートメントの例を示します。

注記

アイデンティティベースのポリシーでのみ、特定の関数のリソースを拒否できます。現在、Lambda はリソースベースのポリシーでの Deny 効果をサポートしていません。

ポリシーステートメントのアクションリストには、Lambda によって定義されたアクションのうち、関数リソースに影響するものを追加できます。

すべての関数のバージョンへのアクセスを拒否する

以下のアイデンティティベースのポリシーステートメントは、lambda:GetFunctionConfiguration 関数のすべてのバージョンに対する my-function アクションへのアクセスを拒否します。関数 ARN の末尾のワイルドカード文字により、このポリシーがすべてのバージョンとエイリアスの ARN に適用されます。

例 アイデンティティベースのポリシーの例

{ "Version": "2020-07-20", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:GetFunctionConfiguration" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function*" } ] }

特定の関数のエイリアスへのアクセスを拒否する

特定のエイリアスへのアクセスを拒否するには、ポリシーでエイリアス ARN と非修飾の関数 ARN の両方を指定する必要があります。これにより、非修飾 ARN を FunctionName として、エイリアスを Qualifier として渡すことで、ユーザーに特定のエイリアスへのアクセスを禁止します。

注記

このタイプのポリシーを作成する場合、API コールから関数の非公開バージョンを参照するには、FunctionName パラメータで $LATEST サフィックスを使用して修飾 ARN を指定する必要があります。

以下のアイデンティティベースのポリシーステートメントは、lambda:InvokeFunction 関数の my-alias エイリアスに対する my-function アクションへのアクセスを拒否します。

例 アイデンティティベースのポリシーの例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenySpecificAlias", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:my-function:my-alias", "arn:aws:lambda:us-west-2:123456789012:function:my-function" ] } ] }

特定の関数のバージョンへのアクセスを拒否する

特定のバージョンへのアクセスを拒否するには、ポリシーで修飾 ARN と非修飾 ARN の両方を指定する必要があります。これにより、非修飾 ARN を FunctionName として渡し、バージョンを Qualifier として渡すことで、ユーザーに特定のバージョンへのアクセスを禁止します。

注記

このタイプのポリシーを作成する場合、API コールから関数の非公開バージョンを参照するには、FunctionName パラメータで $LATEST サフィックスを使用して修飾 ARN を指定する必要があります。

以下のアイデンティティベースのポリシーステートメントは、my-function 関数のバージョン 1 に対する呼び出しアクションへのアクセスを拒否します。

例 アイデンティティベースのポリシーの例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenySpecificFunctionVersion", "Effect": "Deny", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:my-function:1", "arn:aws:lambda:us-west-2:123456789012:function:my-function" ] } ] }

関数のアクション

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

Functions
アクション リソース 条件

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 アクションとしてサポートしていません。

Layers
アクション リソース 条件

AddLayerVersionPermission

RemoveLayerVersionPermission

GetLayerVersion

GetLayerVersionPolicy

DeleteLayerVersion

レイヤーバージョン

なし

ListLayerVersions

PublishLayerVersion

Layer

なし

ListLayers

*

なし