Какие разрешения требуют django-хранилища для пользователя I3 s3?
Как задается вопрос, каковы минимальные требуемые разрешения для заблокированного пользователя s3 IAM для успешного использования django-хранилищ? В настоящее время я использовал что-то вроде
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListAllMyBuckets"],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": ["s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"],
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Effect": "Allow",
"Action": ["s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
На самом деле это может быть излишним. Любые другие идеи?
Ответы
Ответ 1
Fiver-ответа недостаточно, чтобы запустить collectstatic
в django-storages
. Я использовал все, что делал @jvc26, за исключением s3:ListAllMyBuckets
. Я бы предположил, что s3:ListBucketVersions
не нужен.
{
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"],
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Effect": "Allow",
"Action": ["s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
Ответ 2
Я не уверен на 100% о django-хранилищах, поскольку я использую cuddly-buddly, который основан на части S3 django- хранилища. Я просто нашел cuddlybuddly проще в использовании и работал лучше, плюс имя удивительно!
Во всяком случае, у меня есть проект с использованием Django + S3 и нашел следующую стратегию AWS как минимум, необходимый для моего проекта:
{
"Version": "2008-10-17",
"Id": "Policy123",
"Statement": [
{
"Sid": "Stmt123",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::some-aws-user"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name"
},
{
"Sid": "Stmt234",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::some-aws-user"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}
У меня есть представления Django, которые необходимо загружать, извлекать и удалять, чтобы соответствующие действия могли быть использованы/опущены на основе ваших потребностей. Очевидно, кому-то нужно будет изменить имя пользователя и ведра.
Кроме того, для полноты, поскольку это было не очевидно для меня, обратите внимание на следующие ограничения в отношении правил AWS:
-
Максимальный размер политики - 20 КБ
-
Значение для ресурса должно иметь префикс имени ведра или имя ковша и путь под ним (ведро/). Если только имя ведра указанный, без трейлинга /, политика применяется к ведру.
-
Каждая политика должна иметь уникальный идентификатор политики (Id)
-
Каждый оператор в политике должен иметь уникальный идентификатор оператора (sid)
-
Каждая политика должна охватывать только один ведро и ресурсы в пределах этого bucket (при написании политики не включайте утверждения, которые ссылаются на другие ковши или ресурсы в других ведрах)
Наконец, кому угодно, не изменяйте значение даты в ключе Version
, Amazon использует это значение для анализа формата политики.
Надеюсь, это поможет!
Ответ 3
который работает для меня:
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::bucket_name_here"
},
{
"Effect": "Allow",
"Action": [
"s3:*Object*",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::bucket_name_here/*"
}
]
}