Tips, Soluciones y Novedades en Tecnología

12/08/2018

URL Firmadas en AWS





Hoy veremos como acceder a nuestros archivos privados de AWS S3 desde CloudFront, tenemos un Bucket en S3 con archivos privados, es decir sin acceso publico.



Como puedo descargar el archivo desde una URL?



La solución que voy a compartir es mediante URL firmadas, este mecanismo permite a nuestro que archivo solo pueda ser accedido por la URL firmada e identificada, aplicando un tiempo para acceder y pasado ese periodo la URL quedará inaccesible.





Para ello vamos a ejecutar una serie de Pasos:



1: Crear un Bucket



Como primero paso vamos a crear un Bucket













 Creamos nuestro Bucket "mybucket-ejemplo"



2: Cargar archivos al Bucket









 Cargamos un archivo a nuestro buecket







Si intentamos acceder a nuestro archivo, vemos que no es posible, por que al subir un archivo por defecto es privado.



3: Crear una distribución a CloudFront



 Ahora debemos dirigir al servicio CloudFront para crear una nueva distribución teniendo en cuenta cierta configuración.











 Como podemos observar en la imagen adjunta, se ha enumerado 4 puntos en la primera sección del formulario, explico cada una.




  1. Seleccionar el Bucker creado anteriormente como fuente de la distribución

  2. Habilitar acceso restringido al Bucket, Para poder acceder desde la distribución a los archivos privados

  3. Crear un origen de identidad "access-identity-mybucket-ejemplo.s3.amazonaws.com"

  4. Actualizar la politica del Bucket con la Identidad del paso 3, esto permite que se actualize automaticamente, en caso no seleccionar el Paso 4, se debe realizar manualmente.



 Ahora veremos la parte final del formulario de la distribución










Debemos seleccionar "YES" la opción "Restrict Viewer Access"  y creamos la distribución.





Los pasos previos son suficiente para que nuestra distribución de CloudFront espere una URL firmada en cada petición.



Adicionalmente se requiere un CloudFront key par para poder firmar la URL desde el cliente Java, lo puedes obtener en

https://console.aws.amazon.com/iam/home?region=us-east-1#/security_credential



Apunta la clave generada y descarga el archivo .pem





4: Generar una url firmada con el cliente Java de CloudFront



En este paso lo que debemos hacer es crear un proyecto Java con Maven y agregar la siguiente dependencia.








 <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-cloudfront -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-cloudfront</artifactId>
<version>1.9.3</version>
</dependency>




Y el código para firmar nuestra URL desde Java se muestra a continuación.




public class MyTestCloudFrount {
public static void main(String[] args) throws Exception {
/**
* DNS de tu distribución CloudFront
*/
String distributionDomainName = "dnpu4fytk6zvf.cloudfront.net";
/**
* El Private key de CloudFront
*/
File cloudFrontPrivateKeyFile = new File("D:\\pk-APKAJTE3NCSEDSSSD.pem");
/**
* Access Key ID del CloudFront key par
*/
String cloudFrontKeyPairId = "APKAJTE3NCFTGLAPBXRA";
/**
* Nombre del archivo privado que se encuentra en el bucket
* "mybucket-ejemplo"
*/
String fileName = "Crear_bucket.png";
Date expirationDate = new Date(System.currentTimeMillis() + 60 * 1000);
String signedUrl = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
CloudFrontUrlSigner.Protocol.https,
distributionDomainName,
cloudFrontPrivateKeyFile,
fileName,
cloudFrontKeyPairId,
expirationDate
);
System.out.println(signedUrl);
}
}




Con eso ya podemos acceder a nuestro archivo privado



5: Acceder a nuestro archivo



Sin URL firmado









Con URL Firmado









  Saludos.





0 comments:

Publicar un comentario