Stellen Sie private Inhalte mit AWS CloudFront bereit

Dieser Artikel ist eine Fortsetzung von Videostream auf AWS S3 + CloudFront.

Zweck

Stellen Sie eine Verbindung mit einer zeitlich begrenzten URL her. (Einmalige URL) Ich möchte die Anzeige auf einen Videostream beschränken und ihn verteilen. (Ich habe es diesmal mit einem Bild versucht) Letztendlich möchte ich das Video mithilfe der Authentifizierung von Plone verteilen. (Herausforderung nach dem nächsten Mal)

S3- und CloudFront-Einstellungen

Erstellen Sie einen neuen Eimer und platzieren Sie ein Testbild. Versuchen Sie, dieses Bild privat zu verbreiten.

S3

--Erstelle einen neuen Bucket (c2-video-test-private)

CloundFront

Erstellen Sie eine signierte URL

Lesen Sie das folgende Boto-Element und versuchen Sie, es in der lokalen Python-Umgebung zu erstellen.

Die uneingeschränkte URL sollte lauten:

https://dn045wcqv2fv4.cloudfront.net/terada_pythonbr.jpg Es überrascht nicht, dass der Fehler zurück ist.

error.xml


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

Erstellen Sie eine eingeschränkte URL

(Details der Boto-Beziehungen sind unten beschrieben)

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

Zugriffstest mit Browser

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

Ich konnte auf den 22.07.2014 18:14 zugreifen. 22.07.2014 Es sollte nicht um 19:15 Uhr zugänglich sein

boto

boto ist ein Python-Modul, das AWS-APIs manipuliert. Früher war es bei Amazon inoffiziell, aber jetzt, da die Entwickler zu Amazon gehören sollten, sollte es halboffiziell sein.

Vorbereitungen

$ pip install rsa
$ pip install boto

So erhalten Sie eine signierte URL

Die Erklärung war unten. 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)

Unten war ein Beispiel

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, auf die während der Umfrage verwiesen wird

Versuchen Sie es mit einem Video

Stellen Sie sicher, dass das Obige dem Videostream entspricht, der auf TODO eingestellt wurde

Vorbereitung

--C2-video-test-private Videoordner zum Bucket hinzufügen

Bis zu diesem Punkt sollte es einfach sein, die Vergangenheit zu überprüfen.

Erstellen Sie eine signierte URL

Arbeiten Sie mit boto wie oben

>>> 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

Vorlage für die Videoanzeige

Machen Sie den src-Teil zu einer signierten URL.

<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' />

Testseite

Ich denke, dass die Anzeigefrist bereits abgelaufen ist, aber ich habe bestätigt, dass Sie sie unten sehen können http://c2-video-test.s3-website-ap-northeast-1.amazonaws.com/index2.html

TODO ab dem nächsten Mal

Autorenbezogene Blog-Artikel

Verteilung privater Inhalte mit AWS CloudFront

Recommended Posts

Stellen Sie private Inhalte mit AWS CloudFront bereit
Stellen Sie private Inhalte mit AWS CloudFront bereit
Generieren Sie eine mit S3 signierte URL mit boto
Geben Sie die von Amazon CloudFront signierte URL in Python aus
Python mit Go
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Linux am schnellsten mit AWS lernen
PyTorch mit AWS Lambda [Lambda-Import]
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront