Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS) - Amazon Simple Storage Service

Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS)

Importante

O Amazon S3 agora aplica criptografia do lado do servidor com chaves gerenciadas do Amazon S3 (SSE-S3) como nível básico de criptografia para cada bucket no Amazon S3. Desde 5 de janeiro de 2023, todos os novos uploads de objetos para o Amazon S3 são automaticamente criptografados sem custo adicional e sem impacto na performance. O status de criptografia automática para a configuração de criptografia padrão do bucket do S3 e para novos uploads de objetos está disponível em logs do AWS CloudTrail, no Inventário do S3, na Lente de Armazenamento do S3, no console do Amazon S3 e como cabeçalho adicional de resposta da API do Amazon S3 na AWS Command Line Interface e em AWS SDKs. Para obter mais informações, consulte Perguntas frequentes sobre criptografia padrão.

A criptografia do lado do servidor é a criptografia de dados em seu destino pela aplicação ou serviço que os recebe.

O Amazon S3 ativa automaticamente a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) para uploads de novos objetos.

A menos que você especifique o contrário, os buckets usam SSE-S3 por padrão para criptografar objetos. No entanto, você pode optar por configurar buckets para usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) em vez disso. Para ter mais informações, consulte Especificando criptografia no lado do servidor com o AWS KMS (SSE-KMS).

O AWS KMS é um serviço que combina hardware e software seguros e altamente disponíveis para fornecer um sistema de gerenciamento de chaves escalado para a nuvem. O Amazon S3 usa criptografia do lado do servidor com AWS KMS (SSE-KMS) para criptografar os dados do objeto do S3. Além disso, quando a SSE-KMS é solicitada para o objeto, a soma de verificação do S3 (como parte dos metadados do objeto) é armazenada em formato criptografado. Para obter mais informações sobre a soma de verificação, consulte Verificar a integridade do objeto.

Se você usar chaves do KMS, poderá usar o AWS KMS por meio do AWS Management Console ou da API do AWS KMS para fazer o seguinte:

  • Criar, visualizar, editar, monitorar, ativar/desativar, rotacionar e programar a exclusão de chaves KMS, tudo de forma centralizada.

  • Definir políticas que controlam como e por quem as chaves do KMS podem ser usadas.

  • Auditar o uso para provar que elas estão sendo usadas corretamente. A auditoria é compatível com a API do AWS KMS, mas não com o AWS Management Console do AWS KMS.

Os controles de segurança do AWS KMS podem ajudá-lo a satisfazer os requisitos de conformidade relacionados à criptografia. Você pode usar essas chaves do KMS para proteger seus dados em buckets do Amazon S3. Ao usar a criptografia SSE-KMS com um bucket do S3, as AWS KMS keys devem estar na mesma região que o bucket.

Não há custos adicionais por usar o AWS KMS keys. Para obter mais informações, consulte Conceitos de AWS KMS key no Guia do desenvolvedor do AWS Key Management Service e Preços do AWS KMS.

Permissões

Para carregar um objeto criptografado com uma AWS KMS key para o Amazon S3, você precisa de permissões kms:GenerateDataKey na chave. Para baixar um objeto criptografado com uma AWS KMS key, você precisa de permissões kms:Decrypt. Para obter informações sobre permissões do AWS KMS necessárias para uploads de várias partes, consulte API de multipart upload e permissões.

Importante

Analise cuidadosamente as permissões concedidas em suas políticas de chave do KMS. Sempre restrinja as permissões de política de chave do KMS gerenciada pelo cliente somente às entidades principais do IAM e a serviços da AWS que precisam acessar a ação de chave do AWS KMS pertinente. Para obter mais informações, consulte Usar políticas de chaves no AWS KMS.

AWS KMS keys

Ao usar criptografia do lado do servidor com o AWS KMS (SSE-KMS), você pode usar a chave gerenciada pela AWS padrão ou especificar uma chave gerenciada pelo cliente que você já tenha criado. O AWS KMS é compatível com criptografia envelopada. O S3 usa os recursos do AWS KMS de criptografia envelopada para proteger ainda mais seus dados. Criptografia envelopada é a prática de criptografar dados de texto simples com uma chave de dados, depois criptografar essa chave de dados com uma chave do KMS. Para ter mais informações sobre a criptografia de envelope, consulte Criptografia de envelope no Guia do desenvolvedor do AWS Key Management Service.

Se você não especificar uma chave gerenciada pelo cliente, o Amazon S3 criará automaticamente uma Chave gerenciada pela AWS em sua Conta da AWS na primeira vez que você adicionar um objeto criptografado com SSE-KMS a um bucket. Por padrão, o Amazon S3 usa essa chave do KMS para SSE-KMS.

nota

Objetos criptografados usando SSE-KMS com Chaves gerenciadas pela AWS não podem ser compartilhados entre contas. Se você precisar replicar dados de SSE-KMS entre contas, será necessário usar uma chave gerenciada pelo cliente do AWS KMS.

