我真的在AWS中四处寻找,试图找出我在这里缺少的内容。我想这样做,以便IAM用户可以从S3存储桶下载文件-而不只是将文件完全公开-但是我被拒绝访问。如果有人能发现发生了什么事,那么我会很高兴的。例如)
为用户生成访问密钥,并将其放入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

评论


哦,天哪,你是我的英雄。我只是在存储桶级别缺少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

#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] .

在我没有权限的文件夹中。很傻,但是在继续之前,请确保您是文件夹的所有者!

#8 楼

当您插入无效的资源或对象名称时就会出现问题。我在boto3中遇到了相同的问题(在我的情况下,这是无效的存储桶名称)