Ошибка клиента (403) при загрузке файла из AWS S3 в локальный файл

#amazon-web-services #ubuntu #amazon-s3 #aws-cli

#amazon-web-services #ubuntu #amazon-s3 #aws-cli

Вопрос:

Некоторое время назад я загрузил несколько ZIP-файлов в корзину AWS S3 с помощью командной строки AWS. Теперь я не могу загрузить эти файлы при использовании следующей команды:

 aws s3 cp s3://mybucket/test.zip test2.zip
  

поскольку это приводит к следующей ошибке:

 A client error (403) occurred when calling the HeadObject operation: Forbidden
Completed 1 part(s) with ... file(s) remaining
  

Как я могу решить эту проблему?

Редактировать:

Выполнение следующей команды показывает существующие политики корзины

 aws s3api get-bucket-policy --bucket mybucket
  

 {
    "Policy": "{"Version":"2012-10-17","Statement":[{"Sid":"Example permissions","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::221234567819:root"},"Action":["s3:ListBucket","s3:GetBucketLocation"],"Resource":"arn:aws:s3:::mybucket"},{"Sid":"Examplepermissions","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::221234567819:root"},"Action":["s3:PutObject","s3:AbortMultipartUpload","s3:PutObjectAcl","s3:GetObject","s3:DeleteObject","s3:GetObjectAcl","s3:ListMultipartUploadParts","s3:PutObjectAcl"],"Resource":"arn:aws:s3:::mybucket/*"}]}"
}
  

Ответ №1:

Скорее всего, это одна из трех причин:

  1. либо одна из ваших политик не разрешает вам читать ресурсы (да, можно иметь разрешения на запись, но не права на чтение), либо
  2. что ваша клиентская среда больше не настроена с правильными учетными данными.
  3. у вас нет разрешения ListBucket, и файл отсутствует (он возвращает 403 вместо 404, как будто у вас нет ListBucket, вы не сможете определить, существует файл или нет).

Для 1 объекты S3 могут быть защищены с помощью политик корзины, пользовательских политик или списков управления доступом, и между ними 3 существуют сложные взаимодействия. См. http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html для получения более подробной информации.

Если вы обновите свой вопрос подробными сведениями о соответствующих пользовательских политиках, политиках корзины и списках управления доступом, я мог бы взглянуть и посмотреть, объясняет ли что-нибудь этот симптом.

Редактировать:

Просматривая включенную политику корзины, похоже, что она привязана к корневому участнику. Используете ли вы учетные данные root для командной строки aws s3? Если вы используете пользователя IAM, вам потребуется изменить принципала (см. http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html)

Комментарии:

1. Я включил текущие пользовательские политики в качестве редактирования своего вопроса.

2. Добавлена третья причина получения 403 и некоторые мысли после ознакомления с политикой.

Ответ №2:

Добавьте "arn:aws:s3:::your-bucket-name" вместе с "arn:aws:s3:::your-bucket-name/*" to Recourses в свою политику. Кроме того, вам может потребоваться неочевидное "s3:ListBucket" разрешение и, возможно, некоторые другие разрешения.

Моя политика, которая работает для загрузки файлов в лямбда-функции:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::XXXXX-pics",
                "arn:aws:s3:::XXXXX-pics/*"
            ]
        }
    ]
}
  

Он привязан к роли лямбда-функции. Политика корзины, прикрепленная к корзине, не требовалась.