virginia tutorial instalar elastic ecs east desplegar container aws amazon-web-services amazon-s3 aws-cli

amazon-web-services - tutorial - instalar docker en aws



AWS CLI obtiene la URL de descarga S3 para un contenedor privado desde AWS CLI (7)

Podría subir un archivo a un cubo privado de S3 con éxito usando el siguiente comando:

aws s3 cp "myfile.txt" "s3://myfolder/myfile.txt" --region=us-east-1 --output=json

Me gustaría emitir un comando de AWS CLI para devolverme una descarga de URL temporal para myfile.txt y ¿alguien sabe cómo hacerlo?

Busqué en Google y parece que tengo que firmar para obtener una URL temporal como: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html


Alternativamente, puede echar un vistazo a https://github.com/minio/mc y darnos su opinión. Siempre quisimos tener una interfaz de buzón de CLI, por supuesto, no como GUI, sino de scripting y para ser automatizados. Así que terminamos implementando un comando conveniente para mc para abordar dos casos de uso.

  • Para compartir URLs para descargar archivos (Presigned Get)
  • Para compartir el formulario de curl para cargar archivos (Política POST Presignada)

Los siguientes ejemplos abordan ambos casos de uso.

$ mc share NAME: mc share - Download and upload documents. USAGE: mc share command [arguments...] COMMANDS: download Generate URL to download documents. upload Generate ‘curl’ command to upload files. list List the shared URLs

Estos comandos se pueden usar en sentido normal o también desde con un script. Para fines de scripting mc proporciona --json salida para todos los comandos.

Ejemplo para mc share download

$ mc share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3 https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060251Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3c69928bee38b7b465547f9fa97146ff606480bbead8042c0351840c578a2ceb $ mc --json share download https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3 | jq . { "expiry": { "days": 7 }, "downloadUrl": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJVA5BMMU2RHO6IOQ%2F20151109%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151109T060618Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=48f7a521396ac8e36443cc86ce16c2619f9fa81371aad9a309375c933ea48d99", "keyName": "https://s3.amazonaws.com/ferenginar/sur_2013-08-05T05_48_49-07_00.mp3" }

Ejemplo para mc share upload

$ mc share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/... curl https://s3.amazonaws.com/backup -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061202Z -F x-amz-signature=61c234dd17fc9e5888417ac4546b37d61755e551674a9617f33f5232ec53c8b6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMjowMi40MDZaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMjAyWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F key=2007-Mar-2/<FILE> -F file=@<FILE> $ mc --json share upload --expire=2h --content-type=image/png https://s3.amazonaws.com/backup/2007-Mar-2/... | jq . { "expiry": { "hours": 2 }, "uploadCommand": "curl https://s3.amazonaws.com/backup -F x-amz-signature=4b349a15e76ab403424ec6b1e289336f67c02c427ccc98522d6f654eee5b7de6 -F Content-Type=image/png -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMS0wOVQwODoxMzoyMS4zODFaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkQ29udGVudC1UeXBlIiwiaW1hZ2UvcG5nIl0sWyJlcSIsIiRidWNrZXQiLCJiYWNrdXAiXSxbInN0YXJ0cy13aXRoIiwiJGtleSIsIjIwMDctTWFyLTIvIl0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNTExMDlUMDYxMzIxWiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIkFLSUFKVkE1Qk1NVTJSSE82SU9RLzIwMTUxMTA5L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=AKIAJVA5BMMU2RHO6IOQ/20151109/us-east-1/s3/aws4_request -F x-amz-date=20151109T061321Z -F key=2007-Mar-2/<FILE> -F file=@<FILE> ", "keyName": "https://s3.amazonaws.com/backup/2007-Mar-2/..." }

Mirando hacia adelante en algunos comentarios. Gracias



El comando es incorrecto; en lugar de:

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee

Debería ser:

$ aws s3api get-object-acl --bucket zzzyyy --key yyyeee


No creo que exista ningún comando cli precreado / sub comando para obtener la url del depósito privado, para el pre-firma puede referirse presign . En caso de que desee una URL pública en un contenedor privado, la lectura del objeto es pública, no un depósito. Para la url pública de aws, puedes usar algo. He escrito esto en powershell, puedes poner este $profile

Function getAwsUrl{ [CmdletBinding(DefaultParameterSetName="S3Path")] param( [parameter (ParameterSetName="S3Path",mandatory=$true)]$s3path, [parameter (ParameterSetName="BucketKey")]$bucket, [parameter (ParameterSetName="BucketKey",mandatory=$true)]$key ) if($s3path) { $splits = $s3path.Split(''//'') $bucket =$splits[2] $key = $splits[3] } else { #user input bucket and key $bucket =$bucket $key = $key } #using standard aws region "us-west-2" Write-Output "https://$bucket.s3.us-west-2.amazonaws.com/$key" }

Ejemplo de uso : asegúrese de pasar --acl como lectura pública

aws s3 cp C:/temp/dumy.txt s3://fpd-uploads/ --acl public-read getAwsUrl -s3path s3://fpd-uploads/dumy.txt

get-help getAwsUrl

NAME getAwsUrl SYNTAX getAwsUrl -s3path <Object> [<CommonParameters>] getAwsUrl -key <Object> [-bucket <Object>] [<CommonParameters>] ALIASES None REMARKS None


Puede utilizar el siguiente formato de URL:

https://<bucket-name>.s3.amazonaws.com/<object or key name>

o estilo antiguo:

https://s3.amazonaws.com/<bucket-name>/<object or key name>

Para tenerlo accesible, debe permitir el acceso público a su objeto o adjuntar una política de depósito adecuada.

Por ejemplo, la siguiente política de depósito muestra acceso público al objeto zzzyyy depósito ''yyyeee''

$ aws s3 get-object-acl --bucket zzzyyy --key yyyeee { "Owner": { "DisplayName": "owner", "ID": "Some hash of owner" }, "Grants": [ { "Grantee": { "DisplayName": "owner", "ID": "Some hash of owner" }, "Permission": "READ" }, { "Grantee": { "DisplayName": "owner", "ID": "Some hash of owner" }, "Permission": "WRITE" }, { "Grantee": { "DisplayName": "owner", "ID": "Some hash of owner" }, "Permission": "READ_ACP" }, { "Grantee": { "DisplayName": "owner", "ID": "Some hash of owner" }, "Permission": "WRITE_ACP" }, { "Grantee": { "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" }, { "Grantee": { "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ_ACP" } ] }

Puedes ver ejemplos de políticas de cubo aquí:

http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

También puede utilizar la consola S3 como se ve aquí:


Saber que esto es 8 meses tarde, pero acabo de descubrir que puede usar Eclipse con el Kit de herramientas de AWS para Eclipse ( http://aws.amazon.com/eclipse/ ) para generar direcciones URL firmadas previamente con un clic derecho en el objetivo El archivo, incluso te permite establecer la fecha de caducidad ... Es bastante elegante.


aws cli ahora soporta el comando presign . Tu puedes correr

$ aws s3 presign s3://test-bucket/test-file.txt https://test-bucket/test-file.txt?Expires=1499152189&Signature=some-sha

Esto generará una URL que puede compartir con cualquier persona para descargar ese archivo en 3600 segundos.

Puede cambiar el período de tiempo con --expires-in

$ aws s3 presign s3://test-bucket/test-file.txt --expires-in 600

El url generado expirará en 10 minutos.

Puede leer más sobre presign en aws cli docs .