Usar a criptografia do lado do servidor com chaves do AWS KMS (SSE-KMS) em buckets de diretório
Os controles de segurança do AWS KMS podem ajudá-lo a satisfazer os requisitos de conformidade relacionados à criptografia. É possível optar por configurar buckets de diretório para usar a criptografia do lado do servidor com chaves do AWS Key Management Service (AWS KMS) (SSE-KMS) e usar essas chaves do KMS para proteger os dados em buckets de diretório do Amazon S3. Para obter mais informações sobre SSE-KMS, consulte Usar criptografia do lado do servidor com o AWS KMS (SSE-KMS).
Permissões
Para fazer upload ou baixar um objeto criptografado com uma AWS KMS key de ou para o Amazon S3, você precisa das permissões kms:GenerateDataKey
e kms:Decrypt
na chave. Para ter mais informações, consulte Permitir que os usuários da chave usem uma chave do KMS para operações criptográficas no Guia do desenvolvedor do AWS Key Management Service. 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.
Para ter mais informações sobre chaves do KMS, consulte Especificando criptografia no lado do servidor com o AWS KMS (SSE-KMS).
Tópicos
- AWS KMS keys
- Usar SSE-KMS para operações entre contas
- Amazon S3 Bucket Keys
- Como exigir SSE-KMS
- Contexto de criptografia
- Enviar solicitações para objetos criptografados do AWS KMS
- Realizar auditoria da criptografia SSE-KMS em buckets de diretório
- Especificar a criptografia do lado do servidor com o AWS KMS (SSE-KMS) para novos uploads de objetos em buckets de diretório
AWS KMS keys
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 dex-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.
Ao especificar uma chave do AWS KMS gerenciada pelo cliente para criptografia no bucket de diretório, use somente o ID ou o ARN da chave. O formato de alias da chave do KMS não é aceito.
Para ter mais informações sobre chaves do KMS, consulte AWS KMS keys.
Usar SSE-KMS para operações entre contas
Ao utilizar a criptografia para operações entre contas em buckets de diretório, lembre-se do seguinte:
-
Se você quiser conceder acesso entre contas aos objetos do S3, configure uma política de chave gerenciada pelo cliente para permitir o acesso de outra conta.
-
Para especificar uma chave gerenciada pelo cliente, é necessário usar um ARN de chave do KMS totalmente qualificado.
Amazon S3 Bucket Keys
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.
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 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 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.
As chaves de bucket do S3 são usadas por um período limitado no Amazon S3, o que reduz ainda mais a necessidade de o Amazon S3 fazer solicitações ao AWS KMS para concluir operações de criptografia. Para ter mais informações sobre como usar chaves de bucket do S3, consulte Amazon S3 Bucket Keys e Redução do custo do SSE-KMS com chaves de bucket do Amazon S3.
Como exigir SSE-KMS
Para exigir SSE-KMS de todos os objetos em um bucket de diretório específico, use uma política de bucket. Por exemplo, ao usar a operação de API CreateSession
para conceder permissão para fazer upload de um novo objeto (PutObject
, CopyObject
e CreateMultipartUpload
), a política de bucket a seguir negará a permissão de upload de objeto (s3express:CreateSession
) a todos se a solicitação CreateSession
não incluir um cabeçalho x-amz-server-side-encryption-aws-kms-key-id
que solicite SSE-KMS.
{ "Version":"2012-10-17", "Id":"UploadObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3express:CreateSession", "Resource":"arn:aws:s3express:
region
:account-id
:bucket/bucket-base-name
--azid
--x-s3/*", "Condition":{ "Null":{ "s3express: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 s3express: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:
. O AWS Identity and Access Management não validará se a string para region
:acct-id
:key/key-id
s3express:x-amz-server-side-encryption-aws-kms-key-id
existe. o ID de chave do AWS KMS que o Amazon S3 usa para a criptografia de objetos deve corresponder ao ID de chave do AWS KMS na política. Caso contrário, o Amazon S3 negará a solicitação.
Para ter mais informações sobre como usar a SSE-KMS para uploads de novos objetos, consulte Especificar a criptografia do lado do servidor com o AWS KMS (SSE-KMS) para novos uploads de objetos em buckets de diretório.
Para ter uma lista completa de chaves de condição específicas de buckets de diretório, consulte Autorizar APIs de endpoints regionais com o IAM.
Contexto de criptografia
No caso de buckets de diretório, contexto de criptografia é um conjunto de pares de chave-valor que contêm informações contextuais sobre os dados. Não é possível fornecer um valor de contexto de criptografia adicional. Para obter mais informações sobre o contexto de criptografia, consulte Contexto de criptografia.
Por padrão, se você usar a SSE-KMS em um bucket de diretório, o Amazon S3 usará o nome do recurso da Amazon (ARN) do bucket como o par de contexto de criptografia:
arn:aws:s3express:
region
:account-id
:bucket/bucket-base-name
--azid
--x-s3
As políticas do IAM ou as políticas de chave do AWS KMS devem usar o ARN do bucket como contexto de criptografia.
Também é possível fornecer um par de contexto de criptografia explícito usando o cabeçalho x-amz-server-side-encryption-context
em uma solicitação de API de endpoint de zona, como CreateSession. O valor desse cabeçalho é uma string codificada em base64 de um JSON codificado em UTF-8, que apresenta o contexto de criptografia como pares de chave-valor. Para buckets de diretório, o contexto de criptografia deve corresponder ao contexto de criptografia padrão: o nome do recurso da Amazon (ARN) do bucket. Além disso, como o contexto de criptografia não é criptografado, ele não deve incluir informações sigilosas.
É possível usar o contexto de criptografia para identificar e categorizar suas operações de criptografia. Também é possível usar o valor do ARN do contexto de criptografia padrão para monitorar solicitações relevantes no AWS CloudTrail visualizando qual ARN do bucket de diretório foi usado com qual chave de criptografia.
No campo requestParameters
de um arquivo de log do CloudTrail, se você usar a SSE-KMS em um bucket de diretório, o valor do contexto de criptografia será o ARN do bucket.
"encryptionContext": { "aws:s3express:arn": "arn:aws:s3:::
arn:aws:s3express:
" }region
:account-id
:bucket/bucket-base-name
--azid
--x-s3
Além disso, para criptografia de objetos com SSE-KMS em um bucket de diretório, seus eventos do AWS KMS CloudTrail registram o ARN do bucket em vez do ARN do objeto.
Enviar solicitações para objetos criptografados do AWS KMS
Os buckets de diretório só podem ser acessados por meio de HTTPS (TLS). Além disso, os buckets de diretório assinam solicitações usando o AWS Signature Version 4 (SigV4). Para ter mais informações sobre o envio de solicitações de objetos criptografados do AWS KMS, consulte Enviar solicitações para objetos criptografados do AWS KMS.
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
.
Realizar auditoria da criptografia SSE-KMS em buckets de diretório
Para auditar o uso das chaves do AWS KMS para seus dados criptografados por SSE-KMS, você pode usar logs do AWS CloudTrail. Você pode obter informações sobre suas operações criptográficas, como GenerateDataKey e Decrypt. O CloudTrail oferece suporte a vários valores de atributos para filtrar a pesquisa, como nome do evento, nome de usuário e origem do evento.