Introdução
Um colega precisa de um download temporário de um relatório privado. Você gerará e testará um link assinado, conferirá seus limites de acesso e limpará os recursos de prática sem tornar o arquivo público.
Conclua primeiro Organize documentos com chaves e metadados para conhecer chaves, downloads e limpeza. O bucket privado e uma identidade restrita estão preparados nesta VM nova; nenhum login pessoal ou escrita de políticas IAM é necessário. Use Terminal e a aba AWS View, ao lado. Mantenha os links completos de download privados.
Relação com as certificações
Este laboratório oferece prática nos seguintes tópicos de exame.
- Solutions Architect – Associate (SAA-C03) · Tarefa 1.1: Acesso temporário ao S3 por URLs pré-assinadas.
- Developer – Associate (DVA-C02) · Tarefa 2.1: Acesso temporário ao S3 por URLs pré-assinadas.
- Security – Specialty (SCS-C03) · Tarefa 4.1: Prática dos fundamentos: Acesso temporário ao S3 por URLs pré-assinadas.
Leia o relatório com sua identidade configurada
Nesta etapa, você recuperará o relatório permitido e verá que outro objeto privado permanece fora das permissões da sua identidade.
Uma permissão define o que uma identidade pode fazer com um recurso. Seu leitor preparado pode listar este bucket e ler shared/report.txt, mas não pode ler private/payroll.txt nem alterar o armazenamento. Você usará essas permissões, não escreverá políticas; o curso de IAM ensina isso depois.
Vá ao espaço de trabalho com cd (mudar de diretório):
cd /home/labex/project
Liste o prefixo compartilhado do bucket preparado:
aws s3 ls s3://labex-private-documents/shared/
A listagem contém uma linha terminando em report.txt; sob este prefixo, ela se refere à chave completa shared/report.txt. O prefixo organiza a chave; seu nome não torna o objeto público. Sua solicitação da AWS CLI é bem-sucedida porque a identidade configurada tem permissão para listar o bucket.
Baixe o relatório com uma solicitação autenticada da AWS CLI:
aws s3 cp s3://labex-private-documents/shared/report.txt authorized-report.txt
Inspecione este relatório sintético com cat, que exibe um arquivo de texto local:
cat authorized-report.txt
Monthly report: 42000 revenue
No AWS View, abra shared/report.txt. A pré-visualização mostra o mesmo conteúdo armazenado, usando o acesso permitido do leitor.

Este exemplo mostra o relatório disponível para o leitor configurado. Os comandos de download na próxima etapa verificam o próprio link temporário.
Tente ler o objeto separado de folha de pagamento:
aws s3 cp s3://labex-private-documents/private/payroll.txt denied-payroll.txt
Espera-se que este comando falhe com um erro 403 ou AccessDenied. O objeto existe, mas este leitor não tem permissão para recuperá-lo. Uma identidade ter acesso a um relatório não lhe dá acesso a todos os objetos do bucket. Você compartilhará apenas o relatório permitido.
Gere e use um link temporário de download
Nesta etapa, você gerará um link assinado e baixará o relatório com um cliente HTTP em vez de uma identidade AWS na solicitação de recebimento.
Um link temporário permite o download autorizado até o fim de seu limite de tempo.

