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

Especificando criptografia no 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.

Todos os buckets do Amazon S3 têm criptografia configurada por padrão e todos os novos objetos que são carregados em um bucket do S3 são automaticamente criptografados em repouso. A criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) é a configuração de criptografia padrão para todos os buckets no Amazon S3. Para usar um tipo diferente de criptografia, você pode especificar a criptografia do lado do servidor a ser usada nas solicitações PUT do S3 ou definir a configuração de criptografia padrão no bucket de destino.

Se quiser especificar um tipo de criptografia diferente nas solicitações PUT, você pode usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS), criptografia de camada dupla do lado do servidor com chaves do AWS KMS (DSSE-KMS) ou criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C). Se quiser definir uma configuração de criptografia padrão diferente no bucket de destino, você pode usar SSE-KMS ou DSSE-KMS.

É possível aplicar criptografia durante o upload de um novo objeto ou ao copiar um objeto existente.

Você pode especificar a SSE-KMS usando o console do Amazon S3, operações da API REST, AWS SDKs e a AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte os tópicos a seguir.

nota

Você pode usar uma AWS KMS keys de várias regiões no Amazon S3. No entanto, o Amazon S3 trata no momento as chaves de várias regiões como se fossem chaves de região única e não usa os recursos de várias regiões da chave. Para obter mais informações, consulte Usar chaves de várias regiões no Guia do desenvolvedor doAWS Key Management Service.

nota

Se quiser usar uma chave do KMS que seja de propriedade de outra conta, você deverá ter permissão para usar a chave. Para obter mais informações sobre permissões entre contas para chaves do KMS, consulte Criar chaves do KMS que outras contas podem usar no Guia do desenvolvedor do AWS Key Management Service.

Este tópico descreve como definir ou alterar o tipo de criptografia de um objeto para usar criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) usando o console do Amazon S3.

nota
  • Se você alterar a criptografia de um objeto, um novo objeto será criado para substituir o antigo. Se o versionamento do S3 estiver habilitado, uma nova versão do objeto será criada e o objeto existente se tornará uma versão mais antiga. O perfil que altera a propriedade também se torna o proprietário do novo objeto (ou versão do objeto).

  • Para alterar o tipo de criptografia de um objeto que tem etiquetas definidas pelo usuário, você precisa ter a permissão s3:GetObjectTagging. Para alterar o tipo de criptografia de um objeto que não tem etiquetas definidas pelo usuário, mas que tem mais de 16 MB, você também precisa ter a permissão s3:GetObjectTagging.

    Se a política do bucket de destino negar a ação s3:GetObjectTagging, o tipo de criptografia do objeto será atualizado, mas as etiquetas definidas pelo usuário serão removidas do objeto e você receberá um erro.

