Usando Opções

Introdução

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.

Usando Comandos com Opções

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:

  • Subir o arquivo desejado para bucket que criou na parte 1
  • Encontrar um jeito de compartilhar com outras pessoas um arquivo no S3

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.

Praticando

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!

Fechando

Nesta parte do guia você aprendeu a:

  • localizar e usar a opções de um comando do AWS CLI
  • compor comando para montar atingir seus objetivos e facilitar suas tarefas

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.

Referências

Resposta para a Prática da Parte 1

aws s3 rm s3://<seu-prefixo>-meu-bucket/arquivo.txt

Comentários

comments powered by Disqus