首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CDK Python通过lambda访问跨地域s3 bucket

如何使用CDK Python通过lambda访问跨地域s3 bucket
EN

Stack Overflow用户
提问于 2020-08-12 17:41:52
回答 2查看 1.7K关注 0票数 0

我在区域A中创建了lambda,在区域B中创建了S3存储桶,试图从lambda boto-3客户端访问存储桶,但得到了一个错误(访问被拒绝).Please在python CDK中建议了一些解决方案。我是否需要为它创建任何特定的策略。

EN

回答 2

Stack Overflow用户

发布于 2020-08-12 18:52:41

如果存储桶不在与lambda相同的区域中,则必须显式传递存储桶的区域名称(因为亚马逊网络服务具有特定于区域的端点,用于S3,在使用s3应用程序接口时需要显式查询)。

将boto3 S3客户端初始化为:

代码语言:javascript
复制
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角色:

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

如果您还需要列出和删除对象,则需要将以下策略附加到(或内联)lambda角色:

代码语言:javascript
复制
{
  "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"
      ]
    }
  ]
}
票数 0
EN

Stack Overflow用户

发布于 2020-08-12 19:18:33

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

要实现这一点,最简单的方法是添加亚马逊网络服务托管策略:

代码语言:javascript
复制
arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

发送到您的lambda execution role

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63373894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档