Como adicionar ou alterar a criptografia de um objeto
  1. Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. No painel de navegação à esquerda, escolha Buckets.

  3. Na lista Buckets, escolha o nome do bucket que contém o objeto.

  4. Na lista Name (Nome), escolha o nome do objeto ao qual você deseja adicionar ou no qual deseja alterar a criptografia.

    A página de detalhes do objeto é exibida com várias seções que exibem as propriedades do objeto.

  5. Escolha a guia Properties (Propriedades).

  6. Role para baixo até a seção Configurações da criptografia do lado do servidor e escolha Editar.

    A página Edit server-side encryption (Editar criptografia do lado do servidor) é aberta.

  7. Em Criptografia do lado do servidor, em Configurações de criptografia, escolha Substituir configurações padrão do bucket de criptografia.

  8. Em Tipo de criptografia, escolha Criptografia do lado do servidor com chaves do AWS Key Management Service (SSE-KMS).

    Importante

    Se você usar a opção SSE-KMS em sua configuração de criptografia padrão, estará sujeito às cotas de solicitações por segundo (RPS) do AWS KMS. Para obter mais informações sobre as cotas do AWS KMS e como solicitar um aumento de cota, consulte Cotas no Guia do desenvolvedor do AWS Key Management Service.

  9. Em Chave do AWS KMS, realize um dos seguintes procedimentos para escolher sua chave do KMS:

    • Para escolher entre uma lista de chaves do KMS disponíveis, selecione Escolher de sua AWS KMS keys e escolha a chave do KMS na lista de chaves disponíveis.

      As chaves Chave gerenciada pela AWS (aws/s3) e as chaves gerenciadas pelo cliente são exibidas nessa lista. Para ter mais informações sobre chaves gerenciadas pelo cliente, consulte Chaves de clientes e chaves da AWS no Guia do desenvolvedor do AWS Key Management Service.

    • Para inserir o ARN da chave do KMS, selecione Inserir ARN da AWS KMS key e insira o ARN da chave do KMS no campo exibido.

    • Para criar uma chave gerenciada pelo cliente no console do AWS KMS, selecione Criar uma chave do KMS.

      Para ter mais informações sobre como criar uma AWS KMS key, consulte Criação de chaves no Guia do desenvolvedor do AWS Key Management Service.

    Importante

    Você só pode usar chaves do KMS disponíveis na mesma Região da AWS que o bucket. O console do Amazon S3 lista somente as primeiras 100 chaves do KMS na mesma região que o bucket. Para usar uma chave do KMS que não esteja listada, você deve inserir o ARN da chave do KMS. Se quiser usar uma chave do KMS que seja de propriedade de outra conta, primeiro você deverá ter permissão para usar a chave e, depois, inserir o ARN da chave do KMS.

    O Amazon S3 só é compatível com chaves do KMS de criptografia simétrica, e não com chaves assimétricas do KMS. Para ter mais informações, consulte Identificar chaves do KMS simétricas e assimétricas no Guia do desenvolvedor do AWS Key Management Service.

  10. Selecione Save changes.

nota

Essa ação aplica criptografia a todos os objetos especificados. Ao criptografar pastas, aguarde a conclusão da operação de salvamento antes de adicionar novos objetos à pasta.

Quando você cria um objeto, ou seja, quando você faz upload de um novo objeto ou copia um objeto existente, é possível especificar a utilização de criptografia do lado do servidor com AWS KMS keys (SSE-KMS) para criptografar os dados. Para fazer isso, adicione o cabeçalho x-amz-server-side-encryption à solicitação. Defina o valor do cabeçalho como o algoritmo de criptografia aws:kms. O Amazon S3 confirma que o objeto foi armazenado usando SSE-KMS retornando o cabeçalho de resposta x-amz-server-side-encryption.

Se você especificar o cabeçalho x-amz-server-side-encryption com um valor de aws:kms, também poderá usar os seguintes cabeçalhos de solicitação:

  • x-amz-server-side-encryption-aws-kms-key-id

  • x-amz-server-side-encryption-context

  • x-amz-server-side-encryption-bucket-key-enabled

Operações da API REST do Amazon S3 compatíveis com SSE-KMS

As seguintes operações da API REST aceitam os cabeçalhos de solicitação x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id, e x-amz-server-side-encryption-context.

  • PutObject: ao carregar dados usando a operação de APIPUT, é possível especificar esses cabeçalhos de solicitação.

  • CopyObject: quando você copia um objeto, há um objeto de origem e um objeto de destino. Ao transmitir cabeçalhos de SSE-KMS com a operação CopyObject, eles são aplicados somente ao objeto de destino. Ao copiar um objeto existente, independentemente de o objeto de origem ser criptografado ou não, o objeto de destino não é criptografado, a menos que você solicite explicitamente a criptografia do lado do servidor.

  • POST Object: ao usar uma operação POST para fazer upload de um objeto, em vez dos cabeçalhos de solicitação, você fornece as mesmas informações nos campos de formulário.

  • CreateMultipartUpload: ao fazer upload de objetos grandes usando a operação de API de upload multiparte, você pode especificar esses cabeçalhos. Esses cabeçalhos são especificados na solicitação CreateMultipartUpload.

Os cabeçalhos de resposta das operações de API REST a seguir retornam o cabeçalho x-amz-server-side-encryption quando um objeto é armazenado usando criptografia de servidor.

Importante
  • Todas as solicitações GET e PUT para um objeto protegido por AWS KMS falharão se elas não forem feitas usando Secure Sockets Layer (SSL), Transport Layer Security (TLS) ou Signature Version 4.

  • Se o objeto usar SSE-KMS, os cabeçalhos de solicitação de criptografia não deverão ser enviados para solicitações GET e solicitações HEAD,ou um erro HTTP 400 BadRequest será exibido.

Contexto de criptografia (x-amz-server-side-encryption-context)

Se você especificar x-amz-server-side-encryption:aws:kms, a API do Amazon S3 oferece suporte a um contexto de criptografia com o cabeçalho x-amz-server-side-encryption-context. Um contexto de criptografia é um conjunto de pares chave-valor que contém informações contextuais adicionais sobre os dados.

O Amazon S3 usa automaticamente o nome do recurso da Amazon (ARN) do objeto ou bucket como o par de contexto de criptografia. Se você usar o SSE-KMS sem habilitar uma chave de bucket do S3, você usará o ARN de objeto como seu contexto de criptografia, por exemplo, arn:aws:s3:::object_ARN. No entanto, se você usar o SSE-KMS e habilitar uma chave de bucket do S3, use o ARN do bucket para o contexto de criptografia, por exemplo, arn:aws:s3:::bucket_ARN.

Você também pode fornecer um par adicional de contexto de criptografia usando o cabeçalho x-amz-server-side-encryption-context. 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.

Para obter informações sobre o contexto de criptografia no Amazon S3, consulte Contexto de criptografia. Para obter informações gerais sobre o contexto de criptografia, consulte Conceitos do AWS Key Management Service: contexto de criptografia no Guia do desenvolvedor do AWS Key Management Service.

ID da chave do AWS KMS (x-amz-server-side-encryption-aws-kms-key-id)

Você pode usar o cabeçalho x-amz-server-side-encryption-aws-kms-key-id para especificar o ID da chave gerenciada pelo cliente usada para proteger os dados. Se você especificar o cabeçalho x-amz-server-side-encryption:aws:kms, mas não fornecer o cabeçalho x-amz-server-side-encryption-aws-kms-key-id, o Amazon S3 usará a Chave gerenciada pela AWS (aws/s3) para proteger os dados. Se desejar usar uma chave gerenciada pelo cliente, você deve fornecer o cabeçalho x-amz-server-side-encryption-aws-kms-key-id da chave gerenciada pelo cliente.

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.

Chaves de bucket do S3 (x-amz-server-side-encryption-aws-bucket-key-enabled)

Você pode usar o cabeçalho da solicitação x-amz-server-side-encryption-aws-bucket-key-enabled para habilitar ou desabilitar uma chave de bucket do S3 ao nível do objeto. As chaves de bucket do S3 podem reduzir os custos de solicitação do AWS KMS diminuindo o tráfego de solicitação do Amazon S3 para o AWS KMS. Para obter mais informações, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3.

Se você especificar o cabeçalho x-amz-server-side-encryption:aws:kms, mas não fornecer o cabeçalho x-amz-server-side-encryption-aws-bucket-key-enabled, o objeto usará as configurações da chave de bucket do S3 para o bucket de destino para criptografar seu objeto. Para obter mais informações, consulte Configurar uma chave de bucket do S3 no nível de objeto .

Para usar os exemplos de comandos da AWS CLI a seguir, substitua os user input placeholders por suas próprias informações.

Ao fazer upload de um novo objeto ou copiar um objeto existente, ou seja, você pode especificar a utilização de criptografia do lado do servidor com chaves do AWS KMS para criptografar seus dados. Para fazer isso, adicione o cabeçalho --server-side-encryption aws:kms à solicitação. Use --ssekms-key-id example-key-id para adicionar a chave do AWS KMS gerenciada pelo cliente que você criou. Se você especificar --server-side-encryption aws:kms, mas não fornecer um ID de chave do AWS KMS, o Amazon S3 usará uma chave gerenciada pela AWS.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --ssekms-encryption-context example-encryption-context --body filepath

