2017-04-21 8 views
4

J'essaie d'utiliser des cookies signés pour ma distribution cloudfront.Impossible d'utiliser les cookies signés pour cloudfront

J'utilise cookie-signer pour générer des cookies signés. Et le script ci-dessous pour télécharger un fichier de l'avant nuage

import requests 
cookies = { 
'CloudFront-Key-Pair-Id': 'APKXXXXXXXXXXX', 
'CloudFront-Policy': u'eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kNXRpdXV2ZjdodDlpLmNsb3VkZnJvbnQubmV0L21lZGlhL3Byb2ZpbGVfcGljLmpwZyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTQ5Mjc2ODcwMH19fV19', 
'CloudFront-Signature': u'ZVG-Pi7x~edJqERf99O9und0wYedB-SHMNKuHd4UpEDaPckYekGoAJ~q8tU0vQI4mS9odXITzAKl4v7tmfDjG1y9FmWaSxgf9h2jrssIk25Mswk3UXOV7wRNs9DiHpA3~D70qAWXGS9GVN4z3SvZ3xQv9bM1P50y2shNPlOCV4o5nAH56sYdvdJNjxSFxdoOUMuhxyrzf-Gv5fjNSzv2Dy43WY6rmpEMfh6L9Eb-2kcrS9p5rsK9MtAwpN8Frobt4bCuduQleb~DXZ~O~hoBGdO3RdyYWgMdTa~02PQl3st8eisBiH7XYy2GbOwPIN~M4m-UAs3ihL0ZWUjbkVDFCA__', 
'Secure': 'True', 
'HTTPOnly': 'True', 

} 
headers = {} 

s = requests.Session() 

res = s.get('http://XXXXXXX.cloudfront.net/media/profile_pic.jpg', 
headers=headers, cookies=cookies) 
print res 
print res.content 

Sortie:

<Response [403]> 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message> 
<RequestId>BBDBA8E7FEDA7759</RequestId><HostId>7Pt2/REdiugH5Te555/v004J6skQs9+ccncmXM74yHwPhQrSMJ9pavIj2QmPW6g2QsnnEYGxitc=</HostId></Error> 

utilisateur Ajouté à la signataire de confiance pour la distribution de CloudFront et a généré une paire de clés-id pour CloudFront.

Quelqu'un peut-il m'aider? Merci d'avance

Répondre

1

Votre erreur est en réalité une erreur S3, pas une erreur Cloudfront (CF). Avez-vous créé une stratégie de compartiment donnant accès à GetObject?

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
    { 
     "Sid":"AddPerm", 
     "Effect":"Allow", 
     "Principal": "*", 
     "Action":["s3:GetObject"], 
     "Resource":["arn:aws:s3:::examplebucket/*"] 
    } 
    ] 
} 

Voir http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

Si vous utilisez S3 comme l'origine de CF alors vous aurez envie de créer une identité et d'accès Origin assurez-vous de donner accès dans votre S3 politique Bucket. (Voir http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-6)

Si vous essayez de servir la page en utilisant S3 web statique hébergement alors je suggère que soit la liste blanche IP CloudFront dans votre politique ou l'ajout d'un Origin Custom Header dans les FC, comme referer et la recherche de l'en-tête dans votre seau politique. (Voir http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4)

Pour vérifier votre intégrité, vous pouvez essayer de générer une URL signée à l'aide de l'AWS-CLI. (Voir http://docs.aws.amazon.com/cli/latest/reference/cloudfront/sign.html)