2015-07-22 6 views
2

У меня есть проблема разрешений в ведре S3, когда я пытаюсь получить доступ к определенным файлам с помощью BOTO в Python. Вот ведро политика:S3ResponseError: 403 Запрещено с помощью Boto

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1407346649831", 
    "Statement": [ 
     { 
      "Sid": "Stmt1407346646598", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::029030651757:user/my_iam_user" 
      }, 
      "Action": "s3:*", 
      "Resource": ["arn:aws:s3:::my_bucket/*", 
         "arn:aws:s3:::my_bucket"] 
     }, 
     { 
      "Sid": "2", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EFUS443HMBYF" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": ["arn:aws:s3:::my_bucket/*", 
         "arn:aws:s3:::my_bucket"] 
     }, 
     { 
      "Sid": "3", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EFUS443HMBYF" 
      }, 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::my_bucket/*" 
     } 
    ] 
} 

У меня есть 3 заявления. Первый заключается в том, чтобы разрешить пользователю my_iam_user получить доступ к ведру my_bucket, а второй - разрешить распределению Cloudfront для чтения ведра, а последний - разрешить распределение Cloudfront для записи в ведро.

Теперь у меня есть файлы на моем ковше profile_pictures/15/file1.jpg и profile_pictures/15/file2.jpg. Первый был создан с использованием подписанного url и CloudFront, второй был помещен на S3 с помощью Boto. Теперь я пытаюсь получить доступ к файлам с помощью Boto. Вот мой код:

import boto 
from boto.s3.key import Key 

s3 = boto.connect_s3(
    aws_access_key_id="access_key_of_my_iam_user", 
    aws_secret_access_key="secret_key_of_my_iam_user" 
) 
bucket = s3.get_bucket("my_bucket", validate=False) 

k1 = Key(bucket) 
k1.key = "profile_pictures/15/file1.jpg" 
k1.get_contents_as_string() 


k2 = Key(bucket) 
k2.key = "profile_pictures/15/file2.jpg" 
k2.get_contents_as_string() 

Проблема заключается в том, что доступ к file1 возвращает ошибку:

S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>8C5DE910C7B18F9E</RequestId><HostId>XiKU5Q+B0Wme3GpUNmUoD9KpUN63T3bFu/rAb/wh3rhDMkykoRsdQIFgyIp8zfAwMR1apbqUEFY=</HostId></Error> 

а второй один успех. Что может быть неправильным?

Примечание: время на клиенте, которое работает с кодом, является хорошим.

+0

Является ли пользователь IAM также владелец ведра? – garnaat

ответ

3

Несмотря на то, что пользователю IAM был предоставлен полный доступ к ведру с помощью первой политики, они все равно не будут автоматически иметь доступ к file1, поскольку они не являются владельцем этого объекта (Cloudfront is), и они не были предоставлены явный доступ к объекту. Кроме того, предположительно, пользователь IAM также не является владельцем ведра.

Если вы посмотрите на Example 1 on this page, вы увидите почти идентичную ситуацию и объясните, как используется контекст объекта для определения того, предоставлен или запрещен запрос.

+0

Действительно, пользователь iAM не является владельцем ведра, а не владельцем file1. Поэтому возникает вопрос: должен ли я предоставлять пользователю доступ вручную ко всем созданным файлам или есть какой-то другой способ? –

+0

Я не эксперт в Cloudfront, поэтому я не знаю, есть ли способ изменить предварительно подписанный запрос PUT, чтобы включить грант, чтобы разрешить пользователю IAM доступ или нет. Другой альтернативой было бы использование Lambda, запускаемое новыми объектами, которые хранятся в ведре. Функция Lambda может проверять новый объект и при необходимости настраивать ACL объекта. – garnaat

0

Вы не будете иметь доступ к ведру «мое-ведро» ..

имен ковшей должны быть уникальными по всей S3 эко-системе.

Если вы пытаетесь получить доступ уникального имени ковшового например «MY_UNIQUE_ORG_NAME-MY_UNIQUE_BUCKET_NAME» вы, вероятно, лучше удач ..

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