Especificar a criptografia do lado do servidor com o AWS KMS (SSE-KMS) para novos uploads de objetos em buckets de diretório - Amazon Simple Storage Service

Especificar a criptografia do lado do servidor com o AWS KMS (SSE-KMS) para novos uploads de objetos em buckets de diretório

Em buckets de diretório, para criptografar dados, é possível usar a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) (padrão) ou com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS). Recomendamos que a criptografia padrão do bucket use a configuração desejada e que você não a substitua em suas solicitações CreateSession ou de objetos PUT. Desse modo, os novos objetos são criptografados automaticamente com as configurações de criptografia desejadas. Para ter mais informações sobre os comportamentos de substituição de criptografia em buckets de diretório, consulte Specifying server-side encryption with AWS KMS for new object uploads.

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. Se você quiser especificar um tipo de criptografia diferente para um bucket de diretório, é possível usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS). Para criptografar novos objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Não há suporte para Chave gerenciada pela AWS (aws/s3). A configuração de SSE-KMS só comporta uma chave gerenciada pelo cliente por bucket de diretório durante a vida útil do bucket. Depois que você especifica uma chave gerenciada pelo cliente para SSE-KMS, não é possível substituí-la pela configuração de SSE-KMS do bucket. Depois, ao especificar as configurações de criptografia do lado do servidor para novos objetos com SSE-KMS, é necessário garantir que a chave de criptografia seja a mesma chave gerenciada pelo cliente que você especificou para a configuração de criptografia padrão do bucket de diretório. Para usar uma nova chave gerenciada pelo cliente em seus dados, recomendamos copiar os objetos existentes em um novo bucket de diretório com uma nova chave gerenciada pelo cliente.

É possível aplicar criptografia durante o upload de um novo objeto ou ao copiar um objeto existente. Se você alterar a criptografia de um objeto, um novo objeto será criado para substituir o antigo.

É possível especificar a SSE-KMS utilizando as operações da API REST, SDKs da AWS e a AWS Command Line Interface (AWS CLI).

nota
  • Para buckets de diretório, os comportamentos de substituição de criptografia são os seguintes:

    • Ao usar CreateSession com a API REST para autenticar e autorizar solicitações de API de endpoint de zona, exceto CopyObject e UploadPartCopy, será possível substituir as configurações de criptografia para SSE-S3 ou SSE-KMS somente se você tiver especificado a criptografia padrão do bucket com SSE-KMS anteriormente.

    • Ao usar CreateSession com a AWS CLI ou com os SDKs da AWS para autenticar e autorizar solicitações de API de endpoint de zona, exceto CopyObject e UploadPartCopy, não é possível substituir as configurações de criptografia de forma alguma.

    • Ao fazer solicitações CopyObject, será possível substituir as configurações de criptografia como SSE-S3 ou SSE-KMS somente se você tiver especificado a criptografia padrão do bucket com SSE-KMS anteriormente. Ao fazer solicitações UploadPartCopy, não é possível substituir as configurações de criptografia.

  • 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.

  • 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.

nota

Somente uma chave gerenciada pelo cliente é aceita por bucket de diretório durante o ciclo de vida do bucket. Não há suporte para Chave gerenciada pela AWS (aws/s3). Depois que você especificar a SSE-KMS como a configuração de criptografia padrão do bucket com uma chave gerenciada pelo cliente, não será possível alterar a chave gerenciada pelo cliente para a configuração SSE-KMS do bucket.

Em operações de API de endpoint de zona (nível de objeto), com exceção de CopyObject e UploadPartCopy, você autentica e autoriza solicitações por meio de CreateSession para ter baixa latência. Recomendamos que a criptografia padrão do bucket use as configurações desejadas e que você não a substitua em suas solicitações CreateSession ou de objetos PUT. Desse modo, os novos objetos são criptografados automaticamente com as configurações de criptografia desejadas. Para criptografar novos objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Dessa forma, quando uma sessão é criada para operações de API de endpoint de zona, novos objetos são automaticamente criptografados e descriptografados com chaves de SSE-KMS e de bucket do S3 durante a sessão. Para ter mais informações sobre os comportamentos de substituição de criptografia em buckets de diretório, consulte Specifying server-side encryption with AWS KMS for new object uploads.

