В консоли Amazon S3 я вижу только разрешение для "upload/delete". Есть ли способ разрешить загрузку, но не удаление?
Как удалить разрешение "удалить" на Amazon S3
Ответ 1
Разрешения, которые вы видите в AWS Management Console, напрямую основаны на первоначальном и сравнительно простом Списки контроля доступа (ACL), доступные для S3, которые существенно дифференцировали разрешения READ и WRITE, см. Указание разрешения:
- READ - позволяет получателю перечислять объекты в ведре
- WRITE - позволяет получателю создавать, перезаписывать и удалять любой объект в Ковш
Эти ограничения были устранены путем добавления Bucket Policies (разрешения, применяемые на уровне ковша) и IAM Policies (разрешения, применяемые на уровне пользователя), и все три могут использоваться вместе (что может стать довольно сложным, как описано ниже), см. Контроль доступа для всего изображения.
В вашем случае использования, возможно, запрашивается соответствующая политика ведра, которую вы также добавляете непосредственно с консоли S3. Нажав на команду Добавить политику ведра, вы откроете редактор политик Bucket, который содержит ссылки на пару образцов, а также рекомендуемый AWS Policy Generator, который позволяет вам собирать политику, использующую ваш прецедент.
В противном случае простейшая форма может выглядеть так (пожалуйста, убедитесь, что вы скорректировали Принципал и Ресурс для ваших нужд):
{
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket_name>/<key_name>",
"Principal": {
"AWS": [
"*"
]
}
}
]
}
В зависимости от вашего варианта использования вы можете легко составить довольно сложные политики, объединив различные действия "Разрешить" и "Запретить" и т.д. - это, очевидно, также приведет к непреднамеренным разрешениям, поэтому надлежащее тестирование является ключевым, как обычно; соответственно, пожалуйста, позаботьтесь о последствиях при использовании Использование ACL и Bucket Policies Together или IAM и Bucket Policies Together.
Наконец, вы можете захотеть взглянуть на мой ответ на Проблемы с определением одного ведра в простой пользовательской политике AWS, которая затрагивает еще одну часто встречающуюся ошибку с политикой.
Ответ 2
Вы можете приложить политику no-delete к вашему ведро s3. Например, если вы не хотите, чтобы этот пользователь IAM выполнял любую операцию удаления в любые ведра или любые объекты, вы можете установить что-то вроде этого:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1480692207000",
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Кроме того, вы можете проверить свою политику с помощью симулятора политики https://policysim.aws.amazon.com, чтобы проверить, соответствует ли ваша настройка ожидаемому или нет.
Надеюсь, это поможет!
Ответ 3
Это сработало отлично. Благодаря Pung Worathiti Manosroi. объединил свою указанную политику в соответствии с ниже:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
},
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
},
{
"Effect": "Deny",
"Action": [
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::mybucketname/*",
"Condition": {}
}
]
}
Ответ 4
Да, s3:DeleteObject
- это вариант:
http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html
Однако нет никакого различия между изменением существующего объекта (который позволит эффективно его удалить) и создания нового объекта.