【问题标题】:How to access cross region s3 bucket by lambda using CDK Python如何使用 CDK Python 通过 lambda 访问跨区域 s3 存储桶
【发布时间】:2020-12-02 01:07:47
【问题描述】:

我在区域 A 中创建了 lambda 并在区域 B 中创建了一个 S3 存储桶,尝试从 lambda boto-3 客户端访问存储桶但出现错误(访问被拒绝)。请在 python CDK 中为此提出一些解决方案。我需要为它制定任何具体的政策吗?

【问题讨论】:

  • 你能分享一些代码吗?例如。 Lambda 执行角色长什么样?
  • Access Denied 表明问题与权限有关,而不是跨区域的事实。与 Lambda 函数关联的 IAM 角色如何获得访问区域 B 中的存储桶的权限? (这些都在同一个 AWS 账户中,对吧?)

标签: python-3.x amazon-web-services amazon-s3 boto3 aws-cdk


【解决方案1】:

您的 lambda 函数需要读取 S3 的权限

启用该功能的最简单方法是添加 AWS 托管策略:

arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

致您的lambda execution role

不需要指定区域,因为 S3 存储桶具有全局范围。

【讨论】:

    【解决方案2】:

    如果存储桶的区域名称与 lambda 不在同一区域,则您必须显式传递它的区域名称(因为 AWS 具有 S3 的区域特定端点,在使用 s3 api 时需要显式查询)。

    将您的 boto3 S3 客户端初始化为:

    import boto3
    
    client = boto3.client('s3', region_name='region_name where bucket is')
    

    查看此以获取 boto3 客户端的完整参考: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html#boto3.session.Session.client

    ---------已编辑------------ 您还需要将以下策略附加到(或内联)您的 lambda 角色:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt",
          "Action": [
            "s3:GetObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME/*"
          ]
        }
      ]
    }
    

    如果您还需要列出和删除对象,那么您需要改为使用以下策略,附加到(或内联)lambda 的角色:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ExampleStmt1",
          "Action": [
            "s3:GetObject",
            "s3:DeleteObject"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME/*"
          ]
        },
        {
          "Sid": "ExampleStmt2",
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
            "arn:aws:s3:::YOUR-BUCKET-NAME"
          ]
        }
      ]
    }
    

    【讨论】:

    • 试过这个但得到同样的错误!我需要任何具体的政策声明吗?
    • 你好@shubham,谢谢你的问题,你能分享一下你的lambda函数的政策声明吗?我可以准确地指出你需要什么。 :)
    猜你喜欢
    • 2020-10-17
    • 2022-08-05
    • 2021-06-28
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2019-01-14
    • 2021-08-02
    • 2019-01-07
    相关资源
    最近更新 更多