Uma URL pré-assinada é um link que contém uma assinatura e um prazo de expiração. Ela permite que um destinatário faça um download permitido sem receber suas credenciais AWS. Os arquivos de links estão preparados com permissões restritas; mantenha seu conteúdo completo privado.
aws s3 presign produz uma URL que autoriza o download do objeto especificado. --expires-in define o tempo de validade solicitado em segundos; 600 significa dez minutos a partir da geração. Isso não altera as permissões de acesso do objeto. O > do shell grava a saída no arquivo local já protegido em vez de exibir o link completo:
aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 600 > download-link.txt
O comando não exibe nada porque sua saída foi para o arquivo. Qualquer pessoa que possua esta URL pode usar seu acesso delegado enquanto ela for válida, portanto mantenha o link completo fora de capturas de tela e mensagens públicas.
Leia o link em uma variável do shell sem exibi-lo. $(...) captura a saída de um comando; cat lê o arquivo, e DOWNLOAD_URL=... atribui o texto capturado. Não há espaços ao redor do = da atribuição:
DOWNLOAD_URL=$(cat download-link.txt)
curl faz uma solicitação HTTP. -f trata respostas de erro HTTP como falhas, -sS oculta o indicador de progresso mantendo as mensagens de erro, e -o grava o corpo da resposta em um arquivo local. Aspas duplas mantêm a URL inteira em um argumento, incluindo seus parâmetros de consulta:
curl -fsS "$DOWNLOAD_URL" -o shared-download.txt
Curl não recebe credenciais AWS nem profile; a própria URL contém a assinatura necessária para este download. Leia o resultado:
cat shared-download.txt
Monthly report: 42000 revenue
cmp compara dois arquivos byte a byte. && exibe a mensagem apenas quando a comparação é bem-sucedida:
cmp authorized-report.txt shared-download.txt && echo 'Temporary-link download matches'
A mensagem confirma que o download HTTP contém o mesmo relatório. Gerar apenas um link não comprova que ele funciona; esta solicitação testa a permissão efetiva, a assinatura e os bytes armazenados. Se você passar mais de dez minutos antes de baixar, gere um link novo e recarregue a variável com os dois comandos acima.
Confira quando o link expira
Nesta etapa, você observará o limite de tempo de um link compartilhado. O link de dez minutos foi útil para testar um download bem-sucedido; um link separado de curta duração torna rápida a observação da expiração.
Gere outro link com um prazo intencionalmente curto de quinze segundos, armazenando-o no segundo arquivo protegido:
aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 15 > short-link.txt
Capture-o sem exibi-lo:
SHORT_URL=$(cat short-link.txt)
sleep espera a quantidade especificada de segundos. Espere dezesseis segundos para ultrapassar o prazo de validade solicitado deste link curto:
sleep 16
Use novamente o link curto original, sem gerar uma substituição. Aqui, -s oculta o indicador de progresso, -o salva o corpo da resposta, e -w exibe apenas o status HTTP. %{http_code} é o campo de status do curl e \n termina a linha. Omitimos -f para que você possa inspecionar a rejeição:
curl -s -o expired-response.xml -w '%{http_code}\n' "$SHORT_URL"
Status esperado: 403. O arquivo ainda existe e sua identidade ainda pode lê-lo, mas a janela de tempo da URL delegada terminou. O corpo da resposta XML explica a solicitação expirada; você pode inspecionar essa resposta com segurança porque ela não contém o link:
cat expired-response.xml
Seu Code é AccessDenied e sua Message é Request has expired.. Isso estabelece o motivo da rejeição; uma falha de conexão não comprovaria a expiração.
Faça a limpeza com a identidade de manutenção preparada
Nesta etapa, você removerá os objetos e o bucket do laboratório usando a identidade de manutenção preparada.
Seu leitor padrão intencionalmente não tem permissões de exclusão. Um profile da AWS CLI é uma configuração com nome que seleciona uma identidade e configurações de serviço. O profile cleanup preparado tem permissão para excluir os recursos deste exercício. --profile cleanup o seleciona para os comandos seguintes; você não insere nem inspeciona credenciais.
Remova o relatório compartilhado pela chave exata:
aws --profile cleanup s3 rm s3://labex-private-documents/shared/report.txt
Remova também o outro recurso descartável fornecido pela chave exata:
aws --profile cleanup s3 rm s3://labex-private-documents/private/payroll.txt
Ambas as mensagens de exclusão indicam os objetos pretendidos. Confirme que o bucket está vazio com uma listagem autenticada:
aws --profile cleanup s3 ls s3://labex-private-documents/ --recursive
O comando bem-sucedido não exibe linhas de objetos. Remova o bucket vazio:
aws --profile cleanup s3 rb s3://labex-private-documents
A saída é remove_bucket: labex-private-documents. Confirme os buckets restantes:
aws --profile cleanup s3 ls
Não restam linhas de buckets, e AWS View mostra No buckets. Um link de download não pode fornecer um arquivo que foi removido. Os arquivos locais protegidos de URLs também podem ser removidos com rm local porque você não precisa mais deles:
rm download-link.txt short-link.txt
Suas cópias baixadas do relatório permanecem para revisão. Exclusão de armazenamento, expiração de link e limpeza de arquivos locais são operações diferentes; você concluiu cada parte apropriada deste exercício.
Resumo
Você recuperou um relatório privado permitido, observou uma leitura de objeto negada, gerou uma URL temporária de download e comparou o download HTTP com a cópia autenticada. Depois, verificou que um link de curta duração foi rejeitado após a expiração.
Uma URL pré-assinada delega uma operação já permitida à identidade que a assina; ela não torna o objeto público nem contorna permissões. Trate o link completo como um segredo temporário de acesso. Você terminou usando um profile separado de manutenção para remover os objetos do laboratório, o bucket e os arquivos locais de URLs.



