我真的在AWS中徘徊,试图找出我在这里失踪的东西。 我想使它成为一个IAM用户可以从S3存储桶下载文件 – 而不是只是使文件完全公开 – 但我得到访问被拒绝。 如果任何人都可以发现什么closures,我会兴奋。
到目前为止我所做的是:
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
时段策略:
{ "Id": "Policy1384791162970", "Statement": [ { "Sid": "Stmt1384791151633", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::my-bucket/*", "Principal": { "AWS": "arn:aws:iam::111122223333:user/my-user" } } ] }
结果是A client error (AccessDenied) occurred: Access Denied
虽然我可以使用相同的命令和默认(root帐户)访问键下载。
我也尝试添加用户策略。 虽然我不知道为什么这是必要的,我认为它不会受到伤害,所以我把它附加到我的用户。
{ "Statement": [ { "Sid": "Stmt1384889624746", "Action": "s3:*", "Effect": "Allow", "Resource": "arn:aws:s3:::my-bucket/*" } ] }
相同的结果。
我也在为此苦苦挣扎,但是我在这里find了一个解决这个问题的答案https://stackoverflow.com/a/17162973/1750869 。 重新下面的答案。
您不必向每个人开放权限。 在源和目标上使用以下Bucket策略,使用IAM用户从一个帐户中的存储桶复制到另一个帐户
从 – SourceBucket复制桶
桶复制到 – DestinationBucket
源AWS账户ID – XXXX-XXXX-XXXX
源IAM用户 – src-iam-user
以下策略意味着IAM用户XXXX-XXXX-XXXX:src-iam-user在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
我不会推荐James提到的“任何经过身份validation的AWS用户”选项。
这样做会添加一个存储区级别的ACL,允许任何AWS账户(不仅仅是您的IAM用户)为该存储区列出/删除/修改acls。
即对任何拥有aws账户的人来说公开读/写。
我设法解决这个问题,而不必写政策 – 从S3控制台(networking用户界面)我select了存储桶,并在权限选项卡中select“任何经过身份validation的AWS用户”和门票的所有框。
更新:正如在评论中指出的“任何经过身份validation的AWS用户”不仅仅是您帐户中的用户,它是所有AWSauthentication的用户,请谨慎使用
即使您的IAM策略设置正确,仍可以An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
如下An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
由于证书的MFA(多重身份validation)要求, An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
。 这些可以抓住你的警惕,因为如果你已经login到AWS控制台,它会出现你的凭据工作正常,并从aws cli拒绝错误信息的权限并不特别有用。
关于如何使用aws cli设置MFA,有一些很好的说明:
基本上,您需要获得MFA设备的地址,并使用设备中的代码发送该代码以获取临时令牌。
当我遇到同样的问题时,事实certificate,AWS需要启用服务器端encryption。 所以下面的命令为我成功地工作:
aws s3 cp test.txt s3://my-s3-bucket --sse AES256
我只是简单地走在webUI上,点击了桶,然后去权限,然后去政策。 当我打开它,我只是点击删除。 我这样做,我认为这也是configuration。
我回到主页s3页面,然后点击存储桶,试图删除它,它的工作。
即使我是通过aws-cli使用的
$ aws s3 rb s3://bucket-name --force
无论如何,那是对我有用的东西。 权限策略阻止您删除存储桶。