为用户生成访问密钥,并将其放入EC2实例上的〜/ .aws中。命令
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
桶策略: root帐户?)访问密钥。
我也尝试添加用户策略。虽然我不知道为什么有必要这样做,但我认为这不会造成伤害,所以我将其附加到了我的用户上。 />
#1 楼
我也为此而苦苦挣扎,但是我在这里找到了答案https://stackoverflow.com/a/17162973/1750869为我解决了这个问题。在下面重新发布答案。您不必向所有人开放权限。使用以下针对源和目标的存储桶策略,使用IAM用户将存储桶从一个帐户中的存储桶复制到另一个帐户
要从–复制到– DestinationBucket
源AWS账户ID-XXXX–XXXX-XXXX
源IAM用户-src–iam-user
以下策略表示– IAM用户-XXXX–XXXX-XXXX:src–iam用户在SourceBucket / *上具有s3:ListBucket和s3:GetObject特权,在DestinationBucket / *上具有s3:ListBucket和s3:PutObject特权在
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": "Policy1357935677554",
"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
#2 楼
当我遇到相同的问题时,事实证明AWS需要启用服务器端加密。因此,以下命令对我而言已成功运行:aws s3 cp test.txt s3://my-s3-bucket --sse AES256
评论
谢谢!在我的情况下,--sse aws:kms使用存储桶“默认” ...
–迈克尔·柳(Michael Yoo)
18年7月2日在2:08
如果您使用非默认的KMS密钥,则还需要传递该密钥:--sse-kms-key-id 0123-abc-etc但是,尚不清楚的部分是使用您自己的KMS密钥您必须具有IAM许可kms:GenerateDataKey,否则您仍将被拒绝访问。
– digarok
19 Mar 28 '19 at 13:48
问题是关于下载..您正在将文件上传到加密的S3,因此需要密钥。
–Ilhicas
19年8月23日在12:02
gd该死的它AWS!为什么他们为什么要对人们这样做,在存储桶上启用加密应该是内部的事情,所以需要传递--sse aws:kms太愚蠢了,但是却给出错误的CopyObject操作:Access Denied b / c not pass这个参数太荒谬了
– bjm88
20 Sep 25'3:25
#3 楼
我不建议James提到“任何经过身份验证的AWS用户”选项。修改该存储桶的acl。即具有aws帐户的任何人的公共读/写。
评论
你测试过了吗?我给人的印象是AWS账户实际上是指与我的组织有关的任何实体-即用户,EC2实例,IAM角色,但不是来自其他账户的人。我可能是错的,如果是这样,我会编辑我的文稿并快速审核我的存储桶。谢谢。
–詹姆斯·邓莫(James Dunmore)
16年7月20日在10:15
对。 S3 ACL中的“授权用户”被授权者是指所有AWS账户。它执行已签名的请求,但仅此而已。参考:链接
–安德鲁(Andrew)
16 Jul 21'11:53
#4 楼
我设法解决了这一问题,而无需编写策略-从S3控制台(Web ui)中选择了存储段,然后在权限选项卡中选择了“任何经过身份验证的AWS用户”,并对所有复选框进行了标记。 :如评论中指出的那样,“任何经过身份验证的AWS用户”不仅是您帐户中的用户,而且还包括所有经过AWS身份验证的用户,请谨慎使用评论
我想这正在为您制定政策。勾选所有框将为您提供ListBucket等。
–乔什·加格农(Josh Gagnon)
16 Mar 1 '16 at 16:28
我确定是的-我只知道撰写政策可能会很痛苦,这些复选框可能会给您带来更多好处,但可以快速解决
–詹姆斯·邓莫(James Dunmore)
16 Mar 2 '16 at 17:30
#5 楼
即使您的IAM策略设置正确,由于凭据上的MFA(多重身份验证)要求,您仍然会收到类似An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
的错误。这些可以使您措手不及,因为如果您已经登录到AWS控制台,则看来您的凭证运行良好,并且来自aws cli的权限被拒绝错误消息不是特别有用。 关于如何使用aws cli设置MFA,已经有一些很好的说明:
AWS-使用MFA令牌对AWS CLI进行身份验证
堆栈溢出-如何将MFA与AWS CLI一起使用?
基本上,您需要获取MFA设备的地址,并将其与设备中的代码一起发送以获取临时地址令牌。
评论
你救了我的兄弟!
–shintaroid
18-10-16在6:45
是的,这就是原因!为什么AWS在输出中没有显示此原因?
–tommy.qichang
18年11月30日在17:34
#6 楼
我只是简单地进入webUI并单击存储桶,然后进入权限然后进入策略。当我打开它时,我只是单击删除。我这样做的原因是我认为它也是配置。即使我通过aws-cli使用
$ aws s3 rb s3://bucket-name --force
做到这一点,无论如何,这对我来说很奏效。权限政策禁止您删除存储桶。
#7 楼
一旦我通过尝试运行以下错误得到此错误:aws s3 cp s3://[bucketName]/[fileName] .
在我没有权限的文件夹中。很傻,但是在继续之前,请确保您是文件夹的所有者!
评论
哦,天哪,你是我的英雄。我只是在存储桶级别缺少ListBucket许可。我仍然不知道为什么我需要通过ls bucket来从中存储对象,但这没关系。也许这只是使用aws命令的怪癖?
–乔什·加格农(Josh Gagnon)
13年20月20日,0:03
是的,这很奇怪。您会认为拥有一个s3:*策略(尽管可能是不安全的)足以进行健全性测试。
–塞尔吉奥
13年20月20日在16:44
fml,该ListBucket权限浪费了2天。接得好
–chaqke
2015年7月9日在1:50
花了很多时间。.这是需要的答案。 ListBucket-存储桶名称,GetObject-存储桶名称/ *
–rsmoorthy
16年7月24日在2:53
我对AWS相当陌生,并且使用的是Windows,因此花了我一段时间才能正确设置值并在系统上使用s3cmd。对于那些同样的问题。然后,对于src–iam-user,请转到aws> IAM>用户>用户ARN,对于DestinationBucket和SourceBucket,请转到aws> s3>单击存储桶列表>您将获得所需的值。对于s3cmd设置,请遵循以下步骤:tecadmin.net/setup-s3cmd-in-windows
–巴努
20年1月5日,17:32