Я пытаюсь настроить защищенный доступ к одному из своих ковшов, и я не могу заставить его работать, хотя я уверен, что все в порядке.Конфигурация Amazon S3 всегда возвращает 403 Forbidden
У меня есть это ведро, назовем его mybucket
, который я создал в Ирландии. Он содержит две папки, dev
и prod
.
Я создал два пользователя:
mybucket-prod
, Арн:arn:aws:iam::XXXXXXXXX:user/mybucket-prod
mybucket-dev
, Арн:arn:aws:iam::XXXXXXXXX:user/mybucket-dev
Каждый из этих пользователей есть политика:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1439909068000",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::mybucket/dev/*"
]
}
]
}
(и то же самое для mybucket-прод, который имеет ресурс = "arn:aws:s3:::mybucket/prod/*"
)
А вот политика Ковш:
{
"Version": "2012-10-17",
"Id": "Policy1439908568053",
"Statement": [
{
"Sid": "Stmt1439908459631",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-dev"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/dev/*"
},
{
"Sid": "Stmt1439908500795",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXX:user/mybucket-prod"
},
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/prod/*"
}
]
}
И я не могу заставить его работать, как для пользователей. Я попытался создать новый ключ доступа, даже не повезло.
Что я сделал не так?
Возможно, стоит заметить, что я скопировал содержимое другого ведра на это, перейдя по веб-интерфейсу Amazon, нажав на «dev» и «prod» из предыдущего ведра, выбрав «copy», затем идущий mybucket
и выбрав "paste"?
Я также пробовал симулятор политики, и результат был положительным (допустимым).
Я использую boto
(Python), но, как я уже сказал, я ничего не изменил в коде, и возникла ошибка, так как я изменил имя ведра. Я тестировал с действительно основным кодом, который возвращает ту же ошибку:
from boto.s3.connection import S3Connection
from boto.s3.key import Key
con = S3Connection('KEY', 'SECRET', host='s3-eu-west-1.amazonaws.com')
print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/documents/1-demo.pdf")
И я получаю:
Traceback (most recent call last):
File "test.py", line 6, in <module>
print Key(bucket=con.get_bucket('mybucket'), name="/prod/2/contracts/1/documents/1-cillit.pdf")
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 502, in get_bucket
return self.head_bucket(bucket_name, headers=headers)
File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 535, in head_bucket
raise err
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
Не могли бы вы уточнить, что «не может заставить его работать»? вы не можете, например, поместить объект в эти ведра с учетными данными пользователей IAM? –
Да точно: я не могу прочитать объект и не поместить объект (на самом деле не протестировал удаление, я не зашел так далеко). Я всегда получаю ошибку 403. –
В случае, если это поможет, я использую 'boto' (Python), и код работал хорошо, прежде чем я изменил свой ковш. Вся причина состояла в том, чтобы переименовать ведро в другое имя. –