我有一个AWS帐户(account_a
),该帐户的S3存储桶(bkt_a
)包含文件:file1
。
该帐户具有access_key(access_key_A
)和secret_key(secret_key_a
)。
我也有一个带有存储桶(account_b
)的AWS账户(bkt_b
)。
该帐户具有access_key(access_key_b
)和secret_key(secret_key_b
)。
我想将file1
中的bkt_a
复制到file1_processed
中的bkt_b
。
我只想使用 python boto3 来做到这一点,因为我不想使用shell命令(带有CLI复制的OS命令)。
我该怎么做?调用boto3 S3客户端/资源时如何使用两个访问密钥和秘密密钥?
我很高兴获得一些代码行。
答案 0 :(得分:0)
我将创建两个单独的s3客户端,每个帐户一个,并根据您的要求与它们进行接口。
import boto3
client_a = boto3.client(
's3',
aws_access_key_id='<access_key_A>',
aws_secret_access_key='<secret_key_a>'
)
client_b = boto3.client(
's3',
aws_access_key_id='<access_key_b>',
aws_secret_access_key='<secret_key_b>'
)
// client_a read from bkt_a
// client_b write to bkt_b
当然,重要的是要记住,您使用的凭据是针对附加了适当的S3策略的IAM用户/角色的。
注意-将凭据直接放置在代码中通常是一个糟糕的决定,尤其是当您将代码放入共享的源代码存储库中时。我建议将这些值传递给您的python脚本,或者从安全的位置读取。
答案 1 :(得分:0)
复制这些对象的最佳方法是使用一组有权读取bkt_a
并写入bkt_b
的凭据。这样可以使用copy_object()
,它将直接在两个存储桶之间复制文件,而无需下载和上传。
最简单的实现是:
account_b
中的一组凭据(例如IAM角色),该凭据有权写入bkt_b
bkt_a
添加存储桶策略,以允许从bkt_a
读取这些凭据(这可以是临时策略,可以在复制后删除)。 / li>
bkt_a
复制到bkt_b
ACL='bucket-owner-full-control'
授予bkt_b
新对象的所有权(如果使用account_b
凭据可能不是必需的,但是如果使用account_a
凭据则肯定是必要的)如果您无法安排一组凭据同时具有A-Read和B-Write权限,那么您将需要下载和上载每个对象,这是次优的。