Nas chamadas de API de endpoint de zona (exceto CopyObject e UploadPartCopy) utilizando a API REST, não é possível substituir os valores das configurações de criptografia (x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id, x-amz-server-side-encryption-context e x-amz-server-side-encryption-bucket-key-enabled) da solicitação CreateSession. Não é necessário especificar explicitamente esses valores de configuração de criptografia em chamadas de API de endpoint de zona. O Amazon S3 usará os valores das configurações de criptografia da solicitação CreateSession para proteger novos objetos no bucket de diretório.

nota

Quando você usa a AWS CLI ou os SDKs da AWS, para CreateSession, o token da sessão é atualizado automaticamente para evitar interrupções no serviço quando uma sessão expira. A AWS CLI ou os SDKs da AWS usam a configuração de criptografia padrão do bucket para a solicitação CreateSession. A substituição dos valores de configuração de criptografia não é aceita na solicitação CreateSession. Além disso, nas chamadas de API de endpoint de zona (exceto CopyObject e UploadPartCopy), não é possível substituir os valores de configuração de criptografia da solicitação CreateSession.

Com relação a CopyObject, para criptografar novas cópias de objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Depois, ao especificar as configurações de criptografia do lado do servidor para novas cópias de objetos com SSE-KMS, é necessário garantir que a chave de criptografia seja a mesma chave gerenciada pelo cliente que você especificou para a configuração de criptografia padrão do bucket de diretório. Quanto a UploadPartCopy, para criptografar novas cópias de partes de objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Não é possível especificar as configurações de criptografia do lado do servidor para novas cópias de partes do objeto com SSE-KMS nos cabeçalhos da solicitação UploadPartCopy. Além disso, as configurações de criptografia fornecidas na solicitação CreateMultipartUpload devem corresponder à configuração de criptografia padrão do bucket de destino.

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

As operações da API REST em nível de objeto nos buckets de diretório a seguir 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.

  • CreateSession: ao usar operações de API de endpoint de zona (em nível de objeto) (exceto CopyObject e UploadPartCopy), é possível especificar esses cabeçalhos de solicitação.

  • 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.

  • 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 pelo AWS KMS falharão se elas não forem feitas usando 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)

Caso você especifique x-amz-server-side-encryption:aws:kms, a API do Amazon S3 permite que você forneça, opcionalmente, um contexto de criptografia explícito com o cabeçalho x-amz-server-side-encryption-context. Para buckets de diretório, contexto de criptografia é um conjunto de pares de chave-valor que contêm informações contextuais sobre os dados. O valor deve corresponder ao contexto de criptografia padrão: o nome do recurso da Amazon (ARN) do bucket. Não é possível fornecer um valor de contexto de criptografia adicional.

Para ter informações sobre o contexto de criptografia nos buckets de diretório, 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.

A configuração de SSE-KMS só comporta uma chave gerenciada pelo cliente por bucket de diretório durante a vida útil do bucket. Não há suporte para Chave gerenciada pela AWS (aws/s3). Além disso, depois que você especifica uma chave gerenciada pelo cliente para SSE-KMS, não é possível substituí-la pela configuração de SSE-KMS do bucket.

É possível identificar a chave gerenciada pelo cliente que você especificou para a configuração SSE-KMS do bucket, da seguinte forma:

  • Faça uma solicitação de operação de API HeadObject para encontrar o valor de x-amz-server-side-encryption-aws-kms-key-id em sua resposta.

Para usar uma nova chave gerenciada pelo cliente em seus dados, recomendamos copiar os objetos existentes em um novo bucket de diretório com uma nova chave gerenciada pelo cliente.

Para ter informações sobre o contexto de criptografia nos buckets de diretório, consulte AWS KMS keys.

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

