Criptografia e decodificação secretas em AWS Secrets Manager - AWS Secrets Manager

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criptografia e decodificação secretas em AWS Secrets Manager

O Secrets Manager usa criptografia de envelope com AWS KMS chaves e chaves de dados para proteger cada valor secreto. Sempre que o valor secreto em um segredo muda, o Secrets Manager solicita uma nova chave de dados AWS KMS para protegê-lo. A chave de dados é criptografada em uma chave do KMS e é armazenada nos metadados do segredo. Para descriptografar o segredo, o Secrets Manager primeiro descriptografa a chave de dados criptografada usando a chave KMS em. AWS KMS

O Secrets Manager não usa a chave do KMS para criptografar o valor do segredo diretamente. Em vez disso, ele usa a chave do KMS para gerar e criptografar uma chave de dados simétrica de Padrão de criptografia avançada (AES) de 256 bits e usa a chave de dados para criptografar o valor do segredo. O Secrets Manager usa a chave de dados de texto simples para criptografar o valor secreto externo e AWS KMS, em seguida, o remove da memória. Ele armazena a cópia criptografada da chave de dados nos metadados do segredo.

Ao criar um segredo, você pode escolher qualquer chave de criptografia simétrica gerenciada pelo cliente na região Conta da AWS e, ou você pode usar o Chave gerenciada pela AWS for Secrets Manager (aws/secretsmanager). Se você escolher o Chave gerenciada pela AWS aws/secretsmanager e ele ainda não existe, o Secrets Manager o cria e o associa ao segredo. É possível usar a mesma chave do KMS ou diferentes chaves do KMS para cada segredo na sua conta. Talvez você queira usar chaves KMS diferentes para definir permissões personalizadas nas chaves para um grupo de segredos ou se quiser auditar operações específicas para essas chaves. O Secrets Manager só oferece suporte a chaves de criptografia simétricas do KMS. Se você usar uma chave KMS em um armazenamento de chaves externas, as operações criptográficas na chave KMS podem levar mais tempo e ter menos confiabilidade e durabilidade, pois a solicitação precisa sair da AWS.

Para obter informações sobre alterar a chave de criptografia de um segredo, consulte Troque a chave de criptografia por um AWS Secrets Manager segredo.

Quando você altera a chave de criptografia, o Secrets Manager AWSCURRENT criptografa novamente e AWSPENDING cria AWSPREVIOUS versões com a nova chave. Para evitar bloquear você do segredo, o Secrets Manager mantém todas as versões existentes criptografadas com a chave anterior. Isso significa que você pode descriptografar AWSCURRENTAWSPENDING, e AWSPREVIOUS versões com a chave anterior ou a nova chave.

Para que isso só AWSCURRENT possa ser descriptografado pela nova chave de criptografia, crie uma nova versão do segredo com a nova chave. Então, para poder decifrar a versão AWSCURRENT secreta, você deve ter permissão para a nova chave.

Para encontrar a chave KMS associada a um segredo, visualize o segredo no console ou ligue para ListSecretsou DescribeSecret. Quando o segredo é associado ao Chave gerenciada pela AWS for Secrets Manager (aws/secretsmanager), essas operações não retornam um identificador de chave KMS.

O que é criptografado?

O Secrets Manager criptografa o valor do segredo, mas não criptografa o seguinte:

  • Nome e descrição do segredo

  • Configurações de alternância

  • ARN da chave do KMS associada ao segredo

  • Qualquer AWS etiqueta anexada

Processos de criptografia e descriptografia

Para criptografar o valor de um segredo, o Secrets Manager usa o processo descrito a seguir.

  1. O Secrets Manager chama a AWS KMS GenerateDataKeyoperação com o ID da chave KMS do segredo e uma solicitação de uma chave simétrica AES de 256 bits. AWS KMS retorna uma chave de dados em texto simples e uma cópia dessa chave de dados criptografada sob a chave KMS.

  2. O Secrets Manager usa a chave de dados de texto simples e o algoritmo Advanced Encryption Standard (AES) para criptografar o valor secreto externo. AWS KMS Ele remove a chave de texto simples da memória o mais rápido possível após o uso.

  3. O Secrets Manager armazena a chave de dados criptografada nos metadados do segredo para que fique disponível para descriptografar o valor do segredo. No entanto, nenhuma das APIs do Secrets Manager retorna o segredo criptografado ou a chave de dados criptografada.

