Jos*_*non 60 amazon-s3 aws-cli
我真的在 AWS 中挣扎,试图找出我在这里遗漏了什么。我想这样做,以便 IAM 用户可以从 S3 存储桶下载文件 - 而不仅仅是将文件完全公开 - 但我的访问被拒绝。如果有人能发现发生了什么,我会被激怒。
到目前为止我所做的:
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"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
结果是A client error (AccessDenied) occurred: Access Denied虽然我可以使用相同的命令和默认(root 帐户?)访问密钥下载。
我也尝试添加用户策略。虽然我不知道为什么有必要,但我认为它不会受到伤害,所以我将它附加到了我的用户。
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
结果一样。
小智 42
我也在为此苦苦挣扎,但我在这里找到了一个答案/sf/answers/1201408141/帮助我解决了这个问题。在下面重新发布答案。
您不必向所有人开放权限。在源和目标上使用以下存储桶策略,以便使用 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"}
}
]
}
Run Code Online (Sandbox Code Playgroud)
在 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"}
}
]
}
Run Code Online (Sandbox Code Playgroud)
要运行的命令是 s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
小智 16
当我遇到同样的问题时,结果证明 AWS 需要启用服务器端加密。所以以下命令对我来说成功了:
aws s3 cp test.txt s3://my-s3-bucket --sse AES256
Run Code Online (Sandbox Code Playgroud)
即使您的 IAM 策略设置正确,您仍然可能会收到错误,例如An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied由于凭证的 MFA(多重身份验证)要求。这些可能会让您措手不及,因为如果您已经登录 AWS 控制台,您的凭证似乎工作正常,并且来自 aws cli 的权限被拒绝错误消息并不是特别有帮助。
关于如何使用 aws cli 设置 MFA,已经有一些很好的说明:
基本上,您需要访问 MFA 设备的地址,并将其与设备中的代码一起发送以获取临时令牌。
小智 5
我不推荐 James 提到的“任何经过身份验证的 AWS 用户”选项。
这样做会添加一个存储桶级 ACL,允许任何 AWS 账户(不仅仅是您的 IAM 用户)列出/删除/修改该存储桶的 ACL。
即任何拥有 aws 帐户的人都可以公开读/写。
| 归档时间: |
|
| 查看次数: |
238243 次 |
| 最近记录: |