Atualizar a criptografia do lado do servidor para dados existentes - Amazon Simple Storage Service

Atualizar a criptografia do lado do servidor para dados existentes

Todos os buckets do Amazon S3 têm a criptografia configurada por padrão, e os objetos são automaticamente criptografados usando criptografia do lado do servidor, com chaves gerenciadas do Amazon S3 (SSE-S3). Essa configuração de criptografia padrão se aplica a todos os novos objetos em seus buckets do Amazon S3.

Usando a operação de API UpdateObjectEncryption, é possível atualizar atomicamente o tipo de criptografia do lado do servidor de um objeto criptografado de um bucket de uso geral da criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) para a criptografia do lado do servidor com chaves de criptografia do AWS Key Management Service (AWS KMS) (SSE-KMS). A operação de API UpdateObjectEncryption usa a criptografia envelopada para criptografar novamente a chave de dados utilizada para criptografar e descriptografar seu objeto com o tipo de criptografia do lado do servidor recém-especificado.

O Amazon S3 executa essa atualização do tipo de criptografia sem precisar realizar nenhuma movimentação de dados. Em outras palavras, ao usar a operação UpdateObjectEncryption, os dados não são copiados, os objetos arquivados no S3 Glacier Flexible Retrieval ou no S3 Glacier Deep Archive não são restaurados e os objetos na classe de armazenamento S3 Intelligent-Tiering não são movidos entre níveis. Além disso, a operação UpdateObjectEncryption preserva todas as propriedades de metadados do objeto, como classe de armazenamento, data de criação, data da última modificação, ETag e soma de verificação.

É possível usar a operação UpdateObjectEncryption com todas as classes de armazenamento do S3 aceitas por buckets de uso geral. Você pode usar a operação UpdateObjectEncryption para fazer o seguinte:

  • Alterar o tipo de criptografia de objetos da criptografia do lado do servidor com chaves de criptografia gerenciadas pelo Amazon S3 (SSE-S3) para a criptografia do lado do servidor com chaves de criptografia do AWS Key Management Service (AWS KMS) (SSE-KMS).

  • Atualizar os objetos criptografados com SSE-KMS em nível de objeto para usar chaves de bucket do S3, o que diminui o tráfego de solicitações do AWS KMS 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.

  • Alterar a chave do KMS gerenciada pelo cliente que é usada para criptografar seus dados para que você possa cumprir padrões personalizados de alternância de chaves.

nota

Não é possível usar essa operação com objetos de origem que não são criptografados ou são criptografados com a criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) ou chaves de criptografia fornecidas pelo cliente (SSE-C).

A operação UpdateObjectEncryption normalmente é concluída em milissegundos, independentemente do tamanho objeto ou da classe de armazenamento, como S3 Glacier Flexible Retrieval ou S3 Glacier Deep Archive. Como essa operação não é contabilizada como um acesso para o S3 Intelligent-Tiering, os objetos no nível Infrequent Access ou Archive Instant Access não voltarão automaticamente para o nível Frequent Access o tipo de criptografia do lado do servidor do objeto for alterado.

UpdateObjectEncryption é uma operação de API em nível de objeto (plano de dados) que é registrada em logs de acesso ao servidor do Amazon S3 e em eventos de dados do AWS CloudTrail. Para obter mais informações, consulte Opções de registro em log para o Amazon S3.

A operação UpdateObjectEncryption tem o mesmo preço das solicitações PUT, COPY, POST e LIST (por 1.000 solicitações) e é sempre cobrada como uma solicitação da classe de armazenamento S3 Standard, independentemente da classe de armazenamento do objeto subjacente. Para obter mais informações, consulte Preço do Amazon S3.

Restrições e considerações

