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 descriptografia de segredos no AWS Secrets Manager
O Secrets Manager usa criptografia de envelope com chaves do AWS KMS e chaves de dados para proteger o valor de cada segredo. Sempre que o valor do segredo muda, o Secrets Manager solicita uma nova chave de dados do 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 do KMS no 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 do segredo fora do AWS KMS e, em seguida, a remove da memória. Ele armazena a cópia criptografada da chave de dados nos metadados do segredo.
Tópicos
- Escolha de uma chave do AWS KMS
- O que é criptografado?
- Processos de criptografia e descriptografia
- Permissões para a chave do KMS
- Como o Secrets Manager usa a chave do KMS
- Política de chaves da Chave gerenciada pela AWS (aws/secretsmanager)
- Contexto de criptografia do Secrets Manager
- Monitorar a interação do Secrets Manager com o AWS KMS
Escolha de uma chave do AWS KMS
Ao criar um segredo, é possível escolher qualquer chave simétrica de criptografia gerenciada pelo cliente na região e na Conta da AWSou usar a Chave gerenciada pela AWS para o Secrets Manager (aws/secretsmanager
). Se você escolher a Chave gerenciada pela AWS da aws/secretsmanager
e ela ainda não existir, o Secrets Manager a criará e a associará 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 Altere a chave de criptografia de um segredo AWS Secrets Manager.
Quando você altera a chave de criptografia, o Secrets Manager criptografa novamente as versões AWSCURRENT
, AWSPENDING
e AWSPREVIOUS
com a nova chave. Para evitar que você fique bloqueado sem o segredo, o Secrets Manager mantém todas as versões existentes criptografadas com a chave anterior. Isso significa que é possível descriptografar as versões AWSCURRENT
, AWSPENDING
e AWSPREVIOUS
com a chave anterior ou com a nova chave. Se você não tiver a permissão kms:Decrypt
para a chave anterior, ao alterar a chave de criptografia, o Secrets Manager não poderá descriptografar as versões do segredo para recriptografá-las. Nesse caso, as versões existentes não serão criptografadas novamente.
Para fazer com que AWSCURRENT
só possa ser descriptografado pela nova chave de criptografia, crie uma nova versão do segredo com a nova chave. Em seguida, para poder decifrar a versão do segredo AWSCURRENT
, você deverá ter permissão para a nova chave.
É possível negar a permissão para a Chave gerenciada pela AWS aws/secretsmanager
e exigir que os segredos sejam criptografados com uma chave gerenciada pelo cliente. Para ter mais informações, consulte Exemplo: negar uma chave do AWS KMS específica para criptografar segredos.
Para localizar a chave do KMS associada a um segredo, visualize o segredo no console ou chame ListSecrets ou DescribeSecret. Quando o segredo é associado à Chave gerenciada pela AWS do Secrets Manager (aws/secretsmanager
), essas operações não retornam um identificador de chave do 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 tag da AWS anexadas
Processos de criptografia e descriptografia
Para criptografar o valor de um segredo, o Secrets Manager usa o processo descrito a seguir.
-
O Secrets Manager chama a operação GenerateDataKey do AWS KMS com o ID da chave do KMS do segredo e uma solicitação para uma chave simétrica AES de 256 bits. O AWS KMS gera uma chave de dados de texto simples e uma cópia desta chave de dados criptografada pela chave do KMS.
-
O Secrets Manager usa a chave de dados de texto simples e o algoritmo Padrão de criptografia avançada (AES) para criptografar o valor do segredo fora do AWS KMS. Ele remove a chave de texto simples da memória o mais rápido possível após o uso.
-
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:
-
O Secrets Manager chama a operação Decrypt do AWS KMS e passa a chave de dados criptografada.
-
O AWS KMS usa a chave do KMS do segredo para descriptografar a chave de dados. Ele gera a chave de dados de texto simples.
-
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 permissões do AWS KMS.
Para permitir que a chave do KMS seja usada apenas para solicitações provenientes do Secrets Manager, use a chave de condição kms:ViaService com o valor secretsmanager.
na política de permissões.<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 operações do AWS KMS com sua chave do KMS.
- GenerateDataKey
-
O Secrets Manager chama a operação GenerateDataKey do AWS KMS em resposta às seguintes operações do Secrets Manager.
-
CreateSecret: se o novo segredo incluir um valor, 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 do segredo especificado.
-
ReplicateSecretToRegions: o Secrets Manager solicita uma chave de dados para uma chave do KMS na região da réplica para criptografar o segredo replicado.
-
UpdateSecret: se você alterar o valor do segredo ou a chave do KMS, o Secrets Manager solicitará uma nova chave de dados para criptografar o novo valor do segredo.
A operação RotateSecret não chama
GenerateDataKey
, pois não altera o valor do segredo. No entanto, se oRotateSecret
invoca a função Lambda que muda o valor do segredo, sua chamada para a operaçãoPutSecretValue
acionará uma solicitaçãoGenerateDataKey
. -
- Decrypt
-
O Secrets Manager chama a operação Decrypt em resposta às seguintes operações do Secrets Manager.
-
GetSecretValue e BatchGetSecretValue: o Secrets Manager descriptografa o valor do segredo antes de retorná-lo ao autor da chamada. Para descriptografar um valor de segredo criptografado, o Secrets Manager chama a operação Decrypt do AWS KMS para descriptografar a chave de dados criptografada do 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
. -
PutSecretValue e UpdateSecret: a maioria das solicitações
PutSecretValue
eUpdateSecret
não aciona uma operaçãoDecrypt
. No entanto, quando uma solicitaçãoPutSecretValue
ouUpdateSecret
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 de segredo criptografado, o Secrets Manager chama a operação Decrypt do AWS KMS para descriptografar a chave de dados criptografada do segredo. Ele usa a chave de dados de texto simples para descriptografar o valor do segredo criptografado. -
ReplicateSecretToRegions: o Secrets Manager primeiro descriptografa o segredo na região principal antes de criptografá-lo novamente com a nova chave do KMS na região da 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 do KMS, o Secrets Manager criptografará novamente a chave de dados que protege as versões secretas
AWSCURRENT
,AWSPREVIOUS
, eAWSPENDING
com a nova chave. -
ReplicateSecretToRegions: o Secrets Manager criptografa novamente a chave de dados durante a replicação usando a chave do KMS na região da réplica.
-
- DescribeKey
-
O Secrets Manager chama a operação DescribeKey para determinar se deve listar a chave do KMS 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
eDecrypt
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 logs do AWS CloudTrail mais antigos.
Política de chaves da Chave gerenciada pela AWS (aws/secretsmanager
)
A política de chaves da Chave gerenciada pela AWS do Secrets Manager (aws/secretsmanager
) concede aos usuários permissão para usar a chave do KMS para operações especificadas somente quando o Secrets Manager faz a solicitação em nome do usuário. A política de chaves não permite que qualquer usuário utilize 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 conta da AWS crie políticas do IAM que permitem que os usuários visualizem as propriedades da chave do KMS e revoguem 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.
Veja a seguir uma política de chaves para um exemplo de Chave gerenciada pela AWS do 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, o AWS KMS vincula de forma criptográfica o contexto de criptografia aos dados criptografados. Para descriptografar os dados, você deve passar o mesmo contexto de criptografia.
Nas solicitações GenerateDataKey e Decrypt para o AWS KMS, o Secrets Manager usa um contexto de criptografia com dois pares de nome e valor que identificam o segredo e sua versão, como 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" }
É possível usar o contexto de criptografia para identificar essas operações de criptografia em logs e registros de auditoria, como AWS CloudTrail e o Amazon CloudWatch Logs, e como uma condição para a 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 de nome e 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 do KMS de um segredo, o Secrets Manager envia solicitações GenerateDataKey e Decrypt para o AWS KMS para confirmar que o autor da chamada tem permissão para usar a chave do 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 logs do AWS CloudTrail mais antigos.
Monitorar a interação do Secrets Manager com o AWS KMS
Você pode usar o AWS CloudTrail e o Amazon CloudWatch Logs para rastrear as solicitações que o Secrets Manager envia para o 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 de um segredo, o Secrets Manager envia uma solicitação GenerateDataKey ao AWS KMS que especifica a chave do KMS do segredo.
O evento que registra a operação
GenerateDataKey
é semelhante ao evento de exemplo a seguir. A solicitação foi invocada porsecretsmanager.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 de um segredo, o Secrets Manager envia uma solicitação Decrypt para o AWS KMS para descriptografar 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 em sua conta da AWS que está acessando a tabela. Os parâmetros incluem a chave de tabela criptografada (como um blob de texto cifrado) e o contexto de criptografia que identifica a tabela e a conta da AWS. O AWS KMS obtém o ID da chave do KMS a partir 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 do KMS associada a um segredo, o Secrets Manager envia uma solicitação Encrypt para o AWS KMS criptografar novamente as versões
AWSCURRENT
,AWSPREVIOUS
, eAWSPENDING
do segredo om 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 em sua conta da AWS 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" }