Usando URLs firmadas de Amazon CloudFront, en WS.WebTV, con la extensión StreamClip
soporte, ws.webtv, inicio, contenidos, clips, streamclip, crear, editar, amazon, s3, cloudfront, signed, urls
Cuando Ud. ha configurado un Clip o Chanal para ser privado, la WebTV restringirá el acceso al mismo requiriendo al usuario que inicie sesión; sin embargo, una vez que un usuario ha iniciado sesión, si tiene suficientes conocimientos técnicos, pudiera encontrar una manera de conseguir las URLs de los archivos de vídeo y compartirlas con otras personas. Como la WebTV no puede restringir el acceso a los archivos, cualquiera que tenga las URLs de los mismos podrá acceder a ellos y descargarlos (sin necesidad de iniciar sesión en la WebTV).
Protegiendo sus archivos usando Amazon CloudFront
Si está usando Amazon S3 y CloudFront para almacenar y servir sus archivos de vídeo, entonces debe saber que CloudFront le permite restringir el acceso a los mismos usando URLs firmadas ("signed URLs"). Cuando ha configurado su distribución CloudFront para restringir el acceso, entonces nadie será capaz de acceder a un archivo sin la URL correcta, firmada (que es una URL con algunos parámetro únicos). Las URL firmadas pueden especificar una fecha de vencimiento (después de la cual dejarán de funcionar) así como la IP del usuario que está autorizado a acceder (un usuario con una IP diferente no tendrá permitido el acceso) - Importante: Lea más sobre el tiempo de vencimiento y la restricción por IP al final de este documento, en el párrafo "Detalles de Integración, Configuración Avanzada".
Generación de URL firmada en WS.WebTV
A partir de WS.WebTV 1.5.1, Ud. puede utilizar URLs firmadas de CloudFront en WS.WebTV para complementar el sistema de autenticación y lograr una mayor protección de sus archivos de vídeo. Cuando se usan conjuntamente, la WebTV automáticamente generará las URLs firmadas (en segundo plano) sólo para los usuarios que hayan iniciado sesión y estén autorizados para acceder a un contenido determinado; adicionalmente, por defecto, las URLs firmadas restringirán el acceso usando una fecha de vencimiento así como la IP del usuario actual; por lo tanto, inclusive si el usuario fue capaz de obtener la URL de un archivo, nadie más la podrá utilizar.
En caso de que no haya creado un bucket en Amazon S3, comience por crear uno (desde la Consola de Amazon AWS) para almacenar su contenido privado.
NOTA: Es recomendable no compartir públicamente la URL de su bucket S3.
El bucket debe ser privado (o al menos los archivos en el bucket deben serlo)
Cuando suba un archivo al bucket S3, debe asegurarse de que no lo ha hecho público.
Hay dos maneras para hacer esto:
1. Usando un bucket "no público"
(ver imagen a continuación). Este es el caso ideal donde tiene un bucket exclusivamente para almacenar objetos privados/restringidos. Básicamente debe establecer los permisos del bucket de manera que nada sea público.
2. Usando un bucket público (donde los objectos pueden ser públicos y privados) pero asegurándose de que los archivos subidos no tengan nada permitido para el ajuste "Public access" (dentro de "Permissions").
Ejemplo de bucket completamente privado:
Ejemplo de archivo privado (en un bucket público):
Subiendo archivos de vídeo privados desde WS.WebTV
Si está subiendo archivos de vídeo desde la WebTV (esto quiere decir que ha configurado el almacenamiento de vídeo para ser AWS) deberá configurar la WebTV para que establezca la privacidad de los archivo subidos como "privados". Edite el archivo de configuración de la WebTV (config/Config.inc.php) y agregue la siguiente variable antes del tag de cierre de PHP (?>):
$AWS_VIDEO_UPLOAD_ACL = "private";
Una vez que tiene un bucket para almacenar sus archivos de vídeo, necesita crear las Distribuciones CloudFront (serán las encargadas de servir sus archivos). Hay dos tipos de distribuciones:
Distribución Web: Indicada para reproducir vídeos, usando descarga progresiva/pseudo-streaming, con el reproductor de vídeo HTML5.
Distribución RTMP: Indicada para reproducir vídeos, usando streaming, con el reproductor de vídeo Flash.
Recomendamos crear una Distribución "RTMP" para Flash y otra Distribución "Web" para HTML5 y descarga en general.
Creando una Distribución CloudFront "Web" para reproducir vídeos en HTML5
Ir a la Consola AWS y acceda a CloudFront, luego haga click en el botón"Create Distribution":
En la siguiente pantalla haga click en "Get Started" en la opción "Web":
En la siguiente pantalla, configure las opciones de la Distribución.
NOTA: Solamente haremos énfasis en los aspectos relacionados con la distribución privada. Para información respecto a otras opciones, consulte la documentación de CloudFront.
Asegúrese de las opciones se corresponden con las indicaciones y haga click en "Create Distribution".
NOTAS:
- Después de crear, regrese al listado de distribuciones CloudFront y anote el nombre de dominio ("Domain Name") de la nueva distribución; lo necesitará posteriormente.
- Las Distribuciones demoran varios minutos en estar disponibles.
El Domain Name resultante para la nueva distribución de CloudFront sería algo como d#############.cloudfront.net (comenzando por la letra "d").
Tome nota de este "domain name" porque lo necesitará en los siguientes pasos.
Creando una Distribución CloudFront "RTMP" para reproducir vídeos en Flash
Ir a la Consola AWS y acceda a CloudFront, luego haga click en el botón"Create Distribution":
En la siguiente pantalla haga click en "Get Started" en la opción "RTMP":
En la siguiente pantalla, configure las opciones de la Distribución.
NOTA: Solamente haremos énfasis en los aspectos relacionados con la distribución privada. Para información respecto a otras opciones, consulte la documentación de CloudFront.
Asegúrese de las opciones se corresponden con las indicaciones y haga click en "Create Distribution".
NOTAS:
- Después de crear, regrese al listado de distribuciones CloudFront y anote el nombre de dominio ("Domain Name") de la nueva distribución; lo necesitará posteriormente.
- Las Distribuciones demoran varios minutos en estar disponibles.
El Domain Name resultante para la nueva distribución de CloudFront sería algo como s#############.cloudfront.net (comenzando por la letra "s").
Tome nota de este "domain name" porque lo necesitará en los siguientes pasos.
El siguiente paso es obtener sus credenciales de CloudFront y configurar la WebTV para que las use (las credenciales serán usadas para "firmar" las URLs de los archivos).
Obteniendo sus credenciales de CloudFront
*** NOTA: Debe haber iniciado sesión con las credenciales root de la Consola AWS ***
Haga click en el nombre de su cuenta (en la parte superior) y seleccione "Security Credentials":
En la siguiente pantalla, despliegue la sección "CloudFront Key Pairs" y haga click en el botón "Create New Key Pair":
IMPORTANTE: Despues de hacer click en el botón "Create New Key Pair", una ventana aparecerá notificando la creación del "Key Pair" y ofreciendo la opción de descargar los archivos de clave. Debe anotar su "Access Key ID" y descargar los archivos de clave.
Lo primero que debe hacer ahora es subir su archivo de clave privada ("private key") a la carpeta config/ de la WebTV.
NOTA IMPORTANTE: El archivo de clave privada descargado de Amazon incluye el Key-Pair-Id en el nombre; por razones deseguridad, le recomendamos que renombre el archivo de clave privada para incluir algunos números o caracteres aleatorios. Así que -por ejemplo- si el archivo descargado se llama pk-AJKAI5XNI8UFLW5E38W7.pem, renómbrelo a pk-AJKAI5XNI8UFLW5E38W7-algunos-números-aleatorios.pem.
Para suministrar sus credenciales a la WebTV debe editar el archivo de configuración (config/Config.inc.php) y añadir el "Key Pair ID" así como el nombre del archivo de la clave privada, como se indica a continuación - antes del tag de cierre de PHP (?>):
$AWS_CF_CREDENTIALS["id_unico"] = "Key-Pair-Id,Nombre_archivo_clave_privada";
id_unico: Un nombre para acceder a las credenciales. Es necesario pues la WebTV puede usar múltiples credenciales en caso de ser requerido; si solamente está usando una, entonces simplemente use cf1
Key-Pair-Id: Este esl el "Access Key ID"; debe ser algo parecido a lo siguiente: AJKAI5XNI8UFLW5E38W7
Nombre_archivo_clave_privada: El nombre del archivo de clave privada que debe haber subido previamente a la carpeta config de la WebTV; debe ser algo parecido a lo siguiente (una vez que lo hayta renombrado): pk-AJKAI5XNI8UFLW5E38W7-8998741258991.pem
Ejemplo:
$AWS_CF_CREDENTIALS["cf1"] = "AJKAI5XNI8UFLW5E38W7,pk-AJKAI5XNI8UFLW5E38W7-8998741258991.pem";
Ahora que ya ha creado sus Distribuciones CloudFront, obtenido sus credenciales y configurado la WebTV para usarlas, está listo para referenciar sus archivos en la WebTV!.
A estas alturas debería estar familiarizado con la creación y edición de StreamClips VOD. De no ser así, por favor, consulte el tutorial "StreamClip VOD" antes de continuar la lectura.
Streaming Flash, H.264 (Distribución RTMP)
Si su archivo tiene extensión ".mp4", la URL que debe introducir en la calidad correspondiente (campo Flash) sería como la siguiente:
[cfsig]rtmp://s#############.cloudfront.net:1935/cfx/st/mp4:video-file-name.mp4
Ejemplo: [cfsig]rtmp://s#############.cloudfront.net:1935/cfx/st/mp4:mi_video_privado.mp4
Tenga en cuenta el texto "[cfsig]" al comienzo de la URL y "mp4:" antes del nombre del archivo. Además, deberá utilizar el "domain name" correspondiente.
HTML5/Descarga Progresiva (Distribución Web)
Si su archivo tiene extensión ".mp4", la URL que debe introducir en la calidad correspondiente (campo HTML5) sería como la siguiente:
[cfsig]http://d#############.cloudfront.net/video-file-name.mp4
Ejemplo: [cfsig]http://d#############..cloudfront.net/mi_video_privado.mp4
Tenga en cuenta el texto "[cfsig]" al comienzo de la URL. Además, deberá utilizar el "domain name" correspondiente.
Se realiza introduciendo las fórmulas URL Base correspondientes en Configuración > Vídeo
Fórmula Flash
La Fórmula URL que debe introducir en la calidad correspondiente (campo Flash) sería como la siguiente:
[cfsig]rtmp://s#############.cloudfront.net:1935/cfx/st/mp4:{filename.ext}
Tenga en cuenta el texto "[cfsig]" al comienzo de la fórmula y "mp4:" antes de la etiqueta especial.
Fórmula HTML5
La Fórmula URL que debe introducir en la calidad correspondiente (campo HTML5) sería como la siguiente:
[cfsig]https://d#############.cloudfront.net/{filename.ext}
Tenga en cuenta el texto "[cfsig]" al comienzo de la fórmula.
Detalles de integración
Como ha podido apreciar; para que la WebTV use las URL firmadas es necesario que las URLs de CloudFront lleven el prefijo "[cfsig]". Cuando WS.WebTV encuentra ese tag especial, firma las URLs de CloudFront (en segundo plano) usando las credenciales suministradas en el archivo de configuración.
Configuración Avanzada
Como explicamos al comienzo de este documento, las URLs firmadas usan una fecha de vencimiento y la IP actual del usuario; Ud. puede modificar las optciones editando el archivo de configuración de la WebTV (config/Config.inc.php) y añadiendo las siguientes variables antes del tag de cierre de PHP (?>):
$AWS_CF_SIGNED_URL_EXPIRATION = 3600; // La URL firmada dejará de funcionar una vez transcurrido este tiempo -en segundos- (3600 = 1hr)
$AWS_CF_SIGNED_URL_RESTRICT_USER_IP = true; // Para restringir las URLs firmadas por IP de usuario. Opciones: true, false
NOTA IMPORTANTE: Si está usando el soporte para IPv6 en la distribución restringida de CloudFront entonces, para que los Usuarios con IPv6 puedan ver el contenido deberá deshabilitar la restricción por IP. Si piensa que el soporte para IPv6 no es importante entonces deshabilítelo en la distribución CloudFront.
Para WS.WebTV versión 2.0 y posteriores
Cuando habilita el menú "Descargar" para un Clip, y ha elegido la opción "Sí, Archivos WebTV" o "Sí, Archivos WebTV + Otros Archivos", y los campos HTML5 de las calidades referencian archivos .mp4 (de una distribución "Web" CloudFront)
el sistema generará automáticamente las URLs de descarga (firmadas) correspondientes para esos archivos. No obstante lo anterior si, en caso de que en el menú "Descargar" de un Clip, desea suministrar enlaces a archivos que son diferentes de los referenciados en los campos HTML5 de las calidades, y dichos archivos también requieren URLs firmadas entonces siga los pasos 1 y 2 de la siguiente sección.
Para versiones de WS.WebTV anteriores a 2.0
Si piensa habilitar la opción de descarga de vídeo para un Clip y desea suministrar una URL (privada) de CloudFront -para que sólo se pueda descargar por usuarios autorizados-, entonces necesita utilizar una URL especial generada por la WebTV, la cual se encargará de firmar la URL para que los usuarios autorizados puedan descargar el archivo.
Para habilitar el menú de "Descarga" para un Clip y user URLs privadas de CloudFront URLs, siga los siguientes pasos:
1. En "Mostrar Menú de Descarga:", seleccione "Sí, Otros Archivos".
2. Introduzca los enlaces de descarga manualmente: Los enlaces de descarga deben ser generados usando la utilidad WebTV Signer URL generator de la WebTV. Para ejecutar la utilidad abra la siguiente URL en un navegador Web (reemplace la URL de su WebTV):
http://<url_de_su_webtv>/index.php?go=ajax&do=genawscfsignerurl y suministre la URL de la Distribución Web correspondiente. Por ejemplo:
La siguiente URL CloudFront:
http://d1g31os05ijtr3.cloudfront.net/private_video.mp4
Será transformada (por la utilidad) en una URL similar a la siguiente:
http://<url_de_su_webtv>/index.php?go=ajax&do=getawscfsignedurl&iq=,,http%3A%2F%2Fd1g31os05ijtr3.cloudfront.net%2Fprivate_video.mp4&tp=download
La URL transformada será la que deberá introducir en el campo "Otros Archivos".