【问题标题】:How to add a resource based policy to a lambda using AWS SAM如何使用 AWS SAM 将基于资源的策略添加到 lambda
【发布时间】:2020-10-14 02:28:36
【问题描述】:

我想使用 AWS SAM 为一些 lambda 函数创建一个部署脚本。其中两个功能将部署到一个账户(账户 A)中,但将由第二个账户(账户 B)中的 s3 存储桶对象创建事件触发。据我所知,唯一的方法是向我的 lambda 添加基于资源的策略。但我不知道如何在 AWS SAM 中做到这一点。我当前的 yaml 文件如下所示。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  deploy-test-s3-triggered-lambda

Parameters:
  AppBucketName:
    Type: String
    Description: "REQUIRED: Unique S3 bucket name to use for the app."

Resources:
  S3TriggeredLambda:
    Type: AWS::Serverless::Function
    Properties: 
      Role: arn:aws:iam::************:role/lambda-s3-role
      Handler: src/handlers/s3-triggered-lambda.invokeAPI
      CodeUri: src/handlers/s3-triggered-lambda.js.zip
      Runtime: nodejs10.x
      MemorySize: 128
      Timeout: 60
      Policies:
        S3ReadPolicy:
          BucketName: !Ref AppBucketName
      Events:
        S3NewObjectEvent:
          Type: S3
          Properties:
            Bucket: !Ref AppBucket
            Events: s3:ObjectCreated:*
  AppBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref AppBucketName

我需要在这个 yaml 文件中添加什么才能绑定基于资源的策略,允许跨账户访问我的 lambda 函数?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda yaml aws-sam


    【解决方案1】:

    这可以在AWS::Lambda::Permission 的帮助下使用aws_cdk.aws_lambda.CfnPermission 来实现。

    例如,要允许从另一个帐户中的角色调用您的 lambda,请将以下内容添加到您的 CDK:

    from aws_cdk import aws_lambda
    
    aws_lambda.CfnPermission(
        scope,
        "CrossAccountInvocationPermission",
        action="lambda:InvokeFunction",
        function_name="FunctionName",
        principal="arn:aws:iam::111111111111:role/rolename",
    )
    

    【讨论】:

      【解决方案2】:

      如果您的存储桶和您的 Lambda 函数存在于不同的账户中,我不知道是否可以从 SAM/单个 CloudFormation 模板修改它们。

      【讨论】:

      • 不是,但您可以手动编辑 s3 并将策略添加到 lambda 的 SAM 模板中(或者至少这是目标)
      【解决方案3】:

      不要认为 SAM 可以进行跨账户 s3 事件,可能需要返回 CFN。

      【讨论】:

        猜你喜欢
        • 2023-01-27
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 2019-12-05
        • 1970-01-01
        • 2021-09-15
        相关资源
        最近更新 更多