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 dati viene crittografata con una KMS chiave e archiviata nei metadati del segreto. Per decrittografare il segreto, Secrets Manager decrittografa innanzitutto la chiave dati crittografata utilizzando la chiave in. KMS AWS KMS

Secrets Manager non utilizza la KMS chiave per crittografare direttamente il valore segreto. Utilizza invece la KMS chiave per generare e crittografare una chiave dati simmetrica Advanced Encryption Standard (AES) a 256 bit e utilizza la chiave dati per crittografare il valore 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. Puoi utilizzare la stessa KMS chiave o KMS chiavi diverse per ogni segreto del tuo account. Potresti voler utilizzare KMS chiavi diverse per impostare autorizzazioni personalizzate sulle chiavi per un gruppo di segreti o se desideri controllare operazioni particolari per tali chiavi. Secrets Manager supporta solo chiavi di crittografia KMS simmetriche. Se si utilizza una KMS chiave in un archivio di chiavi esterno, le operazioni di crittografia sulla KMS chiave potrebbero richiedere più tempo e essere meno affidabili e durature, poiché la richiesta deve viaggiare all'esterno. AWS

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

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 Se non si dispone dell'kms:Decryptautorizzazione per la chiave precedente, quando si modifica la chiave di crittografia, Secrets Manager non può decrittografare le versioni segrete per crittografarle nuovamente. In questo caso, le versioni esistenti non vengono ricrittografate.

Per fare in modo che AWSCURRENT possa essere decifrata 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 KMS chiave 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 KMS chiave.

Che viene crittografato?

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

  • Nome e descrizione del segreto

  • Impostazioni di rotazione

  • ARNdella KMS chiave associata al segreto

  • Eventuali AWS tag allegati

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 KMS chiave per il segreto e una richiesta per una chiave AES simmetrica a 256 bit. AWS KMS restituisce una chiave di dati in testo semplice e una copia di tale chiave dati crittografata sotto 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, nessuno dei Secrets Manager APIs restituisce il segreto crittografato o la chiave 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 KMS chiave del 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 KMS chiave nelle operazioni crittografiche, agisce per conto dell'utente che accede o aggiorna il valore segreto. È possibile concedere le autorizzazioni in una IAM politica o in una politica chiave. Le seguenti operazioni di Secrets Manager richiedono AWS KMS autorizzazioni.

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

È inoltre possibile utilizzare le chiavi o i valori nel contesto di crittografia come condizione per l'utilizzo della KMS chiave per operazioni crittografiche. Ad esempio, è possibile utilizzare un operatore di condizione di stringa in un documento di policy IAM o chiave oppure utilizzare un vincolo di concessione in una concessione. KMSla propagazione delle concessioni chiave può richiedere fino a cinque minuti. Per ulteriori informazioni, vedere CreateGrant.

In che modo Secrets Manager utilizza la tua KMS chiave

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

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 KMS chiave nella regione di replica.

  • UpdateSecret— Se si modifica il valore segreto o la KMS chiave, 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 KMS chiave nella regione di replica.

Crittografa

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

  • UpdateSecret— Se si modifica la KMS chiave, 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 KMS chiave nella regione di replica.

DescribeKey

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

Convalida dell'accesso alla chiave KMS

Quando si stabilisce o si modifica la KMS chiave associata a secret, Secrets Manager richiama le Decrypt operazioni GenerateDataKey and con la KMS chiave specificata. Queste chiamate confermano che il chiamante è autorizzato a utilizzare la KMS chiave 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 KMS chiave per operazioni specifiche solo quando Secrets Manager effettua la richiesta per conto dell'utente. La politica chiave non consente a nessun utente di utilizzare direttamente la KMS chiave.

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 dell'account di utilizzare la KMS chiave per operazioni crittografiche solo quando la richiesta proviene da Secrets Manager per loro conto. La chiave di condizione kms:ViaService applica questa limitazione.

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

  • Sebbene Secrets Manager non utilizzi le concessioni per accedere alla KMS chiave, la policy consente inoltre a Secrets Manager di creare concessioni per la KMS chiave per conto dell'utente e consente all'account di revocare qualsiasi concessione che consenta 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.

  • Segreto ARN: la prima coppia nome-valore identifica il segreto. La chiave è SecretARN. Il valore è l'Amazon Resource Name (ARN) del segreto.

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

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

    "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 si stabilisce o si modifica la KMS chiave per un segreto, Secrets Manager invia GenerateDataKeye decripta le richieste AWS KMS per verificare che il chiamante sia autorizzato a utilizzare la KMS chiave per queste operazioni. Scarta le risposte, non le utilizza sul valore del segreto.

In queste richieste di convalida, il valore di SecretARN è l'effettivo ARN del segreto, ma il SecretVersionId valore èRequestToValidateKeyAccess, come illustrato nell'esempio seguente di contesto di crittografia. 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 senza contesto di crittografia nei AWS CloudTrail registri più vecchi.

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 si crea o si modifica il valore segreto in un segreto, Secrets Manager invia una GenerateDataKeyrichiesta a AWS KMS cui specifica la KMS chiave 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 KMS chiave per il segreto, un identificatore di 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 dal testo cifratoKMS.

{ "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 KMS chiave associata a un segreto, Secrets Manager invia una richiesta di crittografia per AWS KMS crittografare nuovamente le versioni AWSPENDING segrete con la nuova chiave. AWSCURRENT 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" }