【问题标题】:Need help for AWS lambda需要有关 AWS lambda 的帮助
【发布时间】:2021-05-15 11:42:29
【问题描述】:

我正在解决一个问题,我需要 Lambda 将日志写入 S3 存储桶,但这里棘手的部分是,Lambda 将读取日志并写入另一个 AWS 账户中的另一个 s3 存储桶。我们能做到吗?

我写了一些代码,但它不起作用。

from urllib.request import urlopen
import boto3
import os
import time

  BUCKET_NAME = '***'

  CSV_URL = f'***'

  def lambda_handler(event, context):
    response = urlopen(CSV_URL)
    s3 = boto3.client('s3')
    s3.upload_fileobj(response, BUCKET_NAME, time.strftime('%Y/%m/%d'))
    response.close()

【问题讨论】:

  • 那么,您基本上是在问如何允许 Lambda 函数在属于不同 AWS 账户的 Amazon S3 存储桶中创建对象?

标签: python-3.x amazon-web-services amazon-s3 logging aws-lambda


【解决方案1】:

听起来您在问如何允许 Lambda 函数在属于不同 AWS 账户的 Amazon S3 存储桶中创建对象。

目标存储桶的存储桶策略

最简单的方法是要求目标存储桶的所有者(即在该其他 AWS 账户中具有管理员权限的人)添加允许 PutObject 访问 IAM 的 存储桶策略 AWS Lambda 函数使用的角色。您需要向他们提供 Lambda 函数使用的 IAM 角色的 ARN。

此外,请确保 IAM 角色已获得写入目标存储桶的权限。请注意,需要两组权限:需要允许 IAM 角色写入另一个账户中的存储桶,并且存储桶需要允许 IAM 角色访问。这双重权限集是必需的,因为访问两个帐户都需要允许此访问。

可能您可能需要授予一些额外的权限,例如PutObjectACL

从目标账户担任 IAM 角色

另一种方法(而不是使用存储桶策略)是:

  • 在目标账户中创建一个 IAM 角色并授予其访问存储桶的权限
  • 授予信任权限,以便允许 Lambda 函数使用的 IAM 角色“代入”目标账户中的 IAM 角色
  • 在 Lambda 函数中,使用 AssumeRole() API 调用从目标账户获取凭证
  • 在连接到 S3 时使用这些凭据,这将允许您访问其他账户中的存储桶

坦率地说,创建存储桶策略要容易得多。

【讨论】:

  • 嗨,John,我一定会解决的,看起来创建存储桶策略要容易得多且直接。还有一点,John,如果 Lambda 位于其中一个自定义 VPC 中怎么办?
  • Lambda 函数的“位置”无关紧要。重要的是 Lambda 函数使用的凭证。
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 2015-06-23
  • 2014-12-26
  • 2013-08-12
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多