我正在使用 CDK 使用以下代码创建 AWS SAM 函数:
#!/usr/bin/env python3
from aws_cdk import core
from aws_cdk.aws_sam import CfnFunction
from aws_cdk.aws_iam import PolicyStatement, ServicePrincipal, PolicyDocument, Policy
import random
principal = ServicePrincipal("arn:aws:iam::111111111111:role/rolename")
app = core.App()
stack = core.Stack(app, "cdk-test")
fn = CfnFunction(
stack,
id=f"CfnFn{str(random.randrange(1000, 1000000))}",
**{
"handler": "handler",
"runtime": "python3.8",
"memory_size": 256,
"timeout": 10,
"code_uri": "code_uri"
}
)
app.synth()
我想从另一个帐户调用 Lambda 函数,并希望通过附加 resource based policy 来执行此操作。
这可以通过调用 add_permission
方法使用 aws_cdk.aws_lambda.Function
本身轻松实现。
然而,aws_cdk.aws_sam.CfnFunction
没有 add_permission
方法。有没有另一种方法可以使用 SAM(使用 CDK)来实现这一点?或者我应该把 SAM 抛在脑后,转而直接创建 Lambda。
答案 0 :(得分:0)
这可以在使用 AWS::Lambda::Permission
的 aws_cdk.aws_lambda.CfnPermission
的帮助下完成。
from aws_cdk import aws_lambda
aws_lambda.CfnPermission(
scope,
"CrossAccountInvocationPermission",
action="lambda:InvokeFunction",
function_name="FunctionName",
principal="arn:aws:iam::111111111111:role/rolename",
)