简体   繁体   English

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

[英]How to add a resource based policy to a Lambda function created using AWS SAM via AWS CDK?

I am using CDK to create AWS SAM functions using the following code:我正在使用 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()

I would like to invoke the Lambda function from another account, and would like to do this by attaching a resource based policy .我想从另一个帐户调用 Lambda function,并希望通过附加基于资源的策略来执行此操作。

This is easily achievable using aws_cdk.aws_lambda.Function itself by calling the add_permission method.这很容易通过调用add_permission方法使用aws_cdk.aws_lambda.Function本身来实现。

However, aws_cdk.aws_sam.CfnFunction does not have an add_permission method.但是, aws_cdk.aws_sam.CfnFunction没有add_permission方法。 Is there an another way to achieve this using SAM (with CDK)?是否有另一种方法可以使用 SAM(使用 CDK)来实现这一点? Or should I just leave SAM behind and switch to creating Lambda's directly.或者我应该把 SAM 抛在脑后,转而直接创建 Lambda。

This can be done achieved with the help of AWS::Lambda::Permission using aws_cdk.aws_lambda.CfnPermission .这可以在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",
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 aws cdk 将值传递给 lambda 自定义资源 - aws cdk passing values to a lambda custom resource 如何使用 AWS CDK 将阶段变量传递给 api 网关中的 lambda 函数? - How to pass a stage variable to lambda function in api gateway using AWS CDK? 如何构建、package 和部署 AWS SAM lambda function 从 azure Devops CI/CD 管道到 AWS - how to build, package and deploy AWS SAM lambda function of python from azure Devops CI/CD pipeline to AWS 如何使用 AWS CDK 中的 InvokeLambda 将 JSON 传递给 AWS StepFunction 中的 lambda - How do I pass JSON to lambda in AWS StepFunction using InvokeLambda in AWS CDK AWS SAM 计划 Lambda 未按计划触发 - AWS SAM Schedule Lambda is not triggering as per Schedule 使用 Rest API 和 Lambda Function 集成部署 CDK 堆栈时出错 (AWS CDK 2 Python API) - Error deploying a CDK stack with a Rest API with a Lambda Function Integration (AWS CDK 2 Python API) 为什么使用 AWS Lambda 层与 AWS SAM 部署 package 时存在大小差异 - Why is there a size difference when using the AWS Lambda layers vs AWS SAM deployment package 通过 MS 团队触发 AWS Lambda 函数 - trigger AWS Lambda function via MS teams 如何通过 AWS Lambda ZC1C425268E17985D1AB5074 对 AWS SageMaker 上托管的 keras model 进行推断? - How to make inference to a keras model hosted on AWS SageMaker via AWS Lambda function? 如何使用python在aws lambda中添加ping模块 - How to add ping module in aws lambda using python
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM