如何使用 lambda 函数和 Cloudformation 访问 S3 端点

问题描述

快速概览,我正在构建一个 cloudformation 模板,其中包含:

专有网络

IGW

公共子网

私有子网

NATGateway

路由表

S3 存储桶

数据库

lambda 函数

其中一个 lambda 函数是从 API 中提取数据并将其发送到 S3 存储桶。我的问题是如何授予此 lambda 函数执行其工作的权限,而不授予它访问 IAM 中的 S3 的权限。但是,改为编写一个仅允许该 lambda 函数访问 S3 的存储桶策略?

  S3:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "some-random-bucket"

  S3BucketPolicy:
    Type: AWS::S3::BucketPolicy
    DependsOn: S3
    Properties:
      Bucket: !Ref S3
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          Action:
            - 's3:PutObject'
          Effect: Allow
          Resource: "arn:aws:s3:::some-random-bucket/*"
          Principal: 'arn:aws:lambda:REGION:ACCOUNT-NUMBER:function:lambda_function_1'

我创建的 S3 Endpoint 如下:

  S3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal: "*"
            Action: "s3:PutObject"
            Resource:
              Fn::ImportValue: !Sub S3Id
      ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3'
      VpcId: !Ref VPC

我已尝试更改 S3BucketPolicy 和 S3Endpoint 中的主体。但是,我似乎无法获得发送到 S3 的正确权限。

我也将 S3BucketPolicy 中的主体更改为“*”

这允许我的 lambda 函数写入 S3。但是,我只想限制对 lambda 函数的访问

所以 '*' 最终在这里对我不起作用。

如果我能对此有所了解,将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)