我本来要通过Commander One文件管理器直接复制粘贴所有内容,但事实证明这将花费很多。因为我想这算是下载然后重新上传所有内容。有人告诉我使用一个实例来代替,然后以这种方式进行传输(仍然试图弄清楚该怎么做)。但是还有其他简单的方法吗?
尝试将此策略附加到目标bukkit:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS":"arn:aws:iam::<id number here>:user/<username here>"},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<bucket to get files from>/*"
]
},
{
"Effect": "Allow",
"Principal": {"AWS":"arn:aws:iam::<id number here>:user/<username here>"},
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::<bucket to put files in>"
]
}
]
}
遇到policy has invalid resource
错误
答案 0 :(得分:3)
最简单的方法是使用同步,这很简单:
aws s3 sync s3://sourcebucket s3://destinationbucket
更多信息,请访问:https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/
您还必须调整源和目标存储桶的存储桶策略,以分别允许获取和放置。
至于成本,如果它在同一地区,则是免费的。从技术上讲,您不是将数据传输到Internet,而是将数据传输到同一区域内的另一个s3存储桶。
答案 1 :(得分:2)
您应该使用CopyObject()
命令,该命令直接在Amazon S3存储桶之间复制对象,而无需下载/上传。由于这些存储桶位于同一区域,因此唯一的花费就是几个API请求(每1000个请求0.005美元)。
最简单的方法是使用aws s3 cp
或aws s3 sync
命令使用AWS Command-Line Interface (CLI)。它将代表您呼叫CopyObject()
。例如:
aws s3 sync s3://bucket-a/folder/ s3://bucket-b/folder/
请注意,用于执行复制的凭据必须在源存储桶中具有读取权限,在目标存储桶中具有写入权限。
假设您要从Bucket-A
中的Account-A
复制到Bucket-B
中的Account-B
。可以通过以下方式完成:
User-B
的IAM用户(Account-B
)的凭据。在Bucket-A
上添加存储区策略,允许User-B
从存储区 OR User-A
的IAM用户(Account-A
)的凭据。在Bucket-A
上添加存储桶策略,允许User-A
对存储桶进行写入。复制时,请确保添加--acl bucket-owner-full-control
以将对象所有权授予Account-B
。我首选第一种选择,因为目标帐户会将文件“拉”到其自己的帐户中,因此默认情况下它拥有文件。