2015-03-18 4 views
2

Я создаю signed url, используя следующие:Amazon S3 подписали URL и CloudFront - Access Denied

AWS_ACCESS_KEY_ID = my_access_key 
    AWS_SECRET_ACCESS_KEY = my_secret_access_key 
    KEYPAIR_ID = my_keypair_id 
    KEYPAIR_FILE = path_to_keypair_file 
    CF_DISTRIBUTION_ID = cf_dist_id 
    my_connection = cloudfront.CloudFrontConnection(
     AWS_ACCESS_KEY_ID, 
     AWS_SECRET_ACCESS_KEY 
    ) 


    distro_summary = my_connection.get_all_distributions()[0] 
    distro_info = my_connection.get_distribution_info(distro_summary.id) 
    distro = distro_summary.get_distribution()  

    SECS = 8000 
    signed_url = distro.create_signed_url(
        "https://%s/%s" % (distro_info.domain_name, 'restaurant_1_banner.png'), 
        KEYPAIR_ID, 
        expire_time=time.time() + SECS, 
        valid_after_time=None, 
        ip_address=None, 
        policy_url=None, 
        private_key_file=KEYPAIR_FILE 
        #private_key_string=KEYPAIR_ID 
        ) 


    return signed_url 

Это возвращает URL, как: "https://d1yllqv1oc7n6x.cloudfront.net/restaurant_1_banner.png?Expires=1426681326.67&Signature=Nsvyl-EowDRGuw-MfdgS34C6bsHKKC2L88ROfPBRAnsbpoeYfpJj6NQaTj4PGiG02Z7PRqkk5F0cBWKOik738H8xrlQQf8CuS0AouisnqMvZ4FLx94fSMo8vwFDg9jKLTMB1T0AGjWvgAcDlkLo4nYxyHQ077pwp3Do8g1eP62QD-~Ys4kejtVGtPTx6O1pM4gRLsmM8Kn7HJ618Hp4XMgRWwqJaCL-2C0YQP1PdEMbSOS6ZrmGTN~U5T-s-PZX1poS6qRiY4-Ma66DVLgmOTBh5vqjCWEqsbKZKFWFufsA2mMa4ON11yBUSyIbGJPpgKdRLU0pZuo7RX3~sIe6Q9w__&Key-Pair-Id=APKAISF4B35DSGOUTGTQ"

При нажатии на эту ссылку, я получаю сообщение:

<Error> 
    <Code>AccessDenied</Code> 
    <Message>Access denied</Message> 
</Error> 

Это мой bucket policy для моего s3bucket.

{ 
"Version": "2008-10-17", 
"Id": "PolicyForCloudFrontPrivateContent", 
"Statement": [ 
    { 
     "Sid": "1", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3I8A03QRR3ASO" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::menumaster/*" 
    } 
] 
} 

Пожалуйста, дайте мне знать, если какая-либо дополнительная информация требуется.

ответ

0

Это моя политика в отношении ведра.

{ 
     "Version": "2008-10-17", 
     "Id": "PolicyForCloudFrontPrivateContent", 
     "Statement": [ 
      { 
       "Sid": "1", 
       "Effect": "Allow", 
       "Principal": { 
        "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH238ELEGANOC" 
       }, 
       "Action": "s3:GetObject", 
       "Resource": "arn:aws:s3:::onur.deneme/*" 
      } 
     ] 
    } 

Это распределение: di53i9yykewl5.cloudfront.net

Ограничение доступа Ковш: Да

Origin Access Идентичность: Использование существующего Идентичность

Ограничение просмотра доступа (Использовать подпись URL-адресов): Да Доверенные подписывающие лица: Self

Не должно быть никаких других AC L или политики.

+0

Спасибо Osalkk! Это, похоже, устранило проблему. Мне не хватало: «Ограничить доступ к просмотру (использовать подписанные URL-адреса): Да Доверенные подписчики: Self' –

0

Выбрано ли «Ограничить доступность ковша» как «да» и «идентификатор доступа к источнику»?

Можете ли вы попробовать код ниже, который я использовал раньше?

#!/usr/bin/python 
import time,boto,rsa 
from boto import cloudfront 
from boto.cloudfront import distribution 

AWS_ACCESS_KEY_ID="your access key" 
AWS_SECRET_ACCESS_KEY="your secret access key" 


conn = boto.cloudfront.CloudFrontConnection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
dist = conn.get_all_distributions() 
a=dist[0].get_distribution() 
#Set parameters for URL 
key_pair_id = "your key pair id" #cloudfront security key 
priv_key_file = "xxxxxxxxx.pem" #cloudfront private keypair file 
expires = int(time.time()) + 60 #1 min 
url="http://dbvvi2cumi6nj.cloudfront.net/santa.png" 
signed_url = a.create_signed_url(url, key_pair_id, expires,private_key_file=priv_key_file) 
print signed_url 
+0

Спасибо за этот Osalkk, однако, я сталкиваюсь с той же проблемой. Я выбрал «Ограничить доступ к ведро». Для 'Origin Access Identity' я выбрал' Использовать существующую идентификацию'. –

+0

О сломанном изображении, Если вы проверяете элемент, что он говорит? –

+0

С точки зрения 'elements', он загружает тег' img' в 'body'. Однако я заметил что-то странное в сетевых вызовах. Я получаю «HTTP 304 Not Modified», а «размер» изображения - только «334B», когда он должен быть близок к '500KB'. –

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