Crittografia e decrittografia segrete in AWS Secrets Manager - AWS Secrets Manager

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crittografia e decrittografia segrete in AWS Secrets Manager

Secrets Manager utilizza la crittografia a busta con AWS KMS chiavi e chiavi dati per proteggere ogni valore segreto. Ogni volta che il valore segreto di un segreto cambia, Secrets Manager richiede una nuova chiave dati AWS KMS per proteggerlo. La chiave di dati è crittografata sotto una chiave KMS e viene archiviata nei metadati della versione segreta. Per decrittografare il segreto, Secrets Manager decrittografa innanzitutto la chiave dati crittografata utilizzando la chiave KMS. AWS KMS

Secrets Manager non utilizza la chiave KMS per crittografare il valore del segreto direttamente. Utilizza invece la chiave KMS per generare e crittografare una simmetrica AES (Advanced Encryption Standard) a 256 bit chiave di dati e utilizza la chiave di dati per crittografare il valore del segreto. Secrets Manager utilizza la chiave dati in testo semplice per crittografare il valore segreto all'esterno di AWS KMS, quindi lo rimuove dalla memoria. Archivia la copia crittografata della chiave di dati nei metadati del segreto.

Scelta di una chiave AWS KMS

Quando crei un segreto, puoi scegliere qualsiasi chiave di crittografia simmetrica gestita dal cliente nella regione Account AWS and oppure puoi utilizzare Chiave gestita da AWS for Secrets Manager ()aws/secretsmanager. Se scegli il Chiave gestita da AWS aws/secretsmanager e non esiste ancora, Secrets Manager lo crea e lo associa al segreto. È possibile utilizzare la stessa chiave KMS o diverse chiavi KMS per ogni segreto nell'account. Potresti voler utilizzare chiavi KMS diverse per impostare autorizzazioni personalizzate sulle chiavi per un gruppo di segreti o per controllare determinate operazioni per tali chiavi. Secrets Manager supporta solo chiavi KMS di crittografia simmetrica. Se utilizzi una chiave KMS in un archivio di chiavi esterno, le operazioni crittografiche sulla chiave KMS potrebbero richiedere più tempo ed essere meno affidabili e durevoli perché la richiesta deve essere trasferita all'esterno di AWS.

Per informazioni sulla modifica della chiave di crittografia di un segreto, consulta Modificare la chiave di crittografia per un AWS Secrets Manager segreto.

Quando si modifica la chiave di crittografia, Secrets Manager cripta nuovamente AWSCURRENT e AWSPENDING le AWSPREVIOUS versioni con la nuova chiave. Per evitare di nasconderti il segreto, Secrets Manager mantiene tutte le versioni esistenti crittografate con la chiave precedente. Ciò significa che è possibile decrittografare AWSCURRENT AWSPREVIOUS le versioni con la chiave precedente o la nuova chiave. AWSPENDING

Per fare in modo che AWSCURRENT possa essere decrittografato solo con la nuova chiave di crittografia, crea una nuova versione del segreto con la nuova chiave. Quindi, per poter decifrare la versione AWSCURRENT segreta, devi avere l'autorizzazione per la nuova chiave.

È possibile negare l'autorizzazione Chiave gestita da AWS aws/secretsmanager e richiedere che i segreti vengano crittografati con una chiave gestita dal cliente. Per ulteriori informazioni, consulta Esempio: nega una AWS KMS chiave specifica per crittografare i segreti.

Per trovare la chiave KMS associata a un segreto, visualizza il segreto nella console o chiama ListSecretso. DescribeSecret Quando il segreto è associato a Chiave gestita da AWS for Secrets Manager (aws/secretsmanager), queste operazioni non restituiscono un identificatore di chiave KMS.

Che viene crittografato?

Secrets Manager crittografa il valore segreto, ma non crittografa quanto segue:

  • Nome e descrizione del segreto

  • Impostazioni di rotazione

  • ARN della chiave KMS associata al segreto

  • Eventuali tag allegati AWS

Processi di crittografia e decrittografia

Per crittografare il valore del segreto in un segreto, Secrets Manager utilizza il seguente processo.

  1. Secrets Manager richiama l' AWS KMS GenerateDataKeyoperazione con l'ID della chiave KMS per il segreto e una richiesta per una chiave simmetrica AES a 256 bit. AWS KMS restituisce una chiave dati in testo semplice e una copia di tale chiave dati crittografata con la chiave KMS.

  2. Secrets Manager utilizza la chiave dati in chiaro e l'algoritmo Advanced Encryption Standard (AES) per crittografare il valore segreto all'esterno di. AWS KMS Dopo averla utilizzata, rimuove la chiave in testo normale dalla memoria il prima possibile.

  3. Secrets Manager archivia la chiave di dati crittografata nei metadati del segreto in modo che sia disponibile per decrittografare il valore del segreto. Tuttavia, nessuna delle API Secrets Manager restituisce il segreto crittografato o la chiave di dati crittografata.

Per decrittografare un valore del segreto crittografato:

  1. Secrets Manager richiama l'operazione AWS KMS Decrypt e trasmette la chiave dati crittografata.

  2. AWS KMS utilizza la chiave KMS come segreto per decrittografare la chiave dati. Restituisce la chiave di dati in testo normale.

  3. Secrets Manager utilizza la chiave di dati in testo normale per decrittografare il valore del segreto. Quindi rimuove la chiave di dati dalla memoria il prima possibile.

Autorizzazioni per la chiave KMS

Quando Secrets Manager utilizza una chiave KMS in operazioni di crittografia, agisce per conto dell'utente che sta effettuando l'accesso al valore del segreto o che lo sta aggiornando. Puoi concedere le autorizzazioni in una policy IAM o in una policy delle chiavi. Le seguenti operazioni di Secrets Manager richiedono AWS KMS autorizzazioni.

Per consentire l'utilizzo della chiave KMS solo per le richieste che hanno origine in Secrets Manager, nella politica delle autorizzazioni, puoi utilizzare la chiave kms: ViaService condition con il valore. secretsmanager.<Region>.amazonaws.com

Puoi inoltre utilizzare le chiavi o i valori nel contesto di crittografia come condizione per utilizzare la chiave KMS per le operazioni di crittografia. Ad esempio, è possibile utilizzare un operatore di condizione stringa in un documento di policy IAM o della chiave, oppure utilizzare un vincolo di concessione in un vincolo. La propagazione della concessione di chiavi KMS può richiedere fino a cinque minuti. Per ulteriori informazioni, consulta. CreateGrant

Come Secrets Manager utilizza la chiave KMS

Secrets Manager richiama le seguenti AWS KMS operazioni con la chiave KMS.

GenerateDataKey

Secrets Manager chiama l' AWS KMS GenerateDataKeyoperazione in risposta alle seguenti operazioni di Secrets Manager.

  • CreateSecret— Se il nuovo segreto include un valore segreto, Secrets Manager richiede una nuova chiave dati per crittografarlo.

  • PutSecretValue— Secrets Manager richiede una nuova chiave dati per crittografare il valore segreto specificato.

  • ReplicateSecretToRegions— Per crittografare il segreto replicato, Secrets Manager richiede una chiave dati per la chiave KMS nella regione di replica.

  • UpdateSecret— Se si modifica il valore segreto o la chiave KMS, Secrets Manager richiede una nuova chiave dati per crittografare il nuovo valore segreto.

L'RotateSecretoperazione non chiamaGenerateDataKey, perché non modifica il valore segreto. Tuttavia, se RotateSecret invoca una funzione di rotazione Lambda che modifica il valore del segreto, la chiamata all'operazione PutSecretValue attiva una richiesta GenerateDataKey.

Decrypt

Secrets Manager chiama la Decrypt operazione in risposta alle seguenti operazioni di Secrets Manager.

  • GetSecretValuee BatchGetSecretValue— Secrets Manager decripta il valore segreto prima di restituirlo al chiamante. Per decrittografare un valore segreto crittografato, Secrets Manager chiama l'operazione AWS KMS Decrypt per decrittografare la chiave dei dati crittografati nel segreto. Quindi utilizza la chiave di dati in testo normale per decrittografare il valore del segreto crittografato. Per i comandi batch, Secrets Manager può riutilizzare la chiave decrittografata, in modo che non tutte le chiamate generino una richiesta Decrypt.

  • PutSecretValuee UpdateSecret— La maggior parte delle UpdateSecret richieste non PutSecretValue attiva un'operazione. Decrypt Tuttavia, quando una richiesta PutSecretValue o UpdateSecret cerca di modificare il valore del segreto in una versione esistente di un segreto, Secrets Manager decrittografa il valore del segreto esistente e lo confronta con il valore del segreto nella richiesta per confermare che siano identici. Questa operazione garantisce che le operazioni Secrets Manager siano idempotenti. Per decrittografare un valore segreto crittografato, Secrets Manager chiama l'operazione AWS KMS Decrypt per decrittografare la chiave dei dati crittografati nel segreto. Quindi utilizza la chiave di dati in testo normale per decrittografare il valore del segreto crittografato.

  • ReplicateSecretToRegions— Secrets Manager decrittografa innanzitutto il valore segreto nella regione primaria prima di ricrittografare il valore segreto con la chiave KMS nella regione di replica.

Crittografa

Secrets Manager chiama l'operazione Encrypt in risposta alle seguenti operazioni di Secrets Manager:

  • UpdateSecret— Se si modifica la chiave KMS, Secrets Manager cripta nuovamente la chiave dati che protegge la AWSCURRENT chiave e le versioni AWSPENDING segrete con la nuova chiave. AWSPREVIOUS

  • ReplicateSecretToRegions— Secrets Manager cripta nuovamente la chiave dati durante la replica utilizzando la chiave KMS nella regione di replica.

DescribeKey

Secrets Manager richiama l'DescribeKeyoperazione per determinare se elencare la chiave KMS quando si crea o si modifica un segreto nella console di Secrets Manager.

Convalida dell'accesso alla chiave KMS

Quando stabilisci o modifichi la chiave KMS associata al segreto, Secrets Manager chiama le operazioni GenerateDataKey e Decrypt con la chiave KMS specificata. Queste chiamate confermano che il chiamante ha l'autorizzazione di utilizzare la chiave KMS per queste operazioni. Secrets Manager scarta i risultati di queste operazioni e non li utilizza in alcuna operazione di crittografia.

È possibile identificare queste chiamate di convalida perché il valore della SecretVersionId chiave contesto di crittografia in queste richieste è RequestToValidateKeyAccess.

Nota

In passato, le chiamate di convalida di Secrets Manager non includevano un contesto di crittografia. È possibile trovare chiamate senza contesto di crittografia nei AWS CloudTrail registri più vecchi.

Policy chiave della Chiave gestita da AWS (aws/secretsmanager)

La politica chiave per Chiave gestita da AWS for Secrets Manager (aws/secretsmanager) consente agli utenti di utilizzare la chiave KMS per operazioni specifiche solo quando Secrets Manager effettua la richiesta per conto dell'utente. La policy delle chiavi non consente ad alcun utente di utilizzare la chiave KMS direttamente.

Questa policy delle chiavi, come le policy di tutte le Chiavi gestite da AWS, viene stabilita dal servizio. Non è possibile modificarla, ma è possibile visualizzarla in qualsiasi momento. Per informazioni dettagliate, consulta Visualizzazione di una policy di chiave.

Le istruzioni di policy nella policy delle chiavi hanno l'effetto seguente:

  • Consenti agli utenti nell'account di utilizzare la chiave KMS per le operazioni di crittografia solo quando la richiesta proviene da Secrets Manager per conto loro. La chiave di condizione kms:ViaService applica questa limitazione.

  • Consente all' AWS account di creare policy IAM che consentono agli utenti di visualizzare le proprietà delle chiavi KMS e revocare le concessioni.

  • Sebbene Secrets Manager non utilizzi le sovvenzioni per accedere alla chiave KMS, la policy consente inoltre a Secrets Manager di creare sovvenzioni per la chiave KMS per conto dell'utente e consente all'account di revoca di qualsiasi concessione che consente a Secrets Manager di utilizzare la chiave KMS. Questi sono elementi standard del documento di policy per una Chiave gestita da AWS.

Di seguito è riportata una politica chiave per un Chiave gestita da AWS esempio di 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": "*" } ] }

Contesto di crittografia di Secrets Manager

Un contesto di crittografia è un set di coppie chiave-valore che contiene dati arbitrari non segreti. Quando si include un contesto di crittografia in una richiesta di crittografia dei dati, associa AWS KMS crittograficamente il contesto di crittografia ai dati crittografati. lo stesso contesto di crittografia sia necessario per decrittografare i dati.

Nelle sue richieste GenerateDataKeye Decrypt a AWS KMS, Secrets Manager utilizza un contesto di crittografia con due coppie nome-valore che identificano il segreto e la relativa versione, come illustrato nell'esempio seguente. I nomi non variano, ma i valori del contesto di crittografia combinati saranno diversi per ogni valore del segreto.

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

Puoi utilizzare il contesto di crittografia per identificare queste operazioni crittografiche nei record e nei log di controllo, come AWS CloudTrailAmazon CloudWatch Logs, e come condizione per l'autorizzazione nelle politiche e nelle concessioni.

Il contesto di crittografia di Secrets Manager è costituito da due coppie nome-valore.

  • SecretArn – La coppia nome-valore identificherà il segreto. La chiave è SecretARN. Il valore è l'Amazon Resource Name (ARN) del segreto.

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

    Ad esempio, se l'ARN del segreto è arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3, il contesto di crittografia include la seguente coppia.

    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  • SecretVersionId— La seconda coppia nome-valore identifica la versione del segreto. La chiave è SecretVersionId. Il valore è l'ID della versione.

    "SecretVersionId": "<version-id>"

    Ad esempio, se l'ID della versione è EXAMPLE1-90ab-cdef-fedc-ba987SECRET1, il contesto di crittografia include la seguente coppia.

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

Quando stabilisci o modifichi la chiave KMS per un segreto, Secrets Manager invia GenerateDataKeye AWS KMS decrittografa le richieste per verificare che il chiamante sia autorizzato a utilizzare la chiave KMS per queste operazioni. Scarta le risposte, non le utilizza sul valore del segreto.

In queste richieste di convalida, il valore di SecretARN è l'ARN effettivo del segreto, ma il valore SecretVersionId è RequestToValidateKeyAccess, come visualizzato nel seguente contesto di crittografia di esempio. Questo valore speciale consente di identificare le richieste di convalida nei log e negli audit trail.

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

In passato, le richieste di convalida di Secrets Manager non includevano un contesto di crittografia. È possibile trovare chiamate prive di contesto di crittografia nei registri più vecchi. AWS CloudTrail

Monitora l'interazione di Secrets Manager con AWS KMS

Puoi utilizzare AWS CloudTrail Amazon CloudWatch Logs per tenere traccia delle richieste a cui Secrets Manager invia per tuo AWS KMS conto. Per ulteriori informazioni sul monitoraggio dell'uso dei segreti , consulta Monitora AWS Secrets Manager i segreti.

GenerateDataKey

Quando crei o modifichi il valore segreto in un segreto, Secrets Manager invia una GenerateDataKeyrichiesta a AWS KMS cui specifica la chiave KMS per il segreto.

L'evento che registra l'operazione GenerateDataKey è simile a quello del seguente evento di esempio. La richiesta viene richiamata da secretsmanager.amazonaws.com. I parametri includono l'Amazon Resource Name (ARN) della chiave KMS per il segreto, un identificatore della chiave che richiede una chiave a 256 bit e il contesto di crittografia che identifica il segreto e la versione.

{ "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 si ottiene o si modifica il valore segreto di un segreto, Secrets Manager invia una richiesta di decrittografia per AWS KMS decrittografare la chiave dati crittografata. Per i comandi batch, Secrets Manager può riutilizzare la chiave decrittografata, in modo che non tutte le chiamate generino una richiesta Decrypt.

L'evento che registra l'operazione Decrypt è simile a quello del seguente evento di esempio. L'utente è il principale del tuo AWS account che accede alla tabella. I parametri includono la chiave crittografata della tabella (come blob di testo cifrato) e il contesto di crittografia che identifica la tabella e l'account. AWS AWS KMS ricava l'ID della chiave KMS dal testo cifrato.

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

Quando si modifica la chiave KMS associata a un segreto, Secrets Manager invia una richiesta di crittografia per AWS KMS crittografare nuovamente le versioni AWSPENDING segrete con la AWSCURRENT nuova chiave. AWSPREVIOUS Quando replichi un segreto in un'altra regione, Secrets Manager invia anche una richiesta Encrypt a  AWS KMS.

L'evento che registra l'operazione Encrypt è simile a quello del seguente evento di esempio. L'utente è il principale del tuo AWS account che accede alla tabella.

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