如何使用具有不同角色的Python从S3生产复制到S3开发?

时间:2019-01-17 15:50:40

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

我需要将文件从S3 Production(我只有读访问权限)复制到S3开发(我有写访问权限)。我面临的变化是角色的转变。 应付时,我需要使用生产者角色,而写作时,我需要使用开发者角色。

我正在尝试以下代码:

import boto3
boto3.setup_default_session(profile_name='prod_role')
s3 = boto3.resource('s3')

copy_source = {
      'Bucket': 'prod_bucket',
      'Key': 'file.txt'
    }

bucket = s3.Bucket('dev_bucket')
bucket.copy(copy_source, 'file.txt')

我需要知道如何切换角色。

1 个答案:

答案 0 :(得分:1)

在Amazon S3中的存储桶之间移动数据的最有效方法是使用resource.copy()client.copy_object()命令。这样一来,两个存储桶就可以直接通信(甚至在不同区域之间),而无需下载/上传对象本身。

但是,用于调用命令的凭据需要从源读取权限和向目标写入权限。无法为此副本提供两组不同的凭据。

因此,您应该选择一组凭据,并确保其具有适当的权限。这意味着:

  • 授予Prod凭据权限以写入目标位置,或者
  • 授予非Prod凭据权限以从Prod存储桶中读取

这可以通过创建桶策略或直接向使用的 IAM角色/用户分配权限来完成。

如果这是需要执行的常规任务,则可以考虑通过使用源存储桶上的 Amazon S3事件触发Lambda函数来自动复制文件,该函数将对象复制到非-生产目的地立即。这样可以避免以后再批量复制文件。