使用不同的键将内容从一个 S3 存储桶复制到另一个 S3 存储桶

sac*_*024 6 copy amazon-s3 amazon-web-services

我有两个 S3 存储桶,其中包含两组不同的访问密钥和密钥。这是套装:

Bucket1, Key1, Secret1
Run Code Online (Sandbox Code Playgroud)

Bucket2, Key2, Secret2, Token
Run Code Online (Sandbox Code Playgroud)

我试图通过aws cli这样的方式触发 S3-S3 复制:

aws s3 cp s3://key1:secret1@Bucket1 s3://key2:secret2@Bucket2
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  • 我不确定如何指定令牌以提供对 bucket2 的写权限
  • 是否aws cli允许将密钥和秘密指定为 S3 Url 的一部分?

实现此用例的最佳方法是什么?

Joh*_*ein 5

要在 Amazon S3 存储桶之间复制文件,您必须使用有权访问两个存储桶的凭证,或者将存储桶策略应用于允许访问的目标存储桶。

无法指定两组凭证,因为AWS 命令​​行界面 (CLI)仅调用单个 AWS API,该API执行“从”源存储桶直接复制到目标存储桶的操作。AWS CLI 不会下载对象——它只是告诉 S3 将对象复制到另一个存储桶(甚至可以位于不同的区域)。

因此,您应该在目标存储桶上创建一个存储桶策略,以允许正在使用的凭证(用户或角色)PutObject进入目标存储桶。

该政策将类似于:

{
    "Version": "2012-10-17",
    "Id": "Policy1",
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ACCOUNT-NUMBER:role/ROLE-NAME"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::DESTINATION-BUCKET/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

以上假设是从具有指定角色的 Amazon EC2 实例调用命令。要从用户凭据调用,请使用:

"AWS": "arn:aws:iam::ACCOUNT-NUMBER:user/USER-NAME"
Run Code Online (Sandbox Code Playgroud)