Ao usar a operação UpdateObjectEncryption, as seguintes restrições e considerações se aplicam:

  • A operação UpdateObjectEncryption não permite objetos não criptografados ou objetos criptografados com a criptografia de camada dupla do lado do servidor com AWS KMS keys (DSSE-KMS) ou chaves de criptografia fornecidas pelo cliente (SSE-C). Além disso, não é possível especificar SSE-S3 como o novo tipo de criptografia na solicitação UpdateObjectEncryption.

  • É possível usar a operação UpdateObjectEncryption para atualizar objetos em buckets que têm o Versionamento do S3 habilitado. Para atualizar o tipo de criptografia de uma versão específica, é necessário especificar um ID de versão na solicitação UpdateObjectEncryption. Se você não especificar um ID de versão, a solicitação UpdateObjectEncryption atuará na versão atual do objeto. Para obter mais informações sobre o S3 Versioning, consulte Reter várias versões de objetos com o Versionamento do S3.

  • A operação UpdateObjectEncryption falha em qualquer objeto que tenha um modo de retenção do Bloqueio de Objetos do S3 ou uma retenção jurídica aplicados a ele. Se um objeto tiver um período de retenção no modo de governança ou uma retenção jurídica, primeiro será necessário remover o status de bloqueio de objetos para emitir a solicitação UpdateObjectEncryption. Não é possível usar a operação UpdateObjectEncryption com objetos que tenham um período de retenção do modo de conformidade do Bloqueio de Objetos aplicado a eles. Para obter mais informações sobre bloqueio de objetos do S3, consulte Bloquear objetos com o Bloqueio de Objetos.

  • As solicitações UpdateObjectEncryption em buckets de origem com replicação em tempo real habilitada não iniciarão eventos de réplica no bucket de destino. Se você quiser alterar o tipo de criptografia dos objetos nos buckets de origem e destino, será necessário iniciar solicitações UpdateObjectEncryption separadas nos objetos nos buckets de origem e destino.

  • Por padrão, todas as solicitações UpdateObjectEncryption que especificam uma chave do KMS gerenciada pelo cliente são restritas às chaves do KMS pertencentes à Conta da AWS do proprietário do bucket. Se você estiver usando o AWS Organizations, existe a possibilidade de usar AWS KMS keys pertencentes a outras contas de membro em sua organização. Para isso, entre em contato com o AWS Support para fazer essa solicitação.

  • Se você usa o recurso Replicação em Lote do S3 para replicar conjuntos de dados entre regiões e já tiver atualizado o tipo de criptografia do lado do servidor de SSE-S3 para SSE-KMS, pode ser que você precise de permissões adicionais. No bucket da região de origem, é necessário ter a permissão kms:decrypt. Em seguida, é necessário ter as permissões kms:decrypt e kms:encrypt para o bucket na região de destino.

  • É necessário fornecer um ARN completo da chave do KMS na solicitação UpdateObjectEncryption. Não é possível usar um nome de alias ou ARN de alias. É possível determinar o ARN completo da chave do KMS no console do AWS KMS ou usando a API DescribeKey do AWS KMS.

Permissões obrigatórias

Para realizar a operação UpdateObjectEncryption, você deve ter as seguintes permissões:

  • s3:PutObject

  • s3:UpdateObjectEncryption

  • kms:Encrypt

  • kms:Decrypt

  • kms:GenerateDataKey

  • kms:ReEncrypt*

Se você estiver usando o AWS Organizations, para usar essa operação com chaves do KMS gerenciadas pelo cliente de outras Contas da AWS em sua organização, será necessário ter a permissão organizations:DescribeAccount. Também será necessário entrar em contato com o AWS Support se quiser usar AWS KMS keys pertencentes a outras contas de membro em sua organização.

Para realizar a operação UpdateObjectEncryption, adicione a política do AWS Identity and Access Management (IAM) a seguir ao seu perfil do IAM. Para usar essa política, substitua amzn-s3-demo-bucket pelo nome do seu bucket de uso geral e substitua os outros user input placeholders por usas próprias informações.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowUpdateObjectEncryption", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:UpdateObjectEncryption", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:ReEncrypt*", "organizations:DescribeAccount" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef" ] } ] }

Atualizar tipos de criptografia em massa

Para atualizar o tipo de criptografia do lado do servidor de mais de um objeto do Amazon S3 com uma única solicitação, você pode usar o recurso Operações em Lote do S3. É possível fornecer à funcionalidade Operações em Lote do S3 uma lista de objetos nos quais operar ou instruir essa funcionalidade para que gere uma lista de objetos com base em metadados de objeto, como prefixo, classe de armazenamento, data de criação, tipo de criptografia, ARN da chave do KMS ou status da chave de bucket do S3. O S3 Batch Operations chama a respectiva operação de API para executar a operação especificada. Um único trabalho de operações em lote pode realizar a operação especificada em bilhões de objetos em um bucket contendo exabytes de dados. Para obter mais informações sobre o recurso Operações em lote, consulte Executar operações de objetos em massa com o Operações em Lote.

