Amazon-S3

使用 aws cli 從 Amazon S3 下載時導致訪問被拒絕的原因是什麼?

  • February 23, 2019

我真的在 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

引用自:https://serverfault.com/questions/556077