Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 S3在不同帐户的存储桶之间移动文件?_Amazon S3_S3cmd - Fatal编程技术网

Amazon s3 S3在不同帐户的存储桶之间移动文件?

Amazon s3 S3在不同帐户的存储桶之间移动文件?,amazon-s3,s3cmd,Amazon S3,S3cmd,我正在为一个拥有两个独立AWS账户的客户做一些工作。我们需要将其中一个S3帐户上存储桶中的所有文件移动到第二个帐户上的新存储桶中 我们认为s3cmd将允许使用以下格式: s3cmd cp s3://bucket1 s3://bucket2 --recursive 然而,这只允许我使用一个帐户的密钥,我不能指定第二个帐户的帐户 有没有办法在不下载文件并再次上传到第二个帐户的情况下做到这一点?AWS内的带宽不算数,因此只要存储桶位于同一区域,您就可以从AWS内的一个盒子中完成这一切,从而节省一些金

我正在为一个拥有两个独立AWS账户的客户做一些工作。我们需要将其中一个S3帐户上存储桶中的所有文件移动到第二个帐户上的新存储桶中

我们认为s3cmd将允许使用以下格式:

s3cmd cp s3://bucket1 s3://bucket2 --recursive
然而,这只允许我使用一个帐户的密钥,我不能指定第二个帐户的帐户


有没有办法在不下载文件并再次上传到第二个帐户的情况下做到这一点?

AWS内的带宽不算数,因此只要存储桶位于同一区域,您就可以从AWS内的一个盒子中完成这一切,从而节省一些金钱和时间

至于不把文件放在某个地方的电脑上就这样做——别这么认为


除此之外:由于他们会从您发送给他们的硬盘进行批量上传,他们可能会对您进行桶到桶的传输

我建议使用cloudberry s3 explorer,作为一个简单的解决方案,让事情快速进展。它还允许您使用内部aws无带宽传输服务

您还可以使用cloudberry sdk工具集成到您的应用程序中

祝你好运
乔恩

好的,找到了答案。可能还有其他方法可以做到这一点,但这很容易

我可以用s3cmd实用程序来实现这一点,但也可以用类似的工具来实现

配置s3cmd时,请使用您的帐户访问密钥和机密访问密钥进行配置

使用要转移到的bucket的帐户登录S3 web控制台

访问S3Web控制台

https://console.aws.amazon.com/s3/home
单击您的bucket,然后单击操作,然后单击属性

在底部的“权限”选项卡下,单击“添加更多权限”

要转移,请从终端运行

s3cmd cp s3://from_account_bucket s3://to_account_bucket --recursive
传输完成后,您应该立即再次访问S3控制台并删除为bucket添加的权限

这里显然存在安全问题。我们要转移到的桶对所有人开放。有人找到你的名字的机会很小,但确实存在

您可以使用bucket策略作为仅开放特定帐户访问权限的替代方法,但这对我来说太难了,所以我将其作为练习留给需要了解这一点的人


希望这有帮助。

您不必向所有人打开权限。在源和目标上使用以下Bucket策略,以便使用IAM用户从一个帐户中的Bucket复制到另一个帐户

  • 要从中复制的存储桶:
    SourceBucket

  • 要复制到的存储桶:
    DestinationBucket

  • 源AWS帐户ID:
    XXXX–XXXX-XXXX

  • 源IAM用户:
    src–IAM用户

以下政策意味着–IAM用户--
XXXX–XXXX-XXXX:src–IAM用户
拥有
s3:ListBucket
s3:GetObject
在SourceBucket/*上的特权
s3:ListBucket
s3:PutObject
DestinationBucket/*
上的特权

在SourceBucket上,策略应类似于:

{
  "Id": "Policy1357935677554",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:GetObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}
在DestinationBucket上,策略应为:

{
  "Id": "Policy1357935677555",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:PutObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}

要运行的命令是
s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
即使角色和策略是一种非常优雅的方式,我还有另一种解决方案:

  • 获取源帐户的AWS凭据
  • 目的地帐户也一样
  • 在本地计算机(桌面或AWS以外的任何服务器)上,使用源Bucket帐户的凭据创建新配置文件

    aws--配置文件${您的自定义配置文件}配置

  • 填写aws_access_key_id和aws_secret_access_key(您可以跳过区域并输出)

  • 将目标存储桶凭据保存为环境变量

    导出AWS\u访问\u密钥\u ID=AKI

    导出AWS\u SECRET\u ACCESS\u KEY=CN

  • 现在进行同步,但添加关键的“profile”参数

    aws--profile${YOUR_CUSTOM_profile}s3 sync s3://${SOURCE_BUCKET_NAME}s3://${DESTINATION_BUCKET_NAME}


  • 谢谢你,汤姆。看来就是这样。从一个实例开始做这件事似乎也是一个很好的方法。谢谢你的提示。对不起,安全漏洞是-1。这绝对不是一个好的实践-这是一个大的黑客。可怕的,不是必需的黑客。s3已经为您提供了Bucket策略功能来创建源/目标策略,以便以安全的方式将源同步到目标。工作非常出色。谢谢如果我想将此文件夹/文件下载到我的本地计算机上怎么办?如果这些存储桶位于不同的区域怎么办?3存储桶是全局的,而不是特定于区域的。呸..也帮了我。IAM政策很棘手。我的场景是创建一个sns主题,并将该主题作为sns事件侦听器添加到来自不同帐户的s3存储桶中。必须为s3 bucketRef上的IAM用户(来自sns acct)添加bucket策略:在两个不同的帐户之间复制/移动:如果源bucket和目标bucket的凭据不同,我是否可以执行s3同步?
    {
      "Id": "Policy1357935677555",
      "Statement": [{
        "Sid": "Stmt1357935647218",
        "Action": ["s3:ListBucket"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
      }, {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
      }]
    }