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 Get Started with AWS on LabEx, Conceda Privilégios Mínimos 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
Este laboratório oferece prática nos seguintes tópicos de exame.
- 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.
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.
Abra AWS View ao lado do Terminal 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)
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.
Fonte: AWS KMS.
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
Abra o AWS View. 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.

O leitor precisa do contexto correto, de uma concessão Decrypt e de uma chave habilitada para recuperar a exportação.
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.



