【问题标题】:Python: Syncing between two s3 buckets in different accounts when I can't modify the source bucketPython:当我无法修改源存储桶时,在不同账户中的两个 s3 存储桶之间进行同步
【发布时间】:2019-08-13 05:28:22
【问题描述】:

这是一个与此类似的问题:Is it possible to copy between AWS accounts using AWS CLI? 不同之处在于,我想在 python 代码中执行此操作,并且我无法更改源存储桶中的 s3 存储桶策略(它属于第 3 方)。我确实拥有两个存储桶的凭据。

如何在 python 代码中在这两个存储桶之间运行同步命令?

【问题讨论】:

    标签: python amazon-web-services amazon-s3


    【解决方案1】:

    要在不同账户的 Amazon S3 存储桶之间直接复制(例如使用CopyObject)对象,您需要使用一组凭证,它们具有:

    • 对源存储桶的读取权限
    • 目标存储桶的写入权限

    这些凭据可以来自任一帐户。但是,由于您无法更改源存储桶上的存储桶策略以引用来自您的账户的凭据,因此您需要使用他们提供给您的凭据。

    假设场景是:

    • 来源是Bucket-A in Account-A
    • 目的地是Bucket-B in Account-B
    • 您拥有来自 Account-A 的 IAM 凭证——我们称之为 User-A
    • User-A 有权读取 Bucket-A

    你需要:

    • Bucket-B 添加Bucket Policy,允许User-A 写入bucket (PutObject)
    • 执行复制时,指定"ACL": "bucket-owner-full-control",这将使对象归目标帐户所有。没有这个,对象将继续由Account-A“拥有”,即使它位于Account-B拥有的存储桶中

    最后,请注意 boto3 本身并不提供sync 命令。您将负责所有同步逻辑,一次复制一个对象。

    【讨论】:

    • 它们是用户凭据
    • 这是非常好的信息:CLI,但我如何在 python 中做到这一点?
    • 更新为特定于 boto3 而不是 AWS CLI。
    【解决方案2】:

    在 Python 中执行,像这样调用 AWS CLI

    import subprocess
    
    cmd='aws s3 sync s3://mybucket s3://mybucket2' 
    push=subprocess.Popen(cmd, shell=True, stdout = subprocess.PIPE)
    print push.returncode
    
    

    或者差不多。 :-) 无论您从哪里运行它,比如 EC2 实例,请确保它的用户或角色具有访问两个存储桶的有效权限。

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 2020-07-24
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      相关资源
      最近更新 更多