使用 aws cli 從 Amazon S3 下載時導致訪問被拒絕的原因是什麼?
我真的在 AWS 中四處遊蕩,試圖弄清楚我在這裡缺少什麼。我想讓 IAM 使用者可以從 S3 儲存桶下載文件 - 而不僅僅是將文件完全公開 - 但我的訪問被拒絕。如果有人能發現發生了什麼,我會很興奮。
到目前為止我所做的:
- 創建了一個名為 my-user 的使用者(例如)
- 為使用者生成訪問密鑰並將它們放在 EC2 實例上的 ~/.aws 中
- 創建了一個我希望為我的使用者授予訪問權限的儲存桶策略
- 執行命令
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/*" } ] }
結果相同。
我也在為此苦苦掙扎,但我在這裡找到了答案https://stackoverflow.com/a/17162973/1750869幫助我解決了這個問題。在下面重新發布答案。
您不必向所有人開放權限。使用以下關於源和目標的儲存桶策略,使用 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