O recurso S3 Batch Operations rastreia o progresso, envia notificações e armazena um relatório de conclusão detalhado de todas as ações, fornecendo uma experiência totalmente gerenciada, auditável e sem servidor. É possível usar o recurso Operações em Lote do S3 por meio do console do Amazon S3, da AWS Command Line Interface (AWS CLI), de SDKs da AWS ou da API REST do Amazon S3. Para obter mais informações, consulte Atualizar a criptografia de objetos.

Atualizar a criptografia de objetos

É possível atualizar o tipo de criptografia do lado do servidor para um objeto por meio da AWS Command Line Interface (AWS CLI), de SDKs da AWS ou da API REST do Amazon S3.

Atualizar a criptografia de um objeto

Para executar os comandos a seguir, você deve ter a AWS CLI instalada e configurada. Se ainda não tiver a AWS CLI instalada, consulte Instalar ou atualizar a versão mais recente da AWS CLI no Guia do usuário da AWS Command Line Interface.

Também é possível executar comandos da AWS CLI pelo console usando o AWS CloudShell. O AWS CloudShell é um shell pré-autenticado e baseado em navegador que você pode iniciar diretamente do Console de gerenciamento da AWS. Para ter mais informações, consulte What is CloudShell? e Getting started with AWS CloudShell no Guia do usuário do AWS CloudShell.

Como atualizar a criptografia de um objeto usando a AWS CLI

Para usar o comando a seguir, substitua os user input placeholders por suas próprias informações.

  1. Use o seguinte comando para atualizar a criptografia de um único objeto (index.html) em seu bucket de uso geral (por exemplo, amzn-s3-demo-bucket) e usar o SSE-KMS com uma chave de bucket do S3:

    aws s3api update-object-encryption \ --bucket amzn-s3-demo-bucket \ --key index.html \ --object-encryption '{"SSEKMS": { "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/f12a345a-678e-9bbb-1025-62e317037583", "BucketKeyEnabled": true }}'
    nota

    É necessário especificar o nome do recurso da Amazon (ARN) completo da AWS KMS key. Não é possível usar o ID da chave do KMS e o alias da chave do KMS.

  2. Execute o comando head-object para visualizar o tipo de criptografia atualizado do seu objeto:

    aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html

É possível enviar solicitações REST para atualizar a criptografia de um objeto. Para obter mais informações, consulte UpdateObjectEncryption.

É possível usar os SDKs da AWS para atualizar a criptografia de um objeto. Para ter mais informações, consulte a lista de SDKs compatíveis.

Java
exemplo

O exemplo do AWS SDK for Java 2.x a seguir atualiza o tipo de criptografia de um objeto em um bucket de uso geral para SSE-KMS.

public void updateObjectEncryption(String bucketName, String objectKey, String versionId, String kmsKeyArn, boolean bucketKeyEnabled) { // Create the target object encryption type. ObjectEncryption objectEncryption = ObjectEncryption.builder() .ssekms(SSEKMSEncryption.builder() .kmsKeyArn(kmsKeyArn) .bucketKeyEnabled(bucketKeyEnabled) .build()) .build(); // Create the UpdateObjectEncryption request. UpdateObjectEncryptionRequest request = UpdateObjectEncryptionRequest.builder() .bucket(bucketName) .key(objectKey) .versionId(versionId) .objectEncryption(objectEncryption) .build(); // Update the object encryption. try { getS3Client().updateObjectEncryption(request); logger.info("Object encryption updated to SSE-KMS for {} in bucket {}", objectKey, bucketName); } catch (S3Exception e) { logger.error("Failed to update to object encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } }
Python
exemplo

O exemplo do AWS SDK para Python (Boto3) a seguir mostra como atualizar o tipo de criptografia de um objeto em um bucket de uso geral para SSE-KMS.

response = client.update_object_encryption( Bucket='string', Key='string', VersionId='string', ObjectEncryption={ 'SSEKMS': { 'KMSKeyArn': 'string', 'BucketKeyEnabled': True|False } } )