Bem-vindo a segunda parte do guia. Você aprenderá a fazer uma operação mais complexa, isto é, usar as opções disponíveis nos comandos.
Seu gerente pediu para compartilhar de maneira segura um arquivo com um parceiro, mas você não quer deixar o link público e nem manter o arquivo disponível por mais que um dia (às vezes a gente esquece, né?). Em resumo, você terá que preparar os dois passos abaixo:
Tendo isto em mente, vamos começar!
Você viu anteriomente como copiar um arquivo para o S3 usando o comando aws s3 cp
, mas agora precisa se preocupar com a segurança já que não quer disponibilizar este arquivo publicamente. Vamos olhar a ajuda com mais detalhes para ver se encontramos alguma opção que atenda esta necessidade.
aws s3 cp help
...
SYNOPSIS
...
--acl (string) Sets the ACL for the object when the command is per-
formed. If you use this parameter you must have the "s3:PutObjectAcl"
permission included in the list of actions for your IAM policy. Only
accepts values of private, public-read, public-read-write, authenti-
cated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
and log-delivery-write. See Canned ACL for details
...
Navegando pela a ajuda, você irá encontrar a opção --acl
, que permite determinar a ACL para o objeto (arquivo) no momento da cópia. Note os valores aceitos pelo comando: private
, public-read
, public-read-write
, …, bucket-owner-full-control
and log-delivery-write
. Parece private
é o que precisa.
Então para assegurar que o arquivo é copiado de maneira privada para o S3 você pode usar --acl private
. Desta forma, o comando será:
aws s3 arquivo-secreto.txt s3://<seu-prefixo>-meu-bucket --acl private
upload: arquivo-secreto.txt to s3://<seu-prefixo>-meu-bucket/arquivo-secreto.txt
Você também pode usar o comando para renomear o arquivo de destino informando o novo nome após o bucket como mostrado a seguir (NOVO-NOME-ARQUIVO-SECRETO.TXT
).
aws s3 arquivo-secreto.txt s3://<seu-prefixo>-meu-bucket/NOVO-NOME-ARQUIVO-SECRETO.TXT --acl private
upload: arquivo-secreto.txt to s3://<seu-prefixo>-meu-bucket/NOVO-NOME-ARQUIVO-SECRETO.TXT
Por padrão, o AWS CLI grava o arquivo como privado, mas os passos acima serviram para entender como buscar as opções de um comando. Sorry!
Agora que você já subiu o arquivo, precisa pensar em como compartilhá-lo já que no modo privado ele não pode ser acessado publicamente. Para isto, você pode usar um recurso chamado URL assinada disponível no S3, isto é, uma URL que permite a quem soube-la acessar um arquivo privado por um tempo específico. Para gerar esta URL, o AWS CLI
oferece o comando presign
. Vamos ver os detalhes usando a ajuda e se quiser saber mais você pode consultar a documentacão no link Share an object with others.
aws s3 presign help
...
DESCRIPTION
Generate a pre-signed URL for an Amazon S3 object. This allows anyone
who receives the pre-signed URL to retrieve the S3 object with an HTTP
GET request. All presigned URL's now use sigv4 so the region needs to
be configured explicitly.
See 'aws help' for descriptions of global parameters.
SYNOPSIS
presign
<S3Uri>
[--expires-in <value>]
...
OPTIONS
...
--expires-in (integer) Number of seconds until the pre-signed URL
expires. Default is 3600 seconds.
...
Com as informações da ajuda, você pode montar o comando para atender os requisitos. Você precisará informar a S3Uri
e o tempo de validade a URL assinada com --expires-in
. Para definirmos um dia de expiração, precisamos calcular o número de segundos em um dia 3600 segundos / hora
*
24 horas / dia
=
86400 segundos
. O comando fica assim:
aws s3 presign s3://<seu-prefixo>-meu-bucket/arquivo-secreto.txt --expires-in 86400
https://<seu-prefixo>-meu-bucket.s3.us-east-1.amazonaws.com/arquivo-secreto.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=ANONONONONONONONONGH%2F20210123%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210123T015306Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=aa83a38406003754f8e99dad7d18d21bea6533e72cc6e05551eb390ad851f2bb
O comando pede para informar a região correta, se você não configurou no aws configure
ou exportando AWS_DEFAULT_REGION
, você deve adicionar --region <nome-da-regiao>
. Exemplo: aws s3 presign s3://<seu-prefixo>-meu-bucket/arquivo-secreto.txt --expires-in 86400 --region us-east-1
Agora que você já sabe como carregar o arquivo e gerar uma URL assinada, pode montar comando super útil para rapidamente compartilhar arquivos temporariamente.
aws s3 cp <nome-do-arquivo> s3://<seu-prefixo>-meu-bucket/
aws s3 presign s3://<seu-prefixo>-meu-bucket/<nome-do-arquivo> --expires-in 86400
Deixe o seu e-mail para receber um script bash pronto.
Agora que já sabe usar um comando e as opções, que tal praticar com um novo?
Traduzir textos de maneira recorrente pode se tornar uma tarefa entediante. Será que você consegue usar o serviço Amazon Translate para rapidamente fazer uma tradução pela linha de comando? Boa sorte!
Nesta parte do guia você aprendeu a:
Se você gostou deste guia, não esqueça de deixar o seu comentário abaixo e o que gostaria ver nas próximas partes.
Se você quiser ser notificado sobre os próximos lançamento, deixe o seu e-mail na caixa.
aws s3 rm s3://<seu-prefixo>-meu-bucket/arquivo.txt