S3-ведро. Произошла неизвестная ошибка: Действие не применяется ни к одному ресурсу(ам) в выражении. Как создать политику s3-bucket?

Я пытаюсь следовать следующему руководству: https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html, но получил «Неизвестная ошибка». Отсутствует обязательное поле:

Json:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:ListObjectsV2",
                "s3:ListObjects"
            ],
            "Resource": "arn:aws:s3:::awesome-proj/*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::awesome-proj"
        }
    ]
}

Я создал политику, но получил тот же результат:

Я обновил значения Resource и Principal - :

{
    "Id": "Policy1608869326556",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1608869322454",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::awesome-proj/*",
            "Principal": "*"
        }
    ]
}

В результате у меня возникает ошибка Действие не применяется ни к одному ресурсу (ресурсам) в инструкции.

Как правильно создать политику s3-bucket?

Не существует такой вещи, как ec2-user для политик корзины. Чего вы хотите достичь? Доступ к корзине из экземпляра ec2?

Marcin 25.12.2020 06:32

Какое сообщение появится, если развернуть «Ответ API»?

John Rotenstein 25.12.2020 06:39

Ответное сообщение API @JohnRotenstein: действие не применяется ни к одному ресурсу (ресурсам) в выражении.

Valentyn Hruzytskyi 25.12.2020 10:06

@Marcin Мне нужно сохранить файлы из ec2-user в корзину

Valentyn Hruzytskyi 25.12.2020 10:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
2 543
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Как говорится в сообщении об ошибке, в вашей политике отсутствует Principal. То есть в политике не указано, кто получает разрешения.

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

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

Спасибо. Но я создал политику сейчас и получил тот же результат. Пожалуйста, смотрите обновленный ответ

Valentyn Hruzytskyi 25.12.2020 05:13

да потому что проблема в имени ресурса

должно быть "Resource": "arn:aws:s3:::jatinbuckek101/*". вам не хватает /*, что означает любой объект внутри ведра.

а также то, как вы упомянули своего директора, проверьте, как обращаться к директору.

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

{
    "Version": "2012-10-17",
    "Id": "Policyxxxxxxx",
    "Statement": [
        {
            "Sid": "Stmtxxxxxxxx",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::jatin/*"
        }
    ]
}

Нет, это не помогает - я обновил ответ

Valentyn Hruzytskyi 25.12.2020 05:32

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

Jatin Mehrotra 25.12.2020 05:34

просто чтобы убедиться, что политика работает, замените своего принципала на это на данный момент "Principal": "*".

Jatin Mehrotra 25.12.2020 05:40

Да, я делал все таким образом - политику генерировал, а не редактировал вручную. Ваш пример тоже не помог

Valentyn Hruzytskyi 25.12.2020 05:43

В вашей обновленной политике есть несоответствие {}, в конце } } (// это лишнее, попробуйте удалить это) ] }

Jatin Mehrotra 25.12.2020 07:06
Ответ принят как подходящий

Эта политика удовлетворит ваши требования:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:DeleteObject",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awesome-proj",
                "arn:aws:s3:::awesome-proj/*"
            ]
        }
    ]
}

Несколько замечаний:

  • Я упомянул ведро напрямую (awesome-proj) И содержимое ведра (awesome-proj/*), потому что некоторые действия применяются к ведру, а некоторые — к объектам внутри ведра.
  • Вызовы API не всегда напрямую сопоставляются с действиями для разрешений. Например, нет разрешения с именем s3:ListObjectsV2 — оно фактически использует s3:ListBucket.
  • Эта политика предоставляет любому (*) разрешение на использование действий, что очень плохо для безопасности!. Вы никогда не должны позволять никому помещать/удалять объекты в ведро. Вместо этого предоставьте разрешения пользователям IAM непосредственно в IAM, а не с помощью политики сегментов. При предоставлении разрешений конкретным людям используйте IAM вместо политики сегментов.

Попробуйте это, надеюсь, что это поможет, и это должно работать.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "111111111111"},
            "Action": ["s3:GetBucket","s3:PutObject"],
            "Resource": [
                "arn:aws:s3:::BUCKET-NAME-HERE/*",
                "arn:aws:s3:::BUCKET-NAME-HERE"
            ]
        }
    ]
}

Когда вы создаете политику корзины, ресурс ссылается только на файл, который вы поместили в качестве домашнего файла, например, index.html. Если у вас есть другие файлы и папки, вам нужно добавить звездочку (*) в конце ARN.

Ресурс: "arn:s3:::your-bucket-name/*"

Другие вопросы по теме