2015-08-18 5 views
1

Я пытаюсь настроить защищенный доступ к одному из своих ковшов, и я не могу заставить его работать, хотя я уверен, что все в порядке.Конфигурация 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 
+0

Не могли бы вы уточнить, что «не может заставить его работать»? вы не можете, например, поместить объект в эти ведра с учетными данными пользователей IAM? –

+0

Да точно: я не могу прочитать объект и не поместить объект (на самом деле не протестировал удаление, я не зашел так далеко). Я всегда получаю ошибку 403. –

+0

В случае, если это поможет, я использую 'boto' (Python), и код работал хорошо, прежде чем я изменил свой ковш. Вся причина состояла в том, чтобы переименовать ведро в другое имя. –

ответ

2

Я нашел решение после нескольких часов поисков.

@ Michael-sqlbot поставил меня на правильный путь, расширив полномочия.

Оказывается, мне нужно было добавить дополнительное разрешение, чтобы все работало (я не знаю, почему это сработало раньше!).

Вот новый ковш политики:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy1439908568053", 
    "Statement": [ 
    { 
     "Sid": "Stmt1439972574242", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": [ 
       "arn:aws:iam::XXXXXXXXX:user/mybucket-dev", 
       "arn:aws:iam::XXXXXXXXX:user/mybucket-prod" 
      ] 
     }, 
     "Action": "s3:ListBucket", 
     "Resource": "arn:aws:s3:::mybucket" 
    }, 
     { 
      "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/*" 
     } 
    ] 
} 

Новое разрешение является добавление «ListBucket» в ведро, для пользователей, которые будут подключаться к нему (mybucket-dev и mybucket-prod). При добавлении этого нового разрешения все работало нормально.

Я также удалил политику, прилагаемую к пользователям.

Я хотел бы знать, если то, что я сделал правильно, или если я сделал что-то неправильно (это разрешение «ListBucket» не слишком широко? Удаляет политику пользователя правильно?)

Но хорошо, теперь это работает!

Смежные вопросы