Доступ запрещен, даже если пользователь IAM указан в политике корзины S3 - PullRequest
0 голосов
/ 01 августа 2020

Я сейчас пытаюсь использовать AWS S3. Я создал пользователя IAM без «политик разрешений». И политика сегмента S3 установлена ​​следующим образом.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SpecificIAMPermission",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/iam-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucketname",
                "arn:aws:s3:::bucketname/*"
            ]
        }
    ]
}

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

Есть ли способ получить доступ только с политикой корзины S3 без предоставления какой-либо «Политики разрешений» пользователям IAM ? Если вы что-нибудь знаете, я буду рад сообщить вам.

Спасибо!

Дополнительное описание

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SpecificIAMPermission",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucketname",
                "arn:aws:s3:::bucketname/*"
            ]
        }
    ]
}

Я могу получить доступ к данным изображения из веб-браузера, написав код, как указано выше. Однако в доступе будет отказано, если я выполню обработку PutObject в реализации на стороне сервера.

Я попытался предоставить пользователю IAM разрешение PutObjectACL, но в доступе было отказано. введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 01 августа 2020

Если вы wi sh предоставляете доступ к корзине Amazon S3 определенному c пользователю IAM, лучше прикрепить политику IAM к пользователю IAM, а не создавать политику корзины.

Обычно политика корзины используется для предоставления publi c доступа к корзине. Хотя он может предоставить доступ определенному c пользователю, он может стать беспорядочным, если пользователи будут добавлены таким образом.

Поэтому добавьте встроенную политику для пользователя IAM для предоставления доступа к корзине:

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

Обратите внимание, что это также дает пользователю IAM разрешение на удаление объектов из корзины и даже разрешение на удаление корзины. сам , поэтому вы, вероятно, захотите предоставить им меньше разрешений (например, только GetObject, PutObject и ListBucket).

Если эта политика не работает для этой конкретной корзины c, это может быть связано с тем, как объекты были созданы в корзине. Я бы порекомендовал вам поэкспериментировать, создав новый сегмент и предоставив пользователю IAM разрешения для нового сегмента. Если это работает, значит, причина проблемы не в политике, а в том, как были созданы объекты. (Сообщите нам, что вы найдете, и мы сможем вам помочь.)

1 голос
/ 01 августа 2020

Для уровня объекта и уровня отдельного сегмента вам нужно будет присоединить политику IAM к принципалу или создать политику сегмента, у которого есть разрешения для указанного c принципала (хотя для ясности, если политика сегмента не задана, вы потребуются разрешения IAM).

Однако, если вы пытаетесь получить доступ к сегменту из консоли, вы не сможете выполнить действие ListBuckets API без определенной политики c IAM.

Кроме того, другие пользователи / роли в той же учетной записи, что и бакет S3, по-прежнему смогут выполнять взаимодействия с бакетом S3, если к ним прикреплена соответствующая политика IAM, если вы не добавите в политику корзины оператор deny.

Дважды проверьте правильность принципала в политике корзины и правильность имени корзины во взаимодействии с API.

Когда вы получите 403, вам следует указать причину отказа (которая должен позволить вам найти пропущенные разрешения), имейте в виду, добавляете ли вы ACL в В то же время вам понадобится разрешение PutObjectACL.

Дополнительная информация доступна на Пользователь с разрешением на добавление объектов в мою корзину Amazon S3 получает ошибку «Доступ запрещен». Почему? стр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...