Se você quiser usar uma chave gerenciada pelo cliente para SSE-KMS, crie uma chave de criptografia simétrica gerenciada pelo cliente antes de configurar a SSE-KMS. Depois, ao configurar o SSE-KMS para seu bucket, especifique a chave gerenciada pelo cliente existente. Para obter mais informações sobre chaves de criptografia simétrica, consulte Chaves do KMS de criptografia simétrica, no Guia do desenvolvedor do AWS Key Management Service.

A criação de uma chave gerenciada pelo cliente oferece a você mais flexibilidade e controle. Por exemplo, você pode criar, alternar e desabilitar chaves gerenciadas pelo cliente. Você também pode definir controles de acesso e auditar a chave gerenciada pelo cliente que você usa para proteger seus dados. Para obter mais informações sobre chaves gerenciadas pelo cliente e pela AWS, consulte Chaves de clientes e chaves da AWS no Guia do desenvolvedor do AWS Key Management Service.

nota

Ao usar a criptografia do lado do servidor com uma chave gerenciada pelo cliente que é armazenada em um armazenamento de chaves externo, ao contrário das chaves do KMS padrão, você é responsável por garantir a disponibilidade e a durabilidade do seu material de chaves. Para obter mais informações sobre armazenamentos de chaves externos e como eles mudam o modelo de responsabilidade compartilhada, consulte Armazenamentos de chaves externos no Guia do desenvolvedor do AWS Key Management Service.

Se você optar por criptografar seus dados usando uma Chave gerenciada pela AWS ou uma chave gerenciada pelo cliente, o AWS KMS e o Amazon S3 realizarão as seguintes ações de criptografia envelopada:

  1. O Amazon S3 solicitará uma chave de dados em texto simples e uma cópia da chave criptografada na chave do KMS especificada.

  2. O AWS KMS gera uma chave de dados, criptografa-a com a chave do KMS e envia a chave de dados em texto simples e a chave de dados criptografada ao Amazon S3.

  3. O Amazon S3 criptografa os dados usando a chave de dados e remove a chave de texto não criptografado da memória assim que possível, após o uso.

  4. O Amazon S3 armazena a chave de dados criptografada como metadados com os dados criptografados.

Quando você solicitar que os dados sejam descriptografados, o Amazon S3 e o AWS KMS farão o seguinte:

  1. O Amazon S3 envia a chave de dados criptografada ao AWS KMS em uma solicitação Decrypt.

  2. O AWS KMS descriptografa a chave dos dados criptografados usando a mesma chave do KMS e retorna a chave de dados de texto simples para o Amazon S3.

  3. O Amazon S3 descriptografa os dados criptografados usando a chave de dados de texto simples e remove a chave de dados de texto simples da memória o quanto antes.

Importante

Ao usar uma AWS KMS key para criptografia no lado do servidor no Amazon S3, você deve escolher uma chave de criptografia do KMS simétrica. O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica. Para obter mais informações sobre essas chaves, consulte Chaves do KMS de criptografia simétrica no Guia do desenvolvedor do AWS Key Management Service.

Para identificar solicitações que especificam SSE-KMS, você pode usar as métricas All SSE-KMS requests (Todas as solicitações de SSE-KMS) e % all SSE-KMS requests (% de todas as solicitações de SSE-KMS) da Lente de Armazenamento do Amazon S3. A Lente de Armazenamento do S3 é um recurso de análise de armazenamento em nuvem que você pode usar para obter visibilidade em toda a organização sobre o uso e a atividade do armazenamento de objetos. Para obter mais informações, consulte Avaliar a atividade e o uso do armazenamento com o S3 Storage Lens. Para obter uma lista completa de métricas, consulte o Glossário de métricas da Lente de Armazenamento do S3.

Amazon S3 Bucket Keys

Ao configurar a criptografia do lado do servidor usando o AWS KMS (SSE-KMS), você pode configurar os buckets para usar chaves de bucket do S3 para SSE-KMS. Usar uma chave em nível de bucket para SSE-KMS pode reduzir os custos de solicitação do AWS KMS em até 99% ao reduzir o tráfego de solicitação do Amazon S3 para o AWS KMS.

Quando você configura o bucket para usar uma chave de bucket do S3 para SSE-KMS em novos objetos, o AWS KMS gera uma chave no nível de bucket usada para criar chaves de dados exclusivas para objetos no bucket. Essa chave de bucket do S3 é usada por um período limitado no Amazon S3, reduzindo ainda mais a necessidade do Amazon S3 fazer solicitações ao AWS KMS para concluir operações de criptografia. Para obter mais informações sobre como usar Chaves de bucket do S3, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3.

Exigir a criptografia no lado do servidor

