Utilizzo di AWS KMS da parte di AWS Systems Manager Parameter Store - AWS Key Management Service

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à.

Utilizzo di AWS KMS da parte di AWS Systems Manager Parameter Store

Con AWS Systems Manager Parameter Store, è possibile creare parametri di stringa sicura, parametri che hanno un nome parametro in testo in chiaro e un valore di parametro crittografato. Parameter Store utilizza AWS KMS per crittografare e decrittare i valori di parametro dei parametri di stringa sicura.

Con Parameter Store è possibile creare, archiviare e gestire i dati come parametri con valori. È possibile creare un parametro in Parameter Store e utilizzarlo in più applicazioni e servizi soggetti a policy e autorizzazioni che tu stesso stabilisci. Quando è necessario modificare il valore di un parametro, è possibile modificare un'istanza piuttosto che gestire modifiche soggette a errore in numerose origini. Parameter Store supporta una struttura gerarchica per i nomi dei parametri, in modo da definire un parametro per utilizzi specifici.

Per gestire i dati sensibili, è possibile creare parametri di stringa sicura. Parameter Store utilizza AWS KMS keys per crittografare i valori di parametri dei parametri di stringa sicura quando vengono creati o modificati. Utilizza inoltre le chiavi KMS per decrittare i valori dei parametri al momento dell'accesso. Puoi utilizzare la Chiave gestita da AWS che Parameter Store crea per l'account o specificare la tua chiave gestita dal cliente.

Importante

Parameter Store supporta solo chiavi KMS simmetriche. Non puoi utilizzare una chiave KMS asimmetrica per crittografare i parametri. Per informazioni su come determinare se una chiave KMS è simmetrica o asimmetrica, consulta Individuazione di chiavi KMS asimmetriche.

Parameter Store supporta i parametri nei livelli standard e avanzato. I parametri standard, che non possono superare i 4096 byte, sono crittografati e decrittati direttamente con la chiave KMS specificata. Per crittografare e decrittografare i parametri di stringa sicura avanzati, Parameter Store utilizza la crittografia envelope con AWS Encryption SDK. È possibile convertire un parametro di stringa sicura standard in un parametro avanzato, ma non è possibile convertire un parametro avanzato in uno standard. Per ulteriori informazioni sulla differenza tra parametri di stringa sicura standard e avanzati, consulta Informazioni sui parametri avanzati di Systems Manager nella Guida per l'utente di AWS Systems Manager.

Protezione dei parametri di stringa sicura standard

Parameter Store non esegue alcuna operazione di crittografia. Al contrario, si basa su AWS KMS per crittografare e decrittare i valori dei parametri di stringa sicura. Quando si crea o si modifica un valore di parametro stringa sicura standard, Parameter Store chiama l'operazione AWS KMS Encrypt. Questa operazione usa una chiave KMS di crittografia simmetrica direttamente per crittografare il valore del parametro anziché utilizzare la chiave KMS per generare una chiave dei dati.

È possibile selezionare la chiave di KMS utilizzata da Parameter Store per crittografare il valore dei parametri. Se non specifichi una chiave KMS, Parameter Store usa la Chiave gestita da AWS che Systems Manager crea automaticamente nel tuo account. Questa chiave KMS ha l'alias aws/ssm.

Per visualizzare la chiave aws/ssm KMS predefinita per il tuo account, utilizza l'DescribeKeyoperazione nell'AWS KMSAPI. L'esempio seguente utilizza il comando describe-key in AWS Command Line Interface (AWS CLI) con il nome di alias aws/ssm.

aws kms describe-key --key-id alias/aws/ssm

Per creare un parametro di stringa sicuro standard, utilizzare l'PutParameteroperazione nell'API Systems Manager. Ometti il parametro Tier o specifica un valore Standard, che è l'impostazione predefinita. Includi un parametro Type con un valore SecureString. Per specificare una chiave KMS, utilizza il parametro KeyId. L'impostazione predefinita è la Chiave gestita da AWS per il tuo account: aws/ssm.

Parameter Store quindi chiama l'operazione AWS KMS Encrypt con la chiave KMS e il valore del parametro in testo in chiaro. AWS KMS restituisce il valore del parametro crittografato che Parameter Store memorizza con il nome del parametro.