Para descriptografar um valor do segredo criptografado:

  1. O Secrets Manager chama a operação AWS KMS Decrypt e passa a chave de dados criptografada.

  2. AWS KMS usa a chave KMS do segredo para descriptografar a chave de dados. Ele gera a chave de dados de texto simples.

  3. O Secrets Manager usa a chave de dados de texto simples para descriptografar o valor do segredo. Então, ele remove a chave de dados da memória o mais rápido possível.

Permissões para a chave do KMS

Quando o Secrets Manager usa uma chave do KMS em operações de criptografia, ele atua em nome do usuário que está acessando ou atualizando o valor do segredo. É possível conceder permissões em uma política do IAM ou em uma política de chave. As seguintes operações do Secrets Manager exigem AWS KMS permissões.

Para permitir que a chave KMS seja usada somente para solicitações originadas no Secrets Manager, na política de permissões, você pode usar a chave kms: ViaService condition com o valor. secretsmanager.<Region>.amazonaws.com

Também é possível usar as chaves ou valores no contexto de criptografia como condição para usar a chave do KMS em operações de criptografia. Por exemplo, você pode usar um operador de condição de string em um IAM ou documento de política de chaves ou usar uma restrição de concessão em uma concessão. A propagação da concessão da chave do KMS pode demorar até cinco minutos. Para obter mais informações, consulte CreateGrant.

Como o Secrets Manager usa a chave do KMS

O Secrets Manager chama as seguintes AWS KMS operações com sua chave KMS.

GenerateDataKey

O Secrets Manager chama a AWS KMS GenerateDataKeyoperação em resposta às seguintes operações do Secrets Manager.

  • CreateSecret— Se o novo segredo incluir um valor secreto, o Secrets Manager solicitará uma nova chave de dados para criptografá-lo.

  • PutSecretValue— O Secrets Manager solicita uma nova chave de dados para criptografar o valor secreto especificado.

  • ReplicateSecretToRegions— Para criptografar o segredo replicado, o Secrets Manager solicita uma chave de dados para a chave KMS na região da réplica.

  • UpdateSecret— Se você alterar o valor secreto ou a chave KMS, o Secrets Manager solicitará uma nova chave de dados para criptografar o novo valor secreto.

A RotateSecretoperação não chamaGenerateDataKey, porque não altera o valor secreto. No entanto, se o RotateSecret invoca a função Lambda que muda o valor do segredo, sua chamada para a operação PutSecretValue acionará uma solicitação GenerateDataKey.

Decrypt

O Secrets Manager chama a operação Decrypt em resposta às seguintes operações do Secrets Manager.

  • GetSecretValuee BatchGetSecretValue— Secrets Manager decifra o valor secreto antes de devolvê-lo ao chamador. Para descriptografar um valor secreto criptografado, o Secrets Manager chama a operação AWS KMS Decrypt para descriptografar a chave de dados criptografada no segredo. Ele usa a chave de dados de texto simples para descriptografar o valor do segredo criptografado. Para comandos em lote, o Secrets Manager pode reutilizar a chave descriptografada; portanto, nem todas as chamadas resultam em uma solicitação Decrypt.

  • PutSecretValuee UpdateSecret— A maioria das UpdateSecret solicitações de PutSecretValue e não aciona uma Decrypt operação. No entanto, quando uma solicitação PutSecretValue ou UpdateSecret tenta alterar o valor do segredo em uma versão existente de um segredo, o Secrets Manager descriptografa o valor do segredo existente e o compara com o valor do segredo da solicitação para confirmar se são iguais. Essa ação garante que as operações do Secrets Manager sejam idempotentes. Para descriptografar um valor secreto criptografado, o Secrets Manager chama a operação AWS KMS Decrypt para descriptografar a chave de dados criptografada no segredo. Ele usa a chave de dados de texto simples para descriptografar o valor do segredo criptografado.

  • ReplicateSecretToRegions— O Secrets Manager primeiro descriptografa o valor secreto na região primária antes de criptografar novamente o valor secreto com a chave KMS na região de réplica.

Encrypt

O Secrets Manager chama a operação Encrypt em resposta às seguintes operações do Secrets Manager:

  • UpdateSecret— Se você alterar a chave KMS, o Secrets Manager criptografará novamente a chave de dados que protege as versões AWSCURRENTAWSPREVIOUS, e AWSPENDING secretas com a nova chave.

  • ReplicateSecretToRegions— O Secrets Manager criptografa novamente a chave de dados durante a replicação usando a chave KMS na região da réplica.

DescribeKey

O Secrets Manager chama a DescribeKeyoperação para determinar se a chave KMS deve ser listada ao criar ou editar um segredo no console do Secrets Manager.

Validar o acesso à chave do KMS

Ao estabelecer ou alterar a chave do KMS associada ao segredo, o Secrets Manager chama as operações GenerateDataKey e Decrypt com a chave do KMS especificada. Essas chamadas confirmam que o autor da chamada tem permissão para usar a chave do KMS para essas operações. O Secrets Manager descarta os resultados dessas operações; ele não os usa em qualquer operação de criptografia.

Você pode identificar essas chamadas de validação, pois o valor da chave SecretVersionId com contexto de criptografia nessas solicitações é RequestToValidateKeyAccess.

nota

No passado, as chamadas de validação do Secrets Manager não incluíam um contexto de criptografia. Você pode encontrar chamadas sem contexto de criptografia em AWS CloudTrail registros mais antigos.

Política de chaves da Chave gerenciada pela AWS (aws/secretsmanager)

A política de chaves do Chave gerenciada pela AWS for Secrets Manager (aws/secretsmanager) dá aos usuários permissão para usar a chave KMS para operações específicas somente quando o Secrets Manager faz a solicitação em nome do usuário. A política de chaves não permite que os usuários utilizem a chave do KMS diretamente.

Essa política de chaves, como as políticas de todas as Chaves gerenciadas pela AWS, é estabelecida pelo serviço. Não é possível alterar a política de chaves, mas é possível visualizá-la a qualquer momento. Para obter mais detalhes, consulte Visualizar uma política de chaves.

As declarações de política na política de chaves têm os seguintes efeitos:

  • Permita que os usuários da conta usem a chave do KMS para operações de criptografia somente quando a solicitação for proveniete do Secrets Manager em seu nome. A chave de condição kms:ViaService impõe essa restrição.

  • Permite que a AWS conta crie políticas do IAM que permitem aos usuários visualizar as propriedades da chave KMS e revogar concessões.

  • Embora o Secrets Manager não use concessões para obter acesso à chave do KMS, a política também permite que o Secrets Manager crie concessões para a chave do KMS em nome do usuário e permite que a conta revogue qualquer concessão que permite que o Secrets Manager use a chave do KMS. Esses são elementos padrão do documento de política de uma Chave gerenciada pela AWS.

A seguir está uma política fundamental para um Chave gerenciada pela AWS exemplo de Secrets Manager.

{ "Id": "auto-secretsmanager-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow direct access to key metadata to the account", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }

Contexto de criptografia do Secrets Manager

Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados arbitrários não secretos. Quando você inclui um contexto de criptografia em uma solicitação para criptografar dados, vincula AWS KMS criptograficamente o contexto de criptografia aos dados criptografados. Para descriptografar os dados, você deve passar o mesmo contexto de criptografia.

Em suas solicitações GenerateDataKeye Decrypt para, o Secrets AWS KMS Manager usa um contexto de criptografia com dois pares de nome e valor que identificam o segredo e sua versão, conforme mostrado no exemplo a seguir. Os nomes não variam, mas os valores de contexto de criptografia combinados serão diferentes para cada valor de segredo.

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" }

Você pode usar o contexto de criptografia para identificar essas operações criptográficas em registros e registros de auditoria, como AWS CloudTrailAmazon CloudWatch Logs, e como condição para autorização em políticas e concessões.

O contexto de criptografia do Secrets Manager consiste em dois pares de nome e valor.

  • SecretARN: o primeiro par de nome e valor identifica o segredo. A chave é SecretARN. O valor é o nome de recurso da Amazon (ARN) do segredo.

    "SecretARN": "ARN of an Secrets Manager secret"

    Por exemplo, se o ARN do segredo fosse arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3, o contexto de criptografia incluiria o seguinte par.

    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  • SecretVersionId— O segundo par nome-valor identifica a versão do segredo. A chave é SecretVersionId. O valor é o ID da versão.

    "SecretVersionId": "<version-id>"

    Por exemplo, se o ID de versão do segredo fosse EXAMPLE1-90ab-cdef-fedc-ba987SECRET1, o contexto de criptografia incluiria o seguinte par.

    "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"

Quando você estabelece ou altera a chave KMS de um segredo, o Secrets Manager envia GenerateDataKeye descriptografa solicitações para AWS KMS validar se o chamador tem permissão para usar a chave KMS para essas operações. Ele descarta as respostas; não as usa no valor do segredo.

Nessas solicitações de validação, o valor do SecretARN é o ARN real do segredo, mas o valor SecretVersionId é RequestToValidateKeyAccess, como mostrado no seguinte exemplo de contexto de criptografia. Esse valor especial ajuda você a identificar solicitações de validação em logs e trilhas de auditoria.

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "RequestToValidateKeyAccess" }
nota

No passado, as solicitações de validação do Secrets Manager não incluíam um contexto de criptografia. Você pode encontrar chamadas sem contexto de criptografia em AWS CloudTrail registros mais antigos.

Monitore a interação do Secrets Manager com AWS KMS

Você pode usar o AWS CloudTrail Amazon CloudWatch Logs para rastrear as solicitações que o Secrets Manager envia AWS KMS em seu nome. Para obter mais informações sobre o monitoramento do uso de segredos, consulte Monitorar segredos do AWS Secrets Manager.

GenerateDataKey

Quando você cria ou altera o valor secreto em um segredo, o Secrets Manager envia uma GenerateDataKeysolicitação AWS KMS que especifica a chave KMS do segredo.

O evento que registra a operação GenerateDataKey é semelhante ao evento de exemplo a seguir. A solicitação foi invocada por secretsmanager.amazonaws.com. Os parâmetros incluem o nome do recurso da Amazon (ARN) da chave do KMS do segredo, um especificador de chaves que requer uma chave de 256 bits e o contexto de criptografia que identifica o segredo e a versão.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:23:41Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:23:41Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "a7d4dd6f-6529-11e8-9881-67744a270888", "eventID": "af7476b6-62d7-42c2-bc02-5ce86c21ed36", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Decrypt

Quando você obtém ou altera o valor secreto de um segredo, o Secrets Manager envia uma solicitação de descriptografia para descriptografar AWS KMS a chave de dados criptografada. Para comandos em lote, o Secrets Manager pode reutilizar a chave descriptografada; portanto, nem todas as chamadas resultam em uma solicitação Decrypt.

O evento que registra a operação Decrypt é semelhante ao evento de exemplo a seguir. O usuário é o principal da sua AWS conta que está acessando a tabela. Os parâmetros incluem a chave da tabela criptografada (como um blob de texto cifrado) e o contexto de criptografia que identifica a tabela e a conta. AWS AWS KMS deriva o ID da chave KMS do texto cifrado.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:36:09Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:36:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "658c6a08-652b-11e8-a6d4-ffee2046048a", "eventID": "f333ec5c-7fc1-46b1-b985-cbda13719611", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Encrypt

Quando você altera a chave KMS associada a um segredo, o Secrets Manager envia uma solicitação Encrypt para AWS KMS recriptografar as versõesAWSCURRENT,AWSPREVIOUS, e AWSPENDING secretas com a nova chave. Quando você replica um segredo para outra região, o Secrets Manager também envia uma solicitação Encrypt para o AWS KMS.

O evento que registra a operação Encrypt é semelhante ao evento de exemplo a seguir. O usuário é o principal da sua AWS conta que está acessando a tabela.

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "creationDate": "2023-06-09T18:11:34Z", "mfaAuthenticated": "false" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2023-06-09T18:11:34Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc", "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:ChangeKeyTest-5yKnKS", "SecretVersionId": "EXAMPLE1-5c55-4d7c-9277-1b79a5e8bc50" } }, "responseElements": null, "requestID": "129bd54c-1975-4c00-9b03-f79f90e61d60", "eventID": "f7d9ff39-15ab-47d8-b94c-56586de4ab68", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }