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

roh*_*hpr 4 python-3.x aws-lambda aws-sam aws-cdk

我使用 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()

Run Code Online (Sandbox Code Playgroud)

我想从另一个帐户调用 Lambda 函数,并希望通过附加基于资源的策略来执行此操作。

aws_cdk.aws_lambda.Function通过调用该方法可以轻松实现这一点add_permission

但是,却aws_cdk.aws_sam.CfnFunction没有add_permission办法。是否有另一种方法可以使用 SAM(带有 CDK)来实现此目的?或者我应该放弃 SAM 并直接创建 Lambda。

roh*_*hpr 5

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",
)
Run Code Online (Sandbox Code Playgroud)