Diffusez du contenu privé avec AWS CloudFront

Cet article fait suite à [Video Stream on AWS S3 + CloudFront](http://qiita.com/terapyon/items/b77ac981da790662e247 «Video Stream on AWS S3 + CloudFront»).

Objectif

Connectez-vous avec une URL limitée dans le temps. (URL unique) Je souhaite limiter la visualisation à un flux vidéo et le distribuer. (Je l'ai essayé avec une image cette fois) En fin de compte, je souhaite distribuer la vidéo en utilisant l'authentification de Plone. (Défi après la prochaine fois)

Paramètres S3 et CloudFront

Créez un nouveau bucket et placez une image d'essai. Essayez de diffuser cette image en privé.

S3

--Créer un nouveau bucket (c2-video-test-private)

CloundFront

--Obtenir l'ID d'accès CloudFront

Créer une URL signée

Reportez-vous à l'élément boto suivant et essayez de le créer dans l'environnement Python local.

L'URL sans restriction doit être:

https://dn045wcqv2fv4.cloudfront.net/terada_pythonbr.jpg Sans surprise, l'erreur est de retour.

error.xml


<Error>
  <Code>MissingKey</Code>
  <Message>Missing Key-Pair-Id query parameter</Message>
</Error>

Créer une URL restreinte

(Les détails des relations boto sont décrits en bas)

sample.py


ACCESS_KEY_ID = "xxxxxxxxxxxxxxxxx"
SECRET_ACCESS_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxx"
YOUR_KEYPAIR_ID = "xxxxxxxxxxxxxx"
YOUR_PRIVATE_KEY_FILE_LOCATION = "xxxxxxxxxxxxxxxxxxxxx.pem"
url = "https://dn045wcqv2fv4.cloudfront.net/terada_pythonbr.jpg "
expire_time = int(time.time() +3600)

conn = CloudFrontConnection(ACCESS_KEY_ID, SECRET_ACCESS_KEY)
distribution = Distribution(connection=conn, config=None, domain_name='', id='', last_modified_time=None, status='')

signed_url = distribution.create_signed_url(url=url, keypair_id=YOUR_KEYPAIR_ID, expire_time=expire_time, private_key_file=YOUR_PRIVATE_KEY_FILE_LOCATION)
>>> print signed_url
https://dn045wcqv2fv4.cloudfront.net/terada_pythonbr.jpg?Expires=1406023941&Signature=Ihps3u0~jQ-Twkghg2tqQ-dTMEZoRC-Jb13F4FgNe~1MVAsXQ-yAbXtEKSTsIhN6OLZmuUii6E1xs7nWfe-76SGk26Jmx5edd35EgwQ8mH~2XlY4QOqP1Fgza93q02oQNhJWte1mef4tc8p3fJO6yzebpTEh4MqvQOt9s5bcKq9ad8EGSmfXfUlgL6b87z6TOAXVFQuIotttu6ajlfbCpplIUD-~r-6W~SB6n2dyB8SaoKgJBTkEKJwFiBWx2S5M20-06hsLOeV23UBJcuq6~C-pE1r1ViE8Ia-tM8L6v7zcbtLfOdw9lgFzYoMoh-KiWOAdz7pc-koYMVPXZ-9DuQ__&Key-Pair-Id=APKAJAJZQHPKZI6OK5UQ

Test d'accès avec navigateur

https://dn045wcqv2fv4.cloudfront.net/terada_pythonbr.jpg?Expires=1406023941&Signature=Ihps3u0~jQ-Twkghg2tqQ-dTMEZoRC-Jb13F4FgNe~1MVAsXQ-yAbXtEKSTsIhN6OLZmuUii6E1xs7nWfe-76SGk26Jmx5edd35EgwQ8mH~2XlY4QOqP1Fgza93q02oQNhJWte1mef4tc8p3fJO6yzebpTEh4MqvQOt9s5bcKq9ad8EGSmfXfUlgL6b87z6TOAXVFQuIotttu6ajlfbCpplIUD-~r-6W~SB6n2dyB8SaoKgJBTkEKJwFiBWx2S5M20-06hsLOeV23UBJcuq6~C-pE1r1ViE8Ia-tM8L6v7zcbtLfOdw9lgFzYoMoh-KiWOAdz7pc-koYMVPXZ-9DuQ__&Key-Pair-Id=APKAJAJZQHPKZI6OK5UQ

J'ai pu accéder le 22/07/2014 à 18:14. 2014/07/22 Il ne devrait pas être accessible à 19:15

boto

boto est un module Python qui manipule les API AWS. Auparavant, cela n'était pas officiel sur Amazon, mais maintenant que les développeurs devraient appartenir à Amazon, cela devrait être semi-officiel.

Préparation préalable

$ pip install rsa
$ pip install boto

Comment obtenir une URL signée

L'explication était ci-dessous. http://boto.readthedocs.org/en/latest/ref/cloudfront.html

create_signed_url(url, keypair_id, expire_time=None, valid_after_time=None, ip_address=None, policy_url=None, private_key_file=None, private_key_string=None)

Ci-dessous un échantillon

http://stackoverflow.com/questions/2573919/creating-signed-urls-for-amazon-cloudfront

import boto
from boto.cloudfront import CloudFrontConnection
from boto.cloudfront.distribution import Distribution

expire_time = int(time.time() +3000)
conn = CloudFrontConnection('ACCESS_KEY_ID', 'SECRET_ACCESS_KEY')

##enter the id or domain name to select a distribution
distribution = Distribution(connection=conn, config=None, domain_name='', id='', last_modified_time=None, status='')
signed_url = distribution.create_signed_url(url='YOUR_URL', keypair_id='YOUR_KEYPAIR_ID_example-APKAIAZVIO4BQ',expire_time=expire_time,private_key_file="YOUR_PRIVATE_KEY_FILE_LOCATION")

URL mentionnée lors de l'enquête

Essayez-le avec une vidéo

Faites correspondre ce qui précède au flux vidéo défini sur TODO

Préparation

--C2-video-test-private Ajouter un dossier vidéo au bucket

Jusque-là, cela devrait être facile à faire en examinant le passé.

Créer une URL signée

Travaillez avec boto comme ci-dessus

>>> url = "rtmp://s3lse3ja7xuop9.cloudfront.net/cfx/st/&mp4:video/PyConAPACTW2014terada.mp4"
>>> policy_url = "video/*"
>>> signed_url = distribution.create_signed_url(url=url, keypair_id=YOUR_KEYPAIR_ID, expire_time=expire_time, private_key_file=YOUR_PRIVATE_KEY_FILE_LOCATION, policy_url=policy_url)
>>> print signed_url
rtmp://s3lse3ja7xuop9.cloudfront.net/cfx/st/&mp4:video/PyConAPACTW2014terada.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoidmlkZW8vKiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTQwNjg5OTIwMX19fV19&Signature=m10lfH4vpepAWVNLCGO9xr~TFs-ZCUklra-I4D6WZvqO3aHhijIbtPQOiK00BPZzTxnu-enkvTuao1aDoP~HSONzF5xIqGqMuP4RYJ-B0~g5iQxvac1VVkb~3lZXMRN3Oz45BsrRWQawyXp1o~0M9sFr~zIVQAbM8aAji1WmTu0~fY0UcfgO74DNevYw4-I4S8S2KLnSimFGeU0bz3b8bXtgxketPz0JhTyM4akK8gD7xWjskrxFOZ4pskCaLvJr3Pyb9pJsqQ9T2izNsPs0Ms5pi94FnOdyejSRWezqrxp00KNttnlc3DGCOcmcCNDNYdIMxmNC6MuAfQKx~a1tig__&Key-Pair-Id=APKAJAJZQHPKZI6OK5UQ

Modèle d'affichage vidéo

Faites de la partie src une URL signée.

<source src="rtmp://s3lse3ja7xuop9.cloudfront.net/cfx/st/&mp4:video/PyConAPACTW2014terada.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoidmlkZW8vKiIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTQwNjg5OTIwMX19fV19&Signature=m10lfH4vpepAWVNLCGO9xr~TFs-ZCUklra-I4D6WZvqO3aHhijIbtPQOiK00BPZzTxnu-enkvTuao1aDoP~HSONzF5xIqGqMuP4RYJ-B0~g5iQxvac1VVkb~3lZXMRN3Oz45BsrRWQawyXp1o~0M9sFr~zIVQAbM8aAji1WmTu0~fY0UcfgO74DNevYw4-I4S8S2KLnSimFGeU0bz3b8bXtgxketPz0JhTyM4akK8gD7xWjskrxFOZ4pskCaLvJr3Pyb9pJsqQ9T2izNsPs0Ms5pi94FnOdyejSRWezqrxp00KNttnlc3DGCOcmcCNDNYdIMxmNC6MuAfQKx~a1tig__&Key-Pair-Id=APKAJAJZQHPKZI6OK5UQ"
                 type='rtmp/mp4' />

Page de test

Je pense que la date limite de visionnage est déjà passée, mais confirmez que vous pouvez la voir ci-dessous http://c2-video-test.s3-website-ap-northeast-1.amazonaws.com/index2.html

TODO à partir de la prochaine fois

Articles de blog liés à l'auteur

Distribution de contenu privé avec AWS CloudFront

Recommended Posts

Diffusez du contenu privé avec AWS CloudFront
Diffusez du contenu privé avec AWS CloudFront
Générer une URL signée S3 avec boto
Émettre l'URL signée Amazon CloudFront en Python
Python avec Go
Créer un référentiel privé avec AWS CodeArtifact
L'apprentissage le plus rapide sous Linux avec AWS
PyTorch avec AWS Lambda [importation Lambda]
Créez un alias pour Route53 vers CloudFront avec l'API AWS