As chaves de bucket do S3 estão sempre habilitadas para operações GET e PUT em um bucket de diretório e não podem ser desabilitadas. Não são aceitas chaves de bucket do S3 quando você copia objetos criptografados por SSE-KMS de buckets de uso geral para buckets de diretório, de buckets de diretório para buckets de uso geral ou entre buckets de diretório, por meio de CopyObject, de UploadPartCopy, da operação Copy em Operações em Lote ou de trabalhos de import. Nesse caso, o Amazon S3 faz uma chamada para o AWS KMS sempre que uma solicitação de cópia é feita para um objeto criptografado pelo KMS. Para ter informações sobre as chaves de bucket do S3 em buckets de diretório, consulte Contexto de criptografia.

nota

Ao usar a AWS CLI, para CreateSession, o token da sessão é atualizado automaticamente para evitar interrupções no serviço quando uma sessão expira. A substituição dos valores de configuração de criptografia não é aceita para a solicitação CreateSession. Além disso, nas chamadas de API de endpoint de zona (exceto CopyObject e UploadPartCopy), não é possível substituir os valores de configuração de criptografia da solicitação CreateSession.

Para criptografar novos objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Dessa forma, quando uma sessão é criada para operações de API de endpoint de zona, novos objetos são automaticamente criptografados e descriptografados com chaves de SSE-KMS e de bucket do S3 durante a sessão.

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, use o comando put-bucket-encryption para definir a configuração de criptografia padrão do bucket de diretório como SSE-KMS (aws:kms). Especificamente, 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, deverá fornecer um ID da chave do AWS KMS gerenciada pelo cliente. Os buckets de diretório não usam uma chave gerenciada pela AWS. Para obter um exemplo de comando, consulte Uso do AWS CLI.

Desse modo, quando você faz upload de um novo objeto com o comando a seguir, o Amazon S3 usa as configurações do bucket para criptografia padrão para criptografar o objeto por padrão.

aws s3api put-object --bucket bucket-base-name--azid--x-s3 --key example-object-key --body filepath

Não é necessário adicionar -\-bucket-key-enabled explicitamente em comandos de operações de API de endpoint de zona. As chaves de bucket do S3 estão sempre habilitadas para operações GET e PUT em um bucket de diretório e não podem ser desabilitadas. Não são aceitas chaves de bucket do S3 quando você copia objetos criptografados por SSE-KMS de buckets de uso geral para buckets de diretório, de buckets de diretório para buckets de uso geral ou entre buckets de diretório, por meio de CopyObject, de UploadPartCopy, da operação Copy em Operações em Lote ou de trabalhos de import. Nesse caso, o Amazon S3 faz uma chamada para o AWS KMS sempre que uma solicitação de cópia é feita para um objeto criptografado pelo KMS.

É possível copiar um objeto de um bucket de origem (por exemplo, um bucket de uso geral) em um novo bucket (por exemplo, um bucket de diretório) e usar a criptografia SSE-KMS para os objetos de destino. Para isso, use o comando put-bucket-encryption para definir a configuração de criptografia padrão do bucket de destino (por exemplo, um bucket de diretório) como SSE-KMS (aws:kms). Para obter um exemplo de comando, consulte Uso do AWS CLI. Desse modo, quando você copia um objeto com o comando a seguir, o Amazon S3 usa as configurações do bucket para criptografia padrão para criptografar o objeto por padrão.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--azid--x-s3 --key example-object-key

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.

nota

Ao usar os SDKs da AWS para CreateSession, o token da sessão é atualizado automaticamente para evitar interrupções no serviço quando uma sessão expira. A substituição dos valores de configuração de criptografia não é aceita para a solicitação CreateSession. Além disso, nas chamadas de API de endpoint de zona (exceto CopyObject e UploadPartCopy), não é possível substituir os valores de configuração de criptografia da solicitação CreateSession.

Para criptografar novos objetos em um bucket de diretório com SSE-KMS, é necessário especificar SSE-KMS como a configuração de criptografia padrão do bucket de diretório com uma chave do KMS (especificamente, uma chave gerenciada pelo cliente). Dessa forma, quando uma sessão é criada para operações de API de endpoint de zona, novos objetos são automaticamente criptografados e descriptografados com chaves de SSE-KMS e de bucket do S3 durante a sessão.

Para ter mais informações sobre o uso de SDKs da AWS para definir a configuração de criptografia padrão de um bucket de diretório como SSE-KMS, consulte Uso dos AWS SDKs.

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 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.