Você pode habilitar ou desabilitar as chaves de bucket do S3 nas operações put-object ou copy-object adicionando --bucket-key-enabled ou --no-bucket-key-enabled. As chaves de bucket do S3 podem reduzir os custos de solicitação do AWS KMS diminuindo o tráfego de solicitação do Amazon S3 para o AWS KMS. Para obter mais informações, consulte Redução do custo do SSE-KMS com chaves de bucket do Amazon S3.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath

Você pode copiar um objeto de um bucket de origem para um novo bucket e especificar a criptografia SSE-KMS.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket amzn-s3-demo-bucket2 --key example-object-key --server-side-encryption aws:kms --sse-kms-key-id example-key-id --ssekms-encryption-context example-encryption-context

Ao usar AWS SDKs, é possível solicitar que o Amazon S3 use AWS KMS keys para criptografia do lado do servidor. Os exemplos a seguir mostram como usar a SSE-KMS com os AWS SDKs para Java e .NET. Para obter informações sobre outros SDKs, consulte Código de exemplo e bibliotecas no Centro do desenvolvedor da AWS.

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.

Operação do CopyObject

Ao copiar objetos, você adiciona as mesmas propriedades de solicitação (ServerSideEncryptionMethod e ServerSideEncryptionKeyManagementServiceKeyId) para solicitar ao Amazon S3 que utilize uma AWS KMS key. Para obter mais informações sobre cópia de objetos, consulte Copiar, mover e renomear objetos.

Operação do PUT

Java

Ao fazer upload de um objeto usando o AWS SDK for Java, você pode solicitar que o Amazon S3 use uma AWS KMS key adicionando a propriedade SSEAwsKeyManagementParams, conforme exibido na seguinte solicitação:

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

Nesse caso, o Amazon S3 usa a Chave gerenciada pela AWS (aws/s3). Para obter mais informações, consulte Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS). Como opção, é possível criar uma chave de criptografia simétrica do KMS e especificar isso na solicitação, conforme mostrado no seguinte exemplo:

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Para obter mais informações sobre como criar chaves gerenciadas pelo cliente, consulte Programação da API do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.

Para ver exemplos de código funcionais de upload de um objeto, consulte os seguintes tópicos. Para usar esses exemplos, é necessário atualizar os exemplos de código e fornecer informações de criptografia, conforme exibido no fragmento de código anterior.

.NET

Ao fazer upload de um objeto usando o AWS SDK for .NET, você pode solicitar que o Amazon S3 use uma AWS KMS key adicionando a propriedade ServerSideEncryptionMethod, conforme exibido na seguinte solicitação:

PutObjectRequest putRequest = new PutObjectRequest { BucketName = amzn-s3-demo-bucket, Key = keyName, // other properties ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

Nesse caso, o Amazon S3 usa a Chave gerenciada pela AWS. Para obter mais informações, consulte Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS). Como opção, você pode criar sua própria chave de criptografia simétrica do KMS gerenciada pelo cliente e especificar isso na solicitação, conforme mostrado no seguinte exemplo:

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = amzn-s3-demo-bucket, Key = keyName, // other properties ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

Para obter mais informações sobre como criar chaves gerenciadas pelo cliente, consulte Programação da API do AWS KMS no Guia do desenvolvedor do AWS Key Management Service.

Para ver exemplos de código funcionais de upload de um objeto, consulte os seguintes tópicos. Para usar esses exemplos, é necessário atualizar os exemplos de código e fornecer informações de criptografia, conforme exibido no fragmento de código anterior.

Pre-signed URLs

Java

Ao criar um URL pré-assinado para um objeto criptografado com uma AWS KMS key, você deverá especificar explicitamente o Signature Version 4, conforme mostrado no seguinte exemplo:

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

Para ver um exemplo de código, consulte Compartilhar objetos com URLs pré-assinados.

.NET

Ao criar um URL pré-assinado para um objeto criptografado com uma AWS KMS key, você deverá especificar explicitamente o Signature Version 4, conforme mostrado no seguinte exemplo:

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Para ver um exemplo de código, consulte Compartilhar objetos com URLs pré-assinados.