2015-03-18 1 views
2

Je crée un signed url en utilisant les éléments suivants:Amazon S3 signé URL et CloudFront - Accès refusé

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 

Cela renvoie une URL comme: "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"

Lorsque je clique sur ce lien, je reçois le message:

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

Ceci est mon bucket policy pour mon 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/*" 
    } 
] 
} 

Veuillez nous faire savoir si des informations supplémentaires sont requises.

Répondre

0

Ceci est ma politique de compartiment.

{ 
     "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/*" 
      } 
     ] 
    } 

C'est la distribution: di53i9yykewl5.cloudfront.net

Restreindre Bucket Accès: Oui

Origine Accès Identité: Utiliser une identité existante

Restreindre Viewer accès (Utiliser le URL Signed): Oui Signataires de confiance: Self

Il ne devrait pas y avoir d'autres AC L ou politique.

+0

Merci Osalkk! Cela semble avoir réglé le problème. Il me manquait: 'Restreindre l'accès à la visionneuse (Utiliser les URL signées): Oui Signataires approuvés: Auto' –

0

L'option "Restreindre l'accès au compartiment" a-t-elle été sélectionnée comme "oui" et "identité d'accès d'origine" sélectionnée?

Pouvez-vous essayer le code ci-dessous que j'ai utilisé auparavant?

#!/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

Merci pour ce Osalkk, cependant, je rencontre le même problème. J'ai sélectionné 'Restrict Bucket Access'. Pour 'Identité d'accès à l'origine', j'ai sélectionné' Utiliser une identité existante'. –

+0

A propos de l'image cassée, Si vous inspectez l'élément, que dit-il? –

+0

En termes de 'elements', il charge une balise' img' dans le 'body'. Cependant, j'ai remarqué quelque chose d'étrange avec les appels réseau. Je reçois un 'HTTP 304 Not Modified' et la' size' de l'image est seulement '334B' alors qu'elle devrait être proche de' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –