Introdução
Uma exportação privada precisa de criptografia antes do armazenamento. Você criptografará um pequeno arquivo sintético, permitirá que um leitor recupere seus bytes originais, diagnosticará falhas de descriptografia e agendará a limpeza de sua chave.
Conclua primeiro Conceda privilégio mínimo a um leitor de relatórios e Use credenciais temporárias com uma função IAM. Esta VM nova fornece seu próprio arquivo, sessão da função leitora e chave de referência.
Relação com as certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Tarefa 2.2 | Criptografia KMS, permissões de descriptografia e estados de chaves. |
| Solutions Architect – Associate (SAA-C03) | Tarefa 1.3 | Criptografia KMS, permissões de descriptografia e estados de chaves. |
| Developer – Associate (DVA-C02) | Tarefa 2.2 | Criptografia KMS, permissões de descriptografia e estados de chaves. |
| CloudOps Engineer – Associate (SOA-C03) | Tarefa 4.2 | Criptografia KMS, permissões de descriptografia e estados de chaves. |
| Security – Specialty (SCS-C03) | Tarefa 5.3 | Prática dos fundamentos: Criptografia KMS, permissões de descriptografia e estados de chaves. |
| Data Engineer – Associate (DEA-C01) | Tarefa 4.3 | Prática dos fundamentos: Criptografia KMS, permissões de descriptografia e estados de chaves. |
| DevOps Engineer – Professional (DOP-C02) | Tarefa 6.2 | Prática dos fundamentos: Criptografia KMS, permissões de descriptografia e estados de chaves. |
| Solutions Architect – Professional (SAP-C02) | Tarefa 2.3 | Prática dos fundamentos: Criptografia KMS, permissões de descriptografia e estados de chaves. |
Visão geral do laboratório

Criptografe a Exportação Privada
Nesta etapa, você criará uma chave do AWS Key Management Service (KMS) e transformará a exportação fornecida em texto cifrado. Use o private-export.json sintético fornecido em vez de dados pessoais. O profile export-reader usa uma sessão temporária da função leitora preparada, inicialmente sem permissão KMS. Preserve alias/labex-sec01-reference.
Em IAM, você definiu quem pode solicitar uma operação. Aqui, essa operação precisa recuperar os bytes originais da exportação: o arquivo cifrado só é útil ao leitor previsto se ele puder decifrá-lo com o contexto correto e uma chave utilizável.
Observe AWS View na parte superior para comparar o estado da chave, as concessões do leitor e os resultados das solicitações criptográficas. Seus hashes de bytes permitem comparar resultados sem exibir dados privados.
Uma chave simétrica usa o mesmo material de chave protegido para criptografia e descriptografia; o KMS mantém esse material de chave dentro do serviço. Um alias dá um nome legível a uma chave sem substituir seu ARN único.
Comece no diretório de projeto fornecido. cd altera seu diretório atual; a consulta de quem faz a chamada confirma a identidade do operador preparado sem imprimir credenciais.
cd /home/labex/project
aws sts get-caller-identity --query Arn --output text
Espere o ARN do usuário labex-sec01-operator. Crie sua própria chave. --query seleciona um campo da resposta, --output text remove as aspas de JSON e $(...) armazena esse resultado em uma variável do shell para comandos posteriores.
KEY_ARN=$(aws kms create-key \
--description labex-sec01-owned-export \
--query KeyMetadata.Arn \
--output text)
echo "$KEY_ARN"
aws kms create-alias \
--alias-name alias/labex-sec01-private-export \
--target-key-id "$KEY_ARN"
aws kms describe-key \
--key-id "$KEY_ARN" \
--query 'KeyMetadata.[KeyState,KeySpec]' \
--output text
Espere Enabled e SYMMETRIC_DEFAULT. Não use nem modifique a chave de referência.

Referência do Console oficial: alias, status Enabled e ARN correspondem à identidade e ao estado da chave que você acabou de consultar. Esses são valores de exemplo da AWS; continue usando seu próprio KEY_ARN no Terminal.
Um contexto de criptografia é um conjunto de rótulos não secretos vinculados ao texto cifrado. A descriptografia deve fornecer os mesmos rótulos. Aqui, Purpose=private-export identifica o uso pretendido desta exportação. Valores de contexto não são um lugar para senhas ou dados pessoais.
KMS Encrypt processa pequenos textos simples; esta exportação preparada está bem abaixo do limite de 4 KiB. fileb:// lê a entrada como bytes binários. A CLI representa o texto cifrado retornado em base64; base64 --decode o converte novamente em um arquivo binário. O pipe envia a saída ao próximo comando, e > grava o resultado no arquivo nomeado.
aws kms encrypt --key-id "$KEY_ARN" --plaintext fileb://private-export.json --encryption-context Purpose=private-export --query CiphertextBlob --output text | base64 --decode > private-export.kms
Compare hashes de bytes com sha256sum. Hashes diferentes mostram que o texto cifrado difere dos dados originais; isso sozinho não é evidência de permissão.
sha256sum private-export.json private-export.kms
Observe AWS View na parte superior. Customer key inventory deve mostrar sua chave habilitada, enquanto Cryptographic requests mostra uma solicitação Encrypt permitida do operador cuja entrada corresponde à exportação.
Conceda Acesso a uma Função Leitora
Nesta etapa, você permitirá que o leitor da aplicação descriptografe apenas com sua chave de exportação. Uma permissão de função IAM especifica tanto uma ação quanto o recurso ao qual ela se aplica. kms:Decrypt permite recuperar bytes; não concede criptografia nem administração de chaves.

Primeiro, teste o profile do leitor antes de adicionar uma concessão. --profile export-reader seleciona a sessão temporária da função preparada em vez do operador. O comando deve falhar com uma resposta de acesso negado e não deve retornar texto simples.
aws kms decrypt \
--profile export-reader \
--key-id "$KEY_ARN" \
--ciphertext-blob fileb://private-export.kms \
--encryption-context Purpose=private-export \
--query KeyId \
--output text
Crie um documento de política. O heredoc grava as linhas entre <<EOF e EOF em read-export.json; o shell expande $KEY_ARN para o ARN exato da chave. Esta concessão não usa ação nem recurso com curinga.
cat > read-export.json <<EOF
{
"Version": "2012-10-17",
"Statement": [{"Effect": "Allow", "Action": "kms:Decrypt", "Resource": "$KEY_ARN"}]
}
EOF
Anexe essa política inline à função leitora. Uma política inline pertence a esta função IAM e pode ser removida de forma independente durante a limpeza. A chave fornecida usa sua política padrão de chave da mesma conta, que permite que permissões IAM autorizem esta função.
aws iam put-role-policy \
--role-name labex-sec01-export-reader \
--policy-name ReadPrivateExport \
--policy-document file://read-export.json
Agora recupere os bytes criptografados com a sessão do leitor. O comando seleciona o campo de texto simples em base64, o decodifica e grava a exportação restaurada sem exibir seu conteúdo.
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query Plaintext --output text | base64 --decode > restored-export.json
cmp compara os bytes reais dos arquivos. Com &&, a mensagem é impressa apenas quando essa comparação tem sucesso.
cmp private-export.json restored-export.json && echo "Original export bytes recovered"
Espere Original export bytes recovered. O AWS View deve mostrar a política do leitor para a chave exata e um Decrypt permitido da função leitora cujos bytes recuperados correspondem à exportação. Mantenha esta função IAM limitada a Decrypt em sua chave.