Para exigir criptografia do lado do servidor de todos os objetos em um bucket específico do Amazon S3, é possível usar uma política de bucket. Por exemplo, a política de bucket a seguir negará permissão de upload de objeto (s3:PutObject) para todos se a solicitação não incluir um cabeçalho x-amz-server-side-encryption-aws-kms-key-id que solicita criptografia do lado do servidor com a SSE-KMS.

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

Para exigir que uma AWS KMS key específica seja usada para criptografar os objetos em um bucket, use a chave de condição s3:x-amz-server-side-encryption-aws-kms-key-id. Para especificar a chave do KMS, é necessário usar um nome do recurso da Amazon (ARN) da chave no formato arn:aws:kms:region:acct-id:key/key-id. O AWS Identity and Access Management não validará se a string para s3:x-amz-server-side-encryption-aws-kms-key-id existe.

nota

Quando você faz upload de um objeto, pode especificar a chave do KMS usando o cabeçalho x-amz-server-side-encryption-aws-kms-key-id. Se o cabeçalho não estiver presente na solicitação, o Amazon S3 assumirá que você quer usar a Chave gerenciada pela AWS. No entanto, o ID de chave do AWS KMS que o Amazon S3 usa para a criptografia de objeto deve corresponder ao ID de chave do AWS KMS na política. Caso contrário, o Amazon S3 negará a solicitação.

Consulte uma lista completa de chaves de condição específicas do Amazon S3 em Condition keys for Amazon S3 na Referência de autorização do serviço.

Contexto de criptografia

Um contexto de criptografia é um conjunto de pares chave-valor que contém informações contextuais adicionais sobre os dados. O contexto de criptografia não é criptografado. Quando um contexto de criptografia é especificado para uma operação criptográfica, o Amazon S3 deve especificar o mesmo contexto de criptografia da operação de descriptografia. Caso contrário, a descriptografia falhará. O AWS KMS usa o contexto de criptografia como dados autenticados adicionais (AAD) para oferecer suporte à criptografia autenticada. Para obter mais informações sobre o contexto de criptografia, consulte Contexto de criptografia no Guia do desenvolvedor do AWS Key Management Service.

Por padrão, o Amazon S3 usa o nome do recurso da Amazon (ARN) do objeto ou do bucket como o par de contexto de criptografia:

  • Se você usar o SSE-KMS sem habilitar uma chave de bucket do S3, o ARN do objeto será usado como o contexto de criptografia.

    arn:aws:s3:::object_ARN
  • Se você usar o SSE-KMS e habilitar uma chave de bucket do S3, o ARN do bucket será usado como o contexto de criptografia. Para obter mais informações sobre chaves de buckets do S3, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3.

    arn:aws:s3:::bucket_ARN

Opcionalmente, você pode fornecer um par de contexto de criptografia adicional usando o cabeçalho x-amz-server-side-encryption-context em uma solicitação s3:PutObject. No entanto, como o contexto de criptografia não é criptografado, ele não deve incluir informações sigilosas. O Amazon S3 armazena esse par de chaves adicional junto com o contexto de criptografia padrão. Ao processar sua solicitação PUT, o Amazon S3 acrescenta o contexto de criptografia padrão de aws:s3:arn àquele fornecido por você.

É possível usar o contexto de criptografia para identificar e categorizar suas operações de criptografia. Você também pode usar o valor do ARN do contexto de criptografia padrão para rastrear solicitações relevantes no AWS CloudTrail visualizando qual ARN do Amazon S3 foi usado com qual chave de criptografia.

No campo requestParameters de um arquivo de log do CloudTrail, o contexto de criptografia é parecido com este.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/file_name" }

Quando você usa o SSE-KMS com o recurso opcional S3 Bucket Keys, o valor do contexto de criptografia é o ARN do bucket.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }

Enviar solicitações para objetos criptografados do AWS KMS

  • Importante

    Todas as solicitações GET e PUT para objetos criptografados do AWS KMS devem ser criadas usando Secure Sockets Layer (SSL) ou Transport Layer Security (TLS). As solicitações também devem ser assinadas usando credenciais válidas, como AWS Signature Version 4 (ou AWS Signature Version 2).

    O AWS Signature Version 4 é o processo de adicionar informações de autenticação às solicitações da AWS enviadas por HTTP. Por segurança, a maioria das solicitações para AWS deve ser assinada com uma chave de acesso, que consiste em um ID de chave de acesso e na chave de acesso secreta. Essas duas chaves são comumente conhecidas como suas credenciais de segurança. Para obter mais informações, consulte Autenticação de solicitações (AWS Signature Version 4) e Processo de assinatura do Signature Version 4.

  • Importante

    Se o objeto usar SSE-KMS, não envie cabeçalhos de solicitação de criptografia para solicitações GET e solicitações HEAD. Caso contrário, você receberá um erro HTTP 400 Solicitação Inválida.