Операция putObject: доступ запрещен с помощью поставщика удостоверений

#amazon-web-services #amazon-s3 #oauth #amazon-iam

#amazon-web-services #amazon-s3 #oauth #amazon-iam

Вопрос:

Я использую поставщика удостоверений в AWS, который может предоставлять роль со следующей политикой пользователям, которыми он управляет.

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GiveS3Access",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::mybucket"
        }
    ]
}
  

С действительным токеном доступа на моем компьютере я могу перечислить объекты в корзине s3 (пример ниже), но я не могу поместить в нее какой-либо объект.

 ❯ aws s3 ls s3://mybucket/
                           PRE test_folder/
                           PRE home/
2020-10-07 15:22:13      57385 Image001.png
2020-10-07 15:25:20      98942 Image002.png

❯ aws s3 cp test.mp4 s3://mybucket/test.mp4
upload failed: ./test.mp4 to s3://mybucket/test.mp4 An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
  

Шифрование по умолчанию и дополнительная политика корзины отсутствуют. Файл конфигурации ( ~/.aws/config ) правильно настроен для запроса роли с GiveS3Access помощью политики (первый блок кода).

Ответ №1:

Arn в форме arn:aws:s3:::mybucket предназначен только для корзины, а не для ее объектов. Для включения загрузки / выгрузки объектов должно быть:

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GiveS3Access",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::mybucket",
                "arn:aws:s3:::mybucket/*"
            ]
        }
    ]
}
  

Однако это позволяет выполнять все операции с вашей корзиной и объектами . Пожалуйста, передумайте изменять его, чтобы следовать принципам наименьших привилегий.