Я пытаюсь следовать следующему руководству: 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?
Какое сообщение появится, если развернуть «Ответ API»?
Ответное сообщение API @JohnRotenstein: действие не применяется ни к одному ресурсу (ресурсам) в выражении.
@Marcin Мне нужно сохранить файлы из ec2-user в корзину
Как говорится в сообщении об ошибке, в вашей политике отсутствует Principal
. То есть в политике не указано, кто получает разрешения.
Политика, как вы показали, будет работать, если она прикреплена к пользователю IAM (поскольку принципал автоматически является пользователем IAM, к которому он прикреплен), но при предоставлении политики сегмента необходимо указать принципала.
Если вы использовали Генератор политик, есть поле, в котором вы можете указать принципала. Если вы хотите, чтобы эти разрешения были у кого-либо, вы можете указать *
в качестве Принципала. Однако я бы не рекомендовал этого, поскольку политика предоставляет разрешения на загрузку/загрузку/удаление.
Спасибо. Но я создал политику сейчас и получил тот же результат. Пожалуйста, смотрите обновленный ответ
да потому что проблема в имени ресурса
должно быть "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/*"
}
]
}
Нет, это не помогает - я обновил ответ
точно, вы можете просто попытаться сделать это с помощью генератора политик, а не редактировать вручную, а также вместо изображения опубликовать свою политику и, пожалуйста, проверьте основной формат имени по ссылке, которую я предоставил.
просто чтобы убедиться, что политика работает, замените своего принципала на это на данный момент "Principal": "*"
.
Да, я делал все таким образом - политику генерировал, а не редактировал вручную. Ваш пример тоже не помог
В вашей обновленной политике есть несоответствие {}, в конце } } (// это лишнее, попробуйте удалить это) ] }
Эта политика удовлетворит ваши требования:
{
"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/*
), потому что некоторые действия применяются к ведру, а некоторые — к объектам внутри ведра.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/*"
Не существует такой вещи, как
ec2-user
для политик корзины. Чего вы хотите достичь? Доступ к корзине из экземпляра ec2?