如何将基于资源的策略添加到通过 AWS CDK 使用 AWS SAM 创建的 Lambda 函数?

时间:2021-06-10 10:30:23

标签: python-3.x aws-lambda aws-cdk aws-sam

我正在使用 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。

1 个答案:

答案 0 :(得分:0)

这可以在使用 AWS::Lambda::Permissionaws_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",
)