L'esempio seguente utilizza il comando put-parameter di Systems Manager e il relativo parametro --type in AWS CLI per creare un parametro di stringa sicura. Poiché il comando omette i parametri opzionali --tier e --key-id, Parameter Store crea un parametro di stringa sicura standard e lo crittografa con la Chiave gestita da AWS.

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString

Il seguente esempio simile utilizza il parametro --key-id per specificare una chiave gestita dal cliente. Nell'esempio viene utilizzato un ID chiave KMS per identificare la chiave KMS, ma è possibile utilizzare qualsiasi identificatore di chiave KMS valido. Poiché il comando omette il parametro Tier (--tier), Parameter Store crea un parametro di stringa sicura standard, non uno avanzato.

aws ssm put-parameter --name param1 --value "secret" --type SecureString --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

Quando si ottiene un parametro di stringa sicura da Parameter Store, il suo valore è crittografato. Per ottenere un parametro, utilizzare l'GetParameter operazione nell'API Systems Manager.

L'esempio seguente utilizza il comando get-parameter di Systems Manager in AWS CLI per ottenere il parametro MyParameter da Parameter Store senza decrittarne il valore.

$ aws ssm get-parameter --name MyParameter { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" } }

Per decrittografare il valore del parametro prima di restituirlo, imposta il parametro WithDecryption di GetParameter su true. Quando si utilizza WithDecryption, Parameter Store chiama l'operazione AWS KMS Decrypt a tuo nome per decrittare il valore del parametro. Di conseguenza, la richiesta GetParameter restituisce il parametro con un valore di parametro in testo normale, come mostrato nel seguente esempio.

$ aws ssm get-parameter --name MyParameter --with-decryption { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" } }

Il seguente flusso di lavoro mostra il modo in cui Parameter Store utilizza una chiave KMS per crittografare e decrittare un parametro di stringa sicura standard.

Crittografare un parametro standard

  1. Quando usi PutParameter per creare un parametro di stringa sicura, Parameter Store invia una richiesta Encrypt a AWS KMS. Questa richiesta include il valore del parametro in testo in chiaro, la chiave KMS scelta e il contesto di crittografia di Parameter Store. Durante la trasmissione a AWS KMS, il valore di testo non crittografato nel parametro di stringa sicura è protetto dal Transport Layer Security (TLS).

  2. AWS KMS crittografa il valore del parametro con la chiave KMS specificata e il contesto di crittografia. Restituisce il testo cifrato a Parameter Store, che memorizza il nome e il valore crittografato del parametro.

    Crittografia di un valore di parametro di stringa sicura standard

Decrittografia di un parametro standard

  1. Quando includi il parametro WithDecryption in una richiesta GetParameter, Parameter Store invia una richiesta Decrypt a AWS KMS con il valore di parametro di stringa sicura crittografato e il contesto di crittografia di Parameter Store.

  2. AWS KMS usa la stessa chiave KMS e il contesto di crittografia fornito per decrittare il valore crittografato. Restituisce il valore del parametro in testo in chiaro (decrittografato) a Parameter Store. Durante la trasmissione, i dati in testo normale sono protetti da TLS.

  3. Parameter Store restituisce il valore del parametro in testo in chiaro nella risposta GetParameter.

Protezione dei parametri di stringa sicura avanzati

Quando usi PutParameter per creare un parametro di stringa sicura avanzato, Parameter Store utilizza la crittografia envelope con AWS Encryption SDK e una AWS KMS key di crittografia simmetrica per proteggere il valore del parametro. Ogni valore di parametro avanzato è crittografato con una chiave di dati univoca e la chiave di dati è crittografata con una chiave KMS. Puoi utilizzare la Chiave gestita da AWS per l'account (aws/ssm) o qualsiasi chiave gestita dal cliente.

AWS Encryption SDK è una libreria open source lato client, che consente di crittografare e decrittografare i dati utilizzando gli standard di settore e le best practice. È supportata su più piattaforme e in più linguaggi di programmazione, compresa un'interfaccia a riga di comando. È possibile visualizzare il codice sorgente e contribuire al suo sviluppo in GitHub.

Per ogni valore di parametro di stringa sicura, Parameter Store chiama AWS Encryption SDK per crittografare il valore del parametro utilizzando una chiave dati univoca che AWS KMS genera (GenerateDataKey). AWS Encryption SDK restituisce a Parameter Store un messaggio crittografato che include il valore di parametro crittografato e una copia crittografata della chiave di dati univoca. Parameter Store archivia l'intero messaggio crittografato nel valore del parametro stringa sicura. Quindi, quando ottieni un valore di parametro di stringa sicura avanzato, Parameter Store usa AWS Encryption SDK per decrittarne il valore di parametro. Ciò richiede una chiamata a AWS KMS per decrittografare la chiave di dati crittografata.

Per creare un parametro di stringa sicuro avanzato, utilizzare l'PutParameteroperazione nell'API Systems Manager. Imposta il valore del parametro Tier su Advanced. Includi un parametro Type con un valore SecureString. Per specificare una chiave KMS, utilizza il parametro KeyId. L'impostazione predefinita è la Chiave gestita da AWS per il tuo account: aws/ssm.

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced

Il seguente esempio simile utilizza il parametro --key-id per specificare una chiave gestita dal cliente. Questo esempio utilizza l'Amazon Resource Name (ARN) della chiave KMS, ma puoi usare qualunque identificatore di chiave KMS valido.

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

Quando si ottiene un parametro di stringa sicura da Parameter Store, il valore è il messaggio crittografato che AWS Encryption SDK ha restituito. Per ottenere un parametro, utilizzare l'GetParameter operazione nell'API Systems Manager.

L'esempio seguente utilizza l'operazione GetParameter di Systems Manager per ottenere il parametro MyParameter da Parameter Store senza decrittarne il valore.

$ aws ssm get-parameter --name MyParameter { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" } }

Per decrittografare il valore del parametro prima di restituirlo, imposta il parametro WithDecryption di GetParameter su true. Quando si utilizza WithDecryption, Parameter Store chiama l'operazione AWS KMS Decrypt a tuo nome per decrittare il valore del parametro. Di conseguenza, la richiesta GetParameter restituisce il parametro con un valore di parametro in testo normale, come mostrato nel seguente esempio.

$ aws ssm get-parameter --name MyParameter --with-decryption { "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" } }

Non è possibile convertire un parametro di stringa sicura avanzato in uno standard, ma è possibile convertire un parametro di stringa sicura standard in uno avanzato. Per convertire un parametro di stringa sicura standard in uno avanzato, utilizza l'operazione PutParameter con il parametro Overwrite. Type deve essere SecureString e il valore Tier deve essere Advanced. Il parametro KeyId che identifica una chiave gestita dal cliente è facoltativo. Se si omette, Parameter Store utilizza la Chiave gestita da AWS per l'account. Puoi specificare qualsiasi chiave KMS che il principale è autorizzato a utilizzare, anche se è stata utilizzata un'altra chiave KMS per crittografare il parametro standard.

Quando si utilizza il parametro Overwrite, Parameter Store utilizza AWS Encryption SDK per crittografare il valore del parametro. Quindi memorizza il nuovo messaggio crittografato in Parameter Store.

$ aws ssm put-parameter --name myStdParameter --value "secret_value" --type SecureString --tier Advanced --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --overwrite

Il seguente flusso di lavoro mostra il modo in cui Parameter Store utilizza una chiave KMS per crittografare e decrittare un parametro di stringa sicura avanzato.

Crittografare un parametro avanzato

  1. Quando usi PutParameter per creare un parametro di stringa sicura avanzato, Parameter Store utilizza AWS Encryption SDK e AWS KMS per crittografare il valore del parametro. Parameter Store chiama AWS Encryption SDK con il valore del parametro, la chiave KMS specificata e il contesto di crittografia di Parameter Store.

  2. AWS Encryption SDKinvia una GenerateDataKeyrichiesta a AWS KMS con l'identificatore della chiave KMS specificata e il contesto di crittografia Parameter Store. AWS KMSrestituisce due copie della chiave dati univoca: una in testo semplice e una crittografata con la chiave KMS. Il contesto di crittografia viene utilizzato per crittografare la chiave di dati.

  3. AWS Encryption SDK utilizza la chiave di dati in testo normale per crittografare il valore del parametro. Restituisce un messaggio crittografato che include il valore di parametro crittografato, la chiave di dati crittografata e altri dati, tra cui il contesto di crittografia di Parameter Store.

  4. Parameter Store archivia il messaggio crittografato come valore del parametro.

    Crittografia di un valore di parametro di stringa sicura avanzato

Decrittografare un parametro avanzato

  1. È possibile includere il parametro WithDecryption in una richiesta GetParameter per ottenere un parametro di stringa sicura avanzato. In questo caso, Parameter Store trasmette il messaggio crittografato dal valore di parametro a un metodo di decrittografia dell'AWS Encryption SDK.

  2. AWS Encryption SDK chiama l'operazione KMS AWS KMS Decrypt. Trasferisce la chiave di dati crittografata e il contesto di crittografia di Parameter Store dal messaggio crittografato.

  3. AWS KMS utilizza la chiave KMS e il contesto di crittografia di Parameter Store per decrittare la chiave di dati crittografata. Quindi restituisce la chiave di dati in testo normale (decrittografato) a AWS Encryption SDK.

  4. AWS Encryption SDK utilizza la chiave di dati in testo normale per decrittografare il valore di parametro. Restituisce il valore del parametro in testo in chiaro a Parameter Store.

  5. Parameter Store verifica il contesto di crittografia e restituisce il valore del parametro in testo in chiaro nella risposta GetParameter.

Impostazione delle autorizzazioni per crittografare e decrittografare i valori dei parametri

Per crittografare un valore di parametro di stringa sicura standard, l'utente necessita dell'autorizzazione kms:Encrypt. Per crittografare un valore di parametro di stringa sicura avanzato, l'utente necessita dell'autorizzazione kms:GenerateDataKey. Per decrittografare entrambi i tipi di valori di parametri di stringa sicura, l'utente necessita dell'autorizzazione kms:Decrypt.

È possibile usare le policy IAM per consentire o negare le autorizzazioni a un utente per chiamare le operazioni PutParameter e GetParameter di Systems Manager.

Inoltre, se si utilizzano chiavi gestite dal cliente per crittografare i valori dei parametri di stringa sicura, puoi utilizzare le policy IAM e le policy delle chiavi per gestire le autorizzazioni di crittografia e decrittazione. Tuttavia, non puoi definire policy di controllo degli accessi per la chiave KMS aws/ssm predefinita. Per ulteriori informazioni sul controllo degli accessi alle chiavi gestite dal cliente, consulta Autenticazione e controllo degli accessi per AWS KMS.

L'esempio seguente mostra una policy IAM progettata per parametri di stringa sicura standard. Questa consente all'utente di chiamare l'operazione PutParameter di Systems Manager su tutti i parametri nel percorso FinancialParameters. La policy, inoltre, consente all'utente di chiamare l'operazione AWS KMS Encrypt su una chiave gestita dal cliente di esempio.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/FinancialParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Encrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

L'esempio seguente mostra una policy IAM progettata per parametri di stringa sicura avanzati. Questa consente all'utente di chiamare l'operazione PutParameter di Systems Manager su tutti i parametri nel percorso ReservedParameters. La policy, inoltre, consente all'utente di chiamare l'operazione AWS KMS GenerateDataKey su una chiave gestita dal cliente di esempio.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ReservedParameters/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

L'esempio finale mostra anche una policy IAM che può essere utilizzata per parametri di stringa sicura standard o avanzati. Questa consente all'utente di chiamare le operazioni GetParameter di Systems Manager (e le operazioni correlate) su tutti i parametri nel percorso ITParameters. La policy, inoltre, consente all'utente di chiamare l'operazione AWS KMS Decrypt su una chiave gestita dal cliente di esempio.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ITParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ] }

