AWS::Lambda::Permission
AWS::Lambda::Permission
リソースは、関数を使用するためのアクセス許可を AWS サービスまたは別のアカウントに付与します。関数レベルでポリシーを適用したり、1 つのバージョンまたはエイリアスへのアクセスを制限する修飾子を指定したりすることができます。修飾子を使用する場合は、バージョンの完全な
Amazon リソースネーム (ARN) またはエイリアスを使用して関数を呼び出す必要があります。
別のアカウントにアクセス許可を付与するには、アカウント ID を Principal
として指定します。AWS サービスの場合、プリンシパルは、サービスによって定義されたドメイン形式の識別子 (s3.amazonaws.com
や sns.amazonaws.com
など) です。AWS のサービスの場合、関連付けられたリソースの ARN を SourceArn
として指定することもできます。ソースを指定せずにアクセス許可をサービスプリンシパルに付与した場合は、他のアカウントが Lambda 関数を呼び出すようにそのアカウントのリソースを設定する可能性があります。
このリソースにより、ステートメントが関数のリソースベースのアクセス許可ポリシーに追加されます。関数ポリシーの詳細については、「Lambda 関数ポリシー」を参照してください。
構文
AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。
JSON
{ "Type" : "AWS::Lambda::Permission", "Properties" : { "Action" :
String
, "EventSourceToken" :String
, "FunctionName" :String
, "Principal" :String
, "SourceAccount" :String
, "SourceArn" :String
} }
YAML
Type: AWS::Lambda::Permission Properties: Action:
String
EventSourceToken:String
FunctionName:String
Principal:String
SourceAccount:String
SourceArn:String
プロパティ
Action
-
プリンシパルが関数で使用できるアクション。例えば、
lambda:InvokeFunction
、lambda:GetFunction
などです。必須: はい
タイプ: 文字列
パターン:
(lambda:[*]|lambda:[a-zA-Z]+|[*])
Update requires: Replacement
EventSourceToken
-
Alexa Smart Home 関数の場合、呼び出し元によって指定される必要のあるトークン。
必須: いいえ
タイプ: 文字列
最小:
0
最大:
256
パターン:
[a-zA-Z0-9._\-]+
Update requires: Replacement
FunctionName
-
Lambda 関数、バージョン、またはエイリアスの名前。
名前の形式
-
関数名 -
my-function
(名前のみ)、my-function:v1
(エイリアス付き)。 -
関数 ARN -
arn:aws:lambda:us-west-2:123456789012:function:my-function
. -
一部の ARN -
123456789012:function:my-function
.
バージョン番号またはエイリアスを任意の形式に追加できます。完全な ARN にのみ適用される長さの制限。関数名のみを指定する場合、64 文字の長さに制限されます。
必須: はい
タイプ: 文字列
最小:
1
最大:
140
パターン:
(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?
Update requires: Replacement
-
Principal
-
関数を呼び出す AWS サービスまたはアカウント。サービスを指定する場合は、
SourceArn
またはSourceAccount
を使用して、そのサービスを使用して関数を呼び出すことができるユーザーを制限します。必須: はい
タイプ: 文字列
パターン:
.*
Update requires: Replacement
SourceAccount
-
Amazon S3 の場合、リソースを所有しているアカウントの ID。これを
SourceArn
とともに使用して、指定したアカウントによってリソースが所有されるようにします。Amazon S3 バケットは、その所有者によって削除され、別のアカウントによって再作成される可能性があります。必須: いいえ
タイプ: 文字列
パターン:
\d{12}
Update requires: Replacement
SourceArn
-
AWS サービスの場合、関数を呼び出す AWS リソースの ARN。たとえば、Amazon S3 バケットまたは Amazon SNS トピックです。
必須: いいえ
タイプ: 文字列
パターン:
arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)
Update requires: Replacement
例
クロスアカウントの呼び出し
アカウント 123456789012 に、同じテンプレートで作成された、function
という名前の関数リソースを呼び出すためのアクセス許可を付与します。
YAML
permission: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt function.Arn Action: lambda:InvokeFunction Principal: 123456789012
Amazon S3 の通知
同じテンプレートで作成された、function
という名前の関数リソースを呼び出し、bucket
という名前のバケットリソースに対する通知を処理するための Amazon S3 アクセス許可を付与します。
JSON
"s3Permission": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": { "Fn::GetAtt": [ "function", "Arn" ] }, "Action": "lambda:InvokeFunction", "Principal": "s3.amazonaws.com", "SourceAccount": { "Ref": "AWS::AccountId" }, "SourceArn": { "Fn::GetAtt": [ "bucket", "Arn" ] } } }
YAML
s3Permission: Type: AWS::Lambda::Permission Properties: FunctionName: !GetAtt function.Arn Action: lambda:InvokeFunction Principal: s3.amazonaws.com SourceAccount: !Ref 'AWS::AccountId' SourceArn: !GetAtt bucket.Arn