Diagnostique Três Falhas de Descriptografia
Nesta etapa, você distinguirá falhas de contexto, permissão e estado da chave. Mantenha o mesmo texto cifrado durante todo o processo para que cada resultado tenha uma causa clara. Os comandos com falha abaixo selecionam intencionalmente apenas um identificador de chave, nunca texto simples.
Primeiro, altere apenas o valor do contexto. Mesmo um leitor autorizado não consegue descriptografar texto cifrado com um contexto incorreto.
aws kms decrypt \
--profile export-reader \
--key-id "$KEY_ARN" \
--ciphertext-blob fileb://private-export.kms \
--encryption-context Purpose=wrong-context \
--query KeyId \
--output text
Espere InvalidCiphertextException. A chave e a concessão à função IAM ainda existem, mas o contexto não corresponde ao usado em Encrypt.
Em seguida, remova a concessão da função IAM e repita a solicitação com o contexto correto. Remover uma política inline altera a autorização sem modificar a chave nem o texto cifrado.
aws iam delete-role-policy \
--role-name labex-sec01-export-reader \
--policy-name ReadPrivateExport
aws kms decrypt \
--profile export-reader \
--key-id "$KEY_ARN" \
--ciphertext-blob fileb://private-export.kms \
--encryption-context Purpose=private-export \
--query KeyId \
--output text
Espere uma resposta de acesso negado. Restaure a concessão restrita antes do próximo teste.
aws iam put-role-policy \
--role-name labex-sec01-export-reader \
--policy-name ReadPrivateExport \
--policy-document file://read-export.json
Por fim, desabilite a chave. Uma chave desabilitada permanece no inventário, mas não pode realizar operações criptográficas. Use o profile do operador, que tem permissão, para isolar a falha de estado da chave.
aws kms disable-key --key-id "$KEY_ARN"
aws kms decrypt \
--key-id "$KEY_ARN" \
--ciphertext-blob fileb://private-export.kms \
--encryption-context Purpose=private-export \
--query KeyId \
--output text
Espere DisabledException. Habilite a chave e repita a recuperação bem-sucedida pelo leitor para confirmar que o comportamento normal retorna.
aws kms enable-key --key-id "$KEY_ARN"
aws kms decrypt --profile export-reader --key-id "$KEY_ARN" --ciphertext-blob fileb://private-export.kms --encryption-context Purpose=private-export --query Plaintext --output text | base64 --decode > restored-export.json
cmp private-export.json restored-export.json && echo "Reader access restored"
Inspecione a tabela Cryptographic requests do AWS View. Compare quem fez a chamada, o contexto e o resultado das solicitações negadas. Uma concessão à função IAM não corrige um contexto incompatível nem uma chave desabilitada.

Retire a Chave do Laboratório de Uso com Segurança
Nesta etapa, você removerá a concessão do leitor e o alias e agendará a exclusão apenas de sua chave de exportação. A exclusão de uma chave KMS tem um período de espera: PendingDeletion é o estado imediato esperado, não prova de que uma chave já desapareceu. Durante esse período, a chave não consegue descriptografar.
Confirme que o ARN ainda pertence à sua chave de exportação do laboratório antes de agendar a exclusão.
aws kms describe-key \
--key-id "$KEY_ARN" \
--query 'KeyMetadata.[Description,KeyState]' \
--output text
Espere labex-sec01-owned-export e Enabled. Remova apenas a concessão à função IAM que você adicionou e o alias que criou.
aws iam delete-role-policy \
--role-name labex-sec01-export-reader \
--policy-name ReadPrivateExport
aws kms delete-alias --alias-name alias/labex-sec01-private-export
Agende a exclusão da chave com o período mínimo de espera de sete dias.
aws kms schedule-key-deletion \
--key-id "$KEY_ARN" \
--pending-window-in-days 7 \
--query DeletionDate \
--output text
O comando retorna a data agendada de exclusão. Confirme o estado real da chave com uma leitura separada e preserve a chave de referência não relacionada.
aws kms describe-key --key-id "$KEY_ARN" --query KeyMetadata.KeyState --output text
aws kms describe-key \
--key-id alias/labex-sec01-reference \
--query KeyMetadata.KeyState \
--output text
Espere PendingDeletion para sua chave e Enabled para a referência. O AWS View deve mostrar nenhuma concessão do leitor e Reference preserved. Use rm -f para remover apenas os artefatos locais de exportação nomeados; ele tolera um arquivo ausente sem excluir outros arquivos do projeto.
rm -f private-export.json private-export.kms restored-export.json read-export.json
Execute a verificação desta etapa enquanto o profile do operador ainda está disponível. Após ela passar, remova os profiles temporários da CLI desta VM e desfaça a variável da chave. Isso remove credenciais locais de sessão; não cancela a exclusão agendada da chave na nuvem.
rm -f /home/labex/.aws/credentials /home/labex/.aws/config
unset KEY_ARN
Resumo
Você criptografou bytes reais de uma exportação com uma chave KMS do cliente e um contexto não secreto, concedeu a uma função leitora Decrypt na chave exata e recuperou os bytes originais. Um contexto incorreto, uma concessão removida e uma chave desabilitada causaram falhas distintas. Depois, você retirou de uso a chave do laboratório por meio de seu período de espera para exclusão, preservando a referência não relacionada.
Para aprofundar o tema, consulte a documentação da AWS: Contexto de criptografia e vínculo com o texto cifrado; Exclusão de chaves KMS e período de espera.



