我需要将文件从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')
我需要知道如何切换角色。
答案 0 :(得分:1)
在Amazon S3中的存储桶之间移动数据的最有效方法是使用resource.copy()
或client.copy_object()
命令。这样一来,两个存储桶就可以直接通信(甚至在不同区域之间),而无需下载/上传对象本身。
但是,用于调用命令的凭据需要从源读取权限和向目标写入权限。无法为此副本提供两组不同的凭据。
因此,您应该选择一组凭据,并确保其具有适当的权限。这意味着:
这可以通过创建桶策略或直接向使用的 IAM角色/用户分配权限来完成。
如果这是需要执行的常规任务,则可以考虑通过使用源存储桶上的 Amazon S3事件触发Lambda函数来自动复制文件,该函数将对象复制到非-生产目的地立即。这样可以避免以后再批量复制文件。