Chiffrement et déchiffrement secrets dans AWS Secrets Manager - AWS Secrets Manager

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Chiffrement et déchiffrement secrets dans AWS Secrets Manager

Secrets Manager utilise le chiffrement des enveloppes avec des AWS KMS clés et des clés de données pour protéger chaque valeur secrète. Chaque fois que la valeur secrète d'un secret change, Secrets Manager demande une nouvelle clé de données AWS KMS pour le protéger. La clé de données est chiffrée sous une clé KMS et ensuite stockée dans les métadonnées du secret. Pour déchiffrer le secret, Secrets Manager déchiffre d'abord la clé de données chiffrée à l'aide de la clé KMS dans. AWS KMS

Secrets Manager n'utilise pas la clé KMS pour chiffrer la valeur du secret directement. Au lieu de cela, il utilise la clé KMS pour générer et chiffrer une symétrique AES (Advanced Encryption Standard) 256 bits Clé de données et utilise la clé de données pour chiffrer la valeur du secret. Secrets Manager utilise la clé de données en texte brut pour chiffrer la valeur secrète en dehors de AWS KMS, puis la supprime de la mémoire. Il stocke la copie chiffrée de la clé de données dans les métadonnées du secret.

Choisir une AWS KMS clé

Lorsque vous créez un secret, vous pouvez choisir n'importe quelle clé de chiffrement symétrique gérée par le client dans la région Compte AWS et, ou vous pouvez utiliser le Clé gérée par AWS for Secrets Manager (aws/secretsmanager). Si vous choisissez le Clé gérée par AWS aws/secretsmanager et qu'il n'existe pas encore, Secrets Manager le crée et l'associe au secret. Vous pouvez utiliser la même clé KMS ou d'autres clés KMS pour chaque secret dans votre compte. Vous pouvez utiliser différentes clés KMS pour définir des autorisations personnalisées sur les clés d'un groupe de secrets, ou si vous souhaitez contrôler des opérations spécifiques pour ces clés. Secrets Manager ne prend en charge que les clés KMS de chiffrement symétriques. Si vous utilisez une clé KMS dans une boutique de clés externe, les opérations cryptographiques sur la clé KMS peuvent prendre plus de temps et être moins fiables et durables, car la demande doit être transmise à l'extérieur d' AWS.

Pour plus d'informations sur la modification de la clé de chiffrement d'un secret, consultez la section Modifier la clé de chiffrement d'un AWS Secrets Manager secret.

Lorsque vous modifiez la clé de chiffrement, Secrets Manager le chiffre à nouveau AWSCURRENT et AWSPENDING les AWSPREVIOUS versions utilisant la nouvelle clé. Pour ne pas vous empêcher d'accéder au secret, Secrets Manager crypte toutes les versions existantes avec la clé précédente. Cela signifie que vous pouvez déchiffrer AWSCURRENT AWSPENDING les AWSPREVIOUS versions avec la clé précédente ou la nouvelle clé.

Pour qu'il ne AWSCURRENT puisse être déchiffré que par la nouvelle clé de chiffrement, créez une nouvelle version du secret avec la nouvelle clé. Ensuite, pour pouvoir déchiffrer la version AWSCURRENT secrète, vous devez avoir l'autorisation d'utiliser la nouvelle clé.

Vous pouvez refuser l'autorisation Clé gérée par AWS aws/secretsmanager et exiger que les secrets soient chiffrés à l'aide d'une clé gérée par le client. Pour plus d’informations, consultez Exemple : refuser une AWS KMS clé spécifique pour chiffrer des secrets.

Pour trouver la clé KMS associée à un secret, consultez le secret dans la console ou appelez ListSecretsou DescribeSecret. Lorsque le secret est associé au Clé gérée par AWS for Secrets Manager (aws/secretsmanager), ces opérations ne renvoient pas d'identifiant de clé KMS.

Qu'est-ce qui est chiffré ?

Secrets Manager chiffre la valeur secrète, mais il ne chiffre pas les éléments suivants :

  • Le nom et la description du secret

  • Paramètres de rotation

  • L'ARN de la clé KMS associée au secret

  • Toutes les AWS étiquettes jointes

Processus de chiffrement et déchiffrement

Pour chiffrer la valeur de secret dans un secret, Secrets Manager utilise le processus suivant.

  1. Secrets Manager appelle l' AWS KMS GenerateDataKeyopération en indiquant l'ID de la clé KMS associée au secret et en demandant une clé symétrique AES 256 bits. AWS KMS renvoie une clé de données en texte brut et une copie de cette clé de données chiffrée sous la clé KMS.

  2. Secrets Manager utilise la clé de données en texte brut et l'algorithme Advanced Encryption Standard (AES) pour chiffrer la valeur secrète en dehors de. AWS KMS Il supprime la clé en texte brut de la mémoire dès que possible après l'avoir utilisée.

  3. Secrets Manager stocke la clé de données chiffrée dans les métadonnées du secret afin qu'elle soit disponible pour déchiffrer la valeur du secret. Toutefois, aucune des API Secrets Manager ne renvoie le secret chiffré ou la clé de données chiffrée.

Pour déchiffrer une valeur de secret chiffrée :

  1. Secrets Manager lance l'opération de AWS KMS déchiffrement et transmet la clé de données chiffrée.

  2. AWS KMS utilise la clé KMS comme secret pour déchiffrer la clé de données. Il renvoie la clé de données en texte brut.

  3. Secrets Manager utilise la clé de données en texte brut pour déchiffrer la valeur du secret. Puis il supprime la clé de données de la mémoire dès que possible.

Autorisations pour la clé KMS

Lorsque Secrets Manager utilise une clé KMS dans les opérations de chiffrement, il agit au nom de l'utilisateur qui accède à la valeur de secret ou la met à jour. Vous pouvez accorder ces autorisations dans une politique IAM ou une stratégie de clé. Les opérations suivantes de Secrets Manager nécessitent AWS KMS des autorisations.

Pour autoriser l'utilisation de la clé KMS uniquement pour les demandes provenant de Secrets Manager, dans la politique d'autorisations, vous pouvez utiliser la clé de ViaService condition kms : avec la secretsmanager.<Region>.amazonaws.com valeur.

Vous pouvez également utiliser les clés ou les valeurs du contexte de chiffrement comme condition d'utilisation de la clé KMS pour les opérations de chiffrement. Par exemple, vous pouvez utiliser un opérateur de condition de chaîne dans un document de stratégie IAM ou de clé, ou utiliser une contrainte d'octroi dans un octroi. La propagation des autorisations de clés KMS peut prendre jusqu'à cinq minutes. Pour plus d'informations, consultez CreateGrant.

Comment Secrets Manager utilise votre clé KMS

Secrets Manager effectue les AWS KMS opérations suivantes avec votre clé KMS.

GenerateDataKey

Secrets Manager appelle l' AWS KMS GenerateDataKeyopération en réponse aux opérations suivantes du Gestionnaire de secrets.

  • CreateSecret— Si le nouveau secret inclut une valeur secrète, Secrets Manager demande une nouvelle clé de données pour le chiffrer.

  • PutSecretValue— Secrets Manager demande une nouvelle clé de données pour chiffrer la valeur secrète spécifiée.

  • ReplicateSecretToRegions— Pour chiffrer le secret répliqué, Secrets Manager demande une clé de données pour la clé KMS dans la région de réplication.

  • UpdateSecret— Si vous modifiez la valeur secrète ou la clé KMS, Secrets Manager demande une nouvelle clé de données pour chiffrer la nouvelle valeur secrète.

L'RotateSecretopération n'appelle pasGenerateDataKey, car elle ne modifie pas la valeur secrète. Toutefois, si RotateSecret invoque une fonction de rotation Lambda qui modifie la valeur du secret, son appel à l'opération PutSecretValue déclenche une requête GenerateDataKey.

Decrypt

Secrets Manager appelle l'opération Decrypt en réponse aux opérations Secrets Manager.

  • GetSecretValueet BatchGetSecretValue— Secrets Manager déchiffre la valeur secrète avant de la renvoyer à l'appelant. Pour déchiffrer une valeur secrète chiffrée, Secrets Manager appelle l'opération AWS KMS Decrypt pour déchiffrer la clé de données chiffrée contenue dans le secret. Ensuite, il utilise la clé de données en texte brut pour déchiffrer la valeur du secret chiffrée. Pour les commandes par lots, Secrets Manager peut réutiliser la clé déchiffrée, de sorte que tous les appels n'aboutissent pas à une demande Decrypt.

  • PutSecretValueet UpdateSecret— La plupart des UpdateSecret demandes PutSecretValue et ne déclenchent aucune Decrypt opération. Toutefois, lorsqu'une demande PutSecretValue ou UpdateSecret tente de modifier la valeur de secret dans une version existante d'un secret, Secrets Manager déchiffre la valeur du secret existante et la compare à la valeur du secret dans la demande afin de confirmer qu'elles sont identiques. Cette action permet de s'assurer que les opérations de Secrets Manager sont idempotentes. Pour déchiffrer une valeur secrète chiffrée, Secrets Manager appelle l'opération AWS KMS Decrypt pour déchiffrer la clé de données chiffrée contenue dans le secret. Ensuite, il utilise la clé de données en texte brut pour déchiffrer la valeur du secret chiffrée.

  • ReplicateSecretToRegions— Secrets Manager déchiffre d'abord la valeur secrète dans la région principale avant de la rechiffrer avec la clé KMS dans la région de réplication.

Encrypt

Secrets Manager appelle l'opération Encrypt en réponse aux opérations suivantes de Secrets Manager :

  • UpdateSecret— Si vous modifiez la clé KMS, Secrets Manager chiffre à nouveau la clé de données qui protège les versions AWSCURRENTAWSPREVIOUS, et AWSPENDING secrète avec la nouvelle clé.

  • ReplicateSecretToRegions— Secrets Manager chiffre à nouveau la clé de données lors de la réplication à l'aide de la clé KMS dans la région de réplication.

DescribeKey

Secrets Manager lance l'DescribeKeyopération pour déterminer s'il convient de répertorier la clé KMS lorsque vous créez ou modifiez un secret dans la console Secrets Manager.

Validation de l'accès à la clé KMS

Lorsque vous établissez ou modifiez la clé KMS associée au secret, GenerateDataKey appelle les opérations Secrets Manager et Decrypt avec la clé KMS spécifiée. Ces appels confirment que l'appelant a l'autorisation d'utiliser la clé KMS pour ces opérations. Secrets Manager ignore les résultats de ces opérations ; il ne les utilise pas dans les opérations de chiffrement.

Vous pouvez identifier ces appels de validation, car la valeur de la clé SecretVersionId de contexte de chiffrement dans ces requêtes est RequestToValidateKeyAccess.

Note

Par le passé, les appels de validation Secrets Manager n'incluaient pas de contexte de chiffrement. Il est possible que vous trouviez des appels sans contexte de chiffrement dans les anciens AWS CloudTrail journaux.

Stratégie de clé de Clé gérée par AWS (aws/secretsmanager)

La politique clé du Clé gérée par AWS for Secrets Manager (aws/secretsmanager) autorise les utilisateurs à utiliser la clé KMS pour des opérations spécifiques uniquement lorsque Secrets Manager fait la demande au nom de l'utilisateur. La politique de clé n'autorise pas les utilisateurs à utiliser la clé KMS directement.

Cette politique de clé, comme les politiques de toutes les Clés gérées par AWS, est établie par le service. Vous ne pouvez pas modifier la politique de clé, mais vous pouvez l'afficher à tout moment. Pour plus d'informations, consultez Affichage d'une stratégie de clé.

Les instructions de politique de la politique de clé ont l'effet suivant :

  • Elles autorisent les utilisateurs du compte à utiliser la clé KMS pour les opérations de chiffrement uniquement lorsque la demande vient de Secrets Manager en leur nom. La clé de condition kms:ViaService applique cette restriction.

  • Permet au AWS compte de créer des politiques IAM qui permettent aux utilisateurs de consulter les propriétés des clés KMS et de révoquer les autorisations.

  • Bien que Secrets Manager n'utilise pas d'octrois pour obtenir l'accès à la clé KMS, la stratégie autorise également Secrets Manager à créer des octrois pour la clé KMS au nom de l'utilisateur et autorise le compte à révoquer tous les octrois qui autorisent Secrets Manager à utiliser la clé KMS. Ces éléments sont standard dans le document de stratégie d'une Clé gérée par AWS.

Voici une politique clé à titre d'exemple Clé gérée par AWS pour 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": "*" } ] }

Contexte de chiffrement de Secrets Manager

Un contexte de chiffrement est un ensemble de paires clé-valeur qui contiennent des données non secrètes arbitraires. Lorsque vous incluez un contexte de chiffrement dans une demande de chiffrement de données, lie AWS KMS cryptographiquement le contexte de chiffrement aux données chiffrées. Pour déchiffrer les données, vous devez transmettre le même contexte de chiffrement.

Dans ses requêtes GenerateDataKeyet Decrypt à AWS KMS, Secrets Manager utilise un contexte de chiffrement avec deux paires nom-valeur qui identifient le secret et sa version, comme illustré dans l'exemple suivant. Les noms ne varient pas, mais les valeurs de contexte de chiffrement combinées sont différentes pour chaque valeur de secret.

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

Vous pouvez utiliser le contexte de chiffrement pour identifier ces opérations cryptographiques dans les enregistrements et journaux d'audit, tels que AWS CloudTrailAmazon CloudWatch Logs, et comme condition d'autorisation dans les politiques et les autorisations.

Le contexte de chiffrement Secrets Manager se compose de deux paires nom-valeur.

  • SecretARN – La première paire nom–valeur identifie le secret. La clé est SecretARN. La valeur est l'Amazon Resource Name (ARN) du secret.

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

    Par exemple si l'ARN du secret est arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3, le contexte de chiffrement inclura la paire suivante.

    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  • SecretVersionId— La deuxième paire nom-valeur identifie la version du secret. La clé est SecretVersionId. La valeur est l'ID de version.

    "SecretVersionId": "<version-id>"

    Par exemple si l'ID de version du secret est EXAMPLE1-90ab-cdef-fedc-ba987SECRET1, le contexte de chiffrement inclura la paire suivante.

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

Lorsque vous définissez ou modifiez la clé KMS d'un secret, Secrets Manager envoie GenerateDataKeyet déchiffre des demandes AWS KMS pour valider que l'appelant est autorisé à utiliser la clé KMS pour ces opérations. Il ignore les réponses ; il ne les utilise pas sur la valeur du secret.

Dans le cadre de ces requêtes de validation, la valeur de SecretARN est l'ARN réel du secret, mais la valeur de SecretVersionId est RequestToValidateKeyAccess, comme illustré dans l'exemple de contexte de chiffrement suivant. Cette valeur spéciale vous permet d'identifier les requêtes de validation dans les journaux et les pistes d'audit.

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

Par le passé, les demandes de validation Secrets Manager n'incluaient pas de contexte de chiffrement. Il est possible que vous trouviez des appels sans contexte de chiffrement dans les anciens AWS CloudTrail journaux.

Surveillez l'interaction de Secrets Manager avec AWS KMS

Vous pouvez utiliser AWS CloudTrail Amazon CloudWatch Logs pour suivre les demandes que Secrets Manager envoie AWS KMS en votre nom. Pour plus d'informations sur la surveillance de l'utilisation des secrets, voir Surveillez AWS Secrets Manager les secrets.

GenerateDataKey

Lorsque vous créez ou modifiez la valeur secrète d'un secret, Secrets Manager envoie une GenerateDataKeydemande AWS KMS indiquant la clé KMS du secret.

L'événement qui enregistre l'opération GenerateDataKey est similaire à l'exemple d'événement suivant. La requête est appelée par secretsmanager.amazonaws.com. Les paramètres incluent le nom Amazon Resource Name (ARN) de la clé KMS du secret, un spécificateur de clé qui nécessite une clé de 256 bits, et le contexte de chiffrement qui identifie le secret et la version.

{ "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

Lorsque vous obtenez ou modifiez la valeur secrète d'un secret, Secrets Manager envoie une demande de déchiffrement AWS KMS pour déchiffrer la clé de données chiffrée. Pour les commandes par lots, Secrets Manager peut réutiliser la clé déchiffrée, de sorte que tous les appels n'aboutissent pas à une demande Decrypt.

L'événement qui enregistre l'opération Decrypt est similaire à l'exemple d'événement suivant. L'utilisateur est le principal de votre AWS compte qui accède à la table. Les paramètres incluent la clé de table chiffrée (sous forme de blob de texte chiffré) et le contexte de chiffrement qui identifie la table et le compte. AWS AWS KMS déduit l'ID de la clé KMS à partir du texte chiffré.

{ "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

Lorsque vous modifiez la clé KMS associée à un secret, Secrets Manager envoie une demande de chiffrement AWS KMS pour rechiffrer les versions AWSCURRENTAWSPREVIOUS, et AWSPENDING secrète avec la nouvelle clé. Lorsque vous répliquez un secret vers une autre région, Secrets Manager envoie également une demande Encrypt à AWS KMS.

L'événement qui enregistre l'opération Encrypt est similaire à l'exemple d'événement suivant. L'utilisateur est le principal de votre AWS compte qui accède à la table.

{ "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" }