Contesto di crittografia di Parameter Store

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

È inoltre possibile utilizzare il contesto di crittografia per identificare un'operazione di crittografia nei record e nei log di controllo. Il contesto di crittografia viene visualizzato in testo normale nei log, ad esempio nei log di AWS CloudTrail.

Anche AWS Encryption SDK richiede un contesto di crittografia, sebbene lo gestisca in modo diverso. Parameter Store fornisce il contesto di crittografia al metodo di crittografia. AWS Encryption SDK associa crittograficamente il contesto di crittografia ai dati crittografati. Include il contesto di crittografia in testo normale nell'intestazione del messaggio crittografato restituito. Tuttavia, a differenza di AWS KMS, i metodi di decrittografia di AWS Encryption SDK non prendono un contesto di crittografia come input. Invece, quando decritta i dati, AWS Encryption SDK ottiene il contesto di crittografia dal messaggio crittografato. Parameter Store verifica che il contesto di crittografia includa il valore atteso prima di restituire il valore del parametro in testo in chiaro.

Parameter Store usa il seguente contesto di crittografia in tutte le operazioni di crittografia:

  • Chiave: PARAMETER_ARN

  • Valore: l'ARN (Amazon Resource Name) del parametro crittografato.

Il formato del contesto di crittografia è il seguente:

"PARAMETER_ARN":"arn:aws:ssm:<REGION_NAME>:<ACCOUNT_ID>:parameter/<parameter-name>"

Ad esempio, Parameter Store include questo contesto di crittografia nelle chiamate per crittografare e decrittografare il parametro MyParameter in un Account AWS e in una regione di esempio.

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter"

Se il parametro è in un percorso gerarchico di Parameter Store, il nome e il percorso sono inclusi nel contesto di crittografia. Ad esempio, questo contesto di crittografia viene utilizzato per crittografare e decrittare il parametro MyParameter nel percorso /ReadableParameters in un Account AWS e in una regione di esempio.

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/ReadableParameters/MyParameter"

È possibile decrittografare un valore di parametro di stringa sicura crittografato richiamando l'operazione AWS KMS Decrypt con il corretto contesto di crittografia e il valore del parametro crittografato che l'operazione GetParameter di Systems Manager restituisce. Tuttavia, consigliamo di decrittare i valori del parametro GetParameter di Parameter Store usando l'operazione con il parametro WithDecryption.

Puoi anche includere il contesto di crittografia nella policy IAM. Ad esempio, è possibile consentire a un utente di decrittografare solo un determinato valore di parametro o un set di valori di parametri.

La seguente istruzione di esempio della policy IAM consente all'utente di ottenere il valore del parametro MyParameter e di decrittarne il valore utilizzando la chiave KMS specificata. Tuttavia le autorizzazioni si applicano solo quando il contesto di crittografia corrisponde alla stringa specificata. Queste autorizzazioni non si applicano a qualsiasi altro parametro o chiave KMS e la chiamata a GetParameter ha esito negativo se il contesto di crittografia non corrisponde alla stringa.

