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 cryptée sous une KMS clé et 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 cryptée à l'aide de la clé entrée. KMS AWS KMS

Secrets Manager n'utilise pas la KMS clé pour chiffrer directement la valeur secrète. Il utilise plutôt la KMS clé pour générer et chiffrer une clé de données symétrique Advanced Encryption Standard (AES) de 256 bits, et utilise la clé de données pour chiffrer la valeur secrète. 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 KMS clé ou des KMS clés différentes pour chaque secret de votre compte. Vous souhaiterez peut-être utiliser des KMS clés différentes pour définir des autorisations personnalisées sur les clés d'un groupe de secrets, ou si vous souhaitez auditer des opérations spécifiques pour ces clés. Secrets Manager prend uniquement en charge les KMSclés de chiffrement symétriques. Si vous utilisez une KMS clé dans un magasin de clés externe, les opérations cryptographiques sur la KMS clé peuvent prendre plus de temps et être moins fiables et durables car la demande doit être transmise à l' AWS extérieur.

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é. Si vous n'êtes pas kms:Decrypt autorisé à accéder à la clé précédente, lorsque vous modifiez la clé de chiffrement, Secrets Manager ne peut pas déchiffrer les versions secrètes pour les rechiffrer. Dans ce cas, les versions existantes ne sont pas rechiffrées.

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 KMS clé associée à un secret, affichez-le 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 KMS clé.

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

  • ARNde la KMS clé 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 KMS clé du secret et en demandant une clé AES symétrique de 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 KMS clé.

  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. Cependant, aucun des Secrets Manager ne APIs 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 KMS clé du 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 KMS clé

Lorsque Secrets Manager utilise une KMS clé dans des opérations cryptographiques, il agit pour le compte de l'utilisateur qui accède à la valeur secrète ou la met à jour. Vous pouvez accorder des autorisations dans le cadre d'une IAM politique ou d'une politique clé. Les opérations suivantes de Secrets Manager nécessitent AWS KMS des autorisations.

Pour autoriser l'utilisation de la KMS clé 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 dans le contexte de chiffrement comme condition d'utilisation de la KMS clé pour les opérations cryptographiques. Par exemple, vous pouvez utiliser un opérateur de condition de chaîne dans un document de politique clé IAM ou utiliser une contrainte de subvention dans une autorisation. KMSla propagation d'une subvention clé peut prendre jusqu'à cinq minutes. Pour plus d'informations, consultez CreateGrant.

Comment Secrets Manager utilise votre KMS clé

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

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 KMS clé dans la région de réplication.

  • UpdateSecret— Si vous modifiez la valeur secrète ou la KMS clé, 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 KMS clé dans la région répliquée.

Encrypt

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

  • UpdateSecret— Si vous modifiez la KMS clé, 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 KMS clé de la région de réplication.

DescribeKey

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

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

Lorsque vous définissez ou modifiez la KMS clé associée au secret, Secrets Manager appelle les Decrypt opérations GenerateDataKey et avec la KMS clé spécifiée. Ces appels confirment que l'appelant est autorisé à utiliser la KMS clé 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 KMS clé pour des opérations spécifiques uniquement lorsque Secrets Manager fait la demande au nom de l'utilisateur. La politique des clés n'autorise aucun utilisateur à utiliser la KMS clé 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 :

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

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

  • Bien que Secrets Manager n'utilise pas d'autorisations pour accéder à la KMS clé, la politique permet également à Secrets Manager de créer des autorisations pour la KMS clé au nom de l'utilisateur et permet au compte de révoquer toute autorisation autorisant Secrets Manager à utiliser la KMS clé. 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.

  • Secret ARN — La première paire nom-valeur identifie le secret. La clé est SecretARN. La valeur est le Amazon Resource Name (ARN) du secret.

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

    Par exemple, si le ARN secret estarn: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 KMS clé d'un secret, Secrets Manager envoie GenerateDataKeyet déchiffre des demandes AWS KMS afin de valider que l'appelant est autorisé à utiliser la KMS clé pour ces opérations. Il ignore les réponses ; il ne les utilise pas sur la valeur du secret.

Dans ces demandes de validation, la valeur de SecretARN est la valeur réelle ARN du secret, mais la SecretVersionId valeur estRequestToValidateKeyAccess, comme le montre 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 KMS clé 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 l'Amazon Resource Name (ARN) de la KMS clé 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'identifiant de la KMS clé à 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 KMS clé 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" }