Prima di usare un'istruzione di policy simile a questa, sostituisci l'ARN di esempio con valori validi.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter" }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter" } } } ] }

Risoluzione dei problemi delle chiavi KMS in Parameter Store

Per eseguire qualsiasi operazione su un parametro di stringa sicura, Parameter Store deve essere in grado di utilizzare la chiave KMS AWS KMS specificata per l'operazione. La maggior parte degli errori di Parameter Store relativi alle chiavi KMS sono causati da uno dei seguenti motivi:

  • Le credenziali utilizzate da un'applicazione non hanno l'autorizzazione per eseguire l'operazione specificata sulla chiave KMS.

    Per risolvere questo errore, eseguire l'applicazione con credenziali differenti o modificare la policy IAM o della chiave che impedisce l'operazione. Per aiuto con le policy IAM e delle chiavi AWS KMS, consulta Autenticazione e controllo degli accessi per AWS KMS.

  • La chiave KMS non è stata trovata.

    In genere questo accade quando si utilizza un identificatore errato per la chiave KMS. Trova gli identificatori corretti per la chiave KMS e riprova il comando.

  • La chiave KMS non è abilitata. Quando ciò si verifica, Parameter Store restituisce un'InvalidKeyIdeccezione con un messaggio di errore dettagliato da. AWS KMS Se lo stato della chiave KMS è Disabled, abilitalo. Se è Pending Import, completa la procedura di importazione. Se lo stato di chiave è Pending Deletion, annulla l'eliminazione della chiave o utilizza un'altra chiave KMS.

    Per trovare lo stato di chiave di una chiave KMS nella console AWS KMS, nella pagina Chiavi gestite cliente o Chiavi gestite da AWS, consulta la colonna Stato. Per utilizzare l'AWS KMSAPI per trovare lo stato di una chiave KMS, utilizza l'DescribeKeyoperazione.