AWS KMS crittografia per AWS Systems Manager Parameter Store SecureString parametri - AWS Systems 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à.

AWS KMS crittografia per AWS Systems Manager Parameter Store SecureString parametri

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

con Parameter Store, è possibile creare, archiviare e gestire i dati come parametri con valori. È possibile creare un parametro in Parameter Store e utilizzalo 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 SecureString parametri. Parameter Store utilizza AWS KMS keys per crittografare i valori di SecureString parametri quando vengono creati o modificati. Utilizza inoltre KMS le chiavi per decrittografare i valori dei parametri al momento dell'accesso. Puoi usare quello Chiave gestita da AWS Parameter Store crea per l'account o specifica la tua chiave gestita dal cliente.

Importante

Parameter Store supporta solo chiavi simmetriche KMS. Non puoi utilizzare una KMSchiave asimmetrica per crittografare i parametri. Per informazioni su come determinare se una KMS chiave è simmetrica o asimmetrica, consulta Identificazione di diversi tipi di chiave nella Guida per gli sviluppatori di.AWS Key Management Service

Parameter Store supporta due livelli di parametri: standard e avanzato. SecureString I parametri standard, che non possono superare i 4096 byte, sono crittografati e decrittati direttamente con la KMS chiave specificata. Per crittografare e decrittare i parametri avanzati, SecureString Parameter Store utilizza la crittografia a busta con. AWS Encryption SDK È possibile convertire un parametro SecureString standard in un parametro avanzato, ma non è possibile convertire un parametro avanzato in uno standard. Per ulteriori informazioni sulla differenza tra SecureString parametri standard e avanzati, consultaGestione dei livelli dei parametri.

Protezione dei SecureString parametri standard

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

È possibile selezionare la chiave che KMS Parameter Store utilizza per crittografare il valore del parametro. Se non specifichi una KMS chiave, Parameter Store utilizza la Chiave gestita da AWS che Systems Manager crea automaticamente nel tuo account. Questa KMS chiave ha l'aws/ssmalias.

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

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

Per creare un SecureString parametro standard, utilizzare l'PutParameteroperazione in Systems ManagerAPI. Ometti il parametro Tier o specifica un valore Standard, che è l'impostazione predefinita. Includi un parametro Type con un valore SecureString. Per specificare una KMS chiave, utilizzare il KeyId parametro. L'impostazione predefinita è Chiave gestita da AWS per il tuo account,aws/ssm.

Parameter Store quindi chiama l' AWS KMS Encryptoperazione con la KMS chiave e il valore del parametro plaintext. 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 --type parametro nella AWS CLI per creare un SecureString parametro. Poiché il comando omette i parametri opzionali --tier e, --key-id Parameter Store crea un SecureString parametro standard e lo cripta sotto. 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. Questo esempio utilizza un ID KMS chiave per identificare la KMS chiave, ma puoi usare qualunque identificatore di KMS chiave valido. Poiché il comando omette il Tier parametro ()--tier, Parameter Store crea un SecureString parametro 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 SecureString parametro da Parameter Store, il valore è crittografato. Per ottenere un parametro, utilizzare l'GetParameter operazione in Systems ManagerAPI.

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

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

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 decrittografare 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 come eseguire questa operazione Parameter Store utilizza una KMS chiave per crittografare e decrittare un parametro standard. SecureString

Crittografare un parametro standard

  1. Quando si utilizza PutParameter per creare un parametro, SecureString Parameter Store invia una Encrypt richiesta a AWS KMS. Questa richiesta include il valore del parametro in testo normale, la KMS chiave scelta e la Parameter Store del contesto di crittografia. Durante la trasmissione a AWS KMS, il valore di testo normale nel SecureString parametro è protetto da Transport Layer Security ()TLS.

  2. AWS KMS crittografa il valore del parametro con la KMS chiave 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 SecureString parametro standard

Decrittografia di un parametro standard

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

  2. AWS KMS usa la stessa KMS chiave e il contesto di crittografia fornito per decrittare il valore crittografato. Restituisce il valore del parametro in testo normale (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 normale nella GetParameter risposta.

Protezione dei parametri avanzati SecureString

Quando si utilizza PutParameter per creare un SecureString parametro avanzato, Parameter Store utilizza la crittografia a busta con AWS Encryption SDK e una crittografia simmetrica AWS KMS key 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 KMS chiave di dati. 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 allo sviluppo in GitHub.

Per ogni valore di SecureString parametro, Parameter Store chiama AWS Encryption SDK per crittografare il valore del parametro utilizzando una chiave di dati univoca che AWS KMS genera (GenerateDataKey). I AWS Encryption SDK ritorni 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 SecureString parametro. Quindi, quando ottieni un valore di SecureString parametro avanzato, Parameter Store usa AWS Encryption SDK per decrittografare il valore del parametro. Ciò richiede una chiamata a per AWS KMS decrittografare la chiave di dati crittografata.

Per creare un SecureString parametro avanzato, utilizzare l'PutParameteroperazione in Systems ManagerAPI. Imposta il valore del parametro Tier su Advanced. Includi un parametro Type con un valore SecureString. Per specificare una KMS chiave, utilizzare il KeyId parametro. L'impostazione predefinita è 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 KMS chiave, ma puoi usare qualunque identificatore di KMS chiave valido.

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

Quando ottieni un SecureString parametro da Parameter Store, il valore è il messaggio crittografato che ha AWS Encryption SDK restituito. Per ottenere un parametro, utilizzare l'GetParameteroperazione in Systems ManagerAPI.

L'esempio seguente utilizza l'GetParameteroperazione Systems Manager per ottenere il MyParameter parametro da Parameter Store senza decifrarne il valore.

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

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 decrittografare 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 SecureString avanzato in uno standard, ma è possibile convertire un parametro SecureString standard in uno avanzato. Per convertire un parametro SecureString standard in uno SecureString 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 viene omesso, Parameter Store usa il Chiave gestita da AWS per l'account. Puoi specificare qualsiasi KMS chiave che il principale è autorizzato a utilizzare, anche se è stata utilizzata un'altra KMS chiave per crittografare il parametro standard.

Quando si utilizza il Overwrite parametro, 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 come eseguire questa operazione Parameter Store utilizza una KMS chiave per crittografare e decrittare un parametro avanzato. SecureString

Crittografare un parametro avanzato

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

  2. AWS Encryption SDK invia una GenerateDataKeyrichiesta a AWS KMS con l'identificatore della KMS chiave specificata e il Parameter Store del contesto di crittografia. AWS KMS restituisce due copie della chiave di dati univoca: una in testo normale e una crittografata con la KMS chiave. 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 Parameter Store del contesto di crittografia.

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

    Crittografia di un SecureString valore di parametro avanzato

Decrittografare un parametro avanzato

  1. È possibile includere il parametro WithDecryption in una richiesta GetParameter per ottenere un parametro SecureString avanzato. Quando lo fai, Parameter Store passa il messaggio crittografato dal valore di parametro a un metodo di decrittografia di. AWS Encryption SDK

  2. AWS Encryption SDK Chiama l'operazione AWS KMS Decrypt. Trasferisce la chiave di dati crittografata e la Parameter Store del contesto di crittografia dal contesto di crittografia.

  3. AWS KMS utilizza la KMS chiave e il Parameter Store del contesto di crittografia per decrittografare 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 del parametro. Restituisce il valore del parametro in testo normale a Parameter Store.

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

Impostazione delle autorizzazioni per crittografare e decrittografare i valori dei parametri

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

È possibile utilizzare le politiche AWS Identity and Access Management (IAM) per consentire o negare l'autorizzazione a un utente di chiamare Systems Manager PutParameter e GetParameter le operazioni.

Inoltre, se si utilizzano chiavi gestite dal cliente per crittografare i valori SecureString dei parametri, puoi utilizzare IAM le policy e le policy delle chiavi per gestire le autorizzazioni di crittografia e decrittazione. Tuttavia, non puoi definire policy di controllo degli accessi per la aws/ssm KMS chiave predefinita. Per informazioni dettagliate sul controllo dell'accesso alle chiavi gestite dal cliente, consulta Accesso con KMS chiave e autorizzazioni nella Guida per gli AWS Key Management Service sviluppatori.

L'esempio seguente mostra una IAM policy progettata per SecureString parametri 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' AWS KMS Encryptoperazione su una chiave gestita dal cliente di esempio.

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

L'esempio seguente mostra una IAM policy progettata per SecureString parametri 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' AWS KMS GenerateDataKeyoperazione su una chiave gestita dal cliente di esempio.

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

L'esempio finale mostra anche una IAM policy che può essere utilizzata per SecureString parametri 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' AWS KMS Decryptoperazione su una chiave gestita dal cliente di esempio.

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

Parameter Store contesto di crittografia

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, lega il contesto di AWS KMS crittografia ai dati crittografati crittograficamente. 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.

AWS Encryption SDK Anche richiede un contesto di crittografia, sebbene lo gestisca in modo diverso. Parameter Store fornisce il contesto di crittografia al metodo di crittografia. associa AWS Encryption SDK 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 AWS Encryption SDK decrittografia di 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 normale.

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

  • Chiave: PARAMETER_ARN

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

Il formato del contesto di crittografia è il seguente:

"PARAMETER_ARN":"arn:aws:ssm:region-id:account-id:parameter/parameter-name"

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

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

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

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

È possibile decrittografare un valore di SecureString parametro crittografato richiamando l' AWS KMS Decryptoperazione con il corretto contesto di crittografia e il valore del parametro crittografato che l'GetParameteroperazione Systems Manager restituisce. Tuttavia, ti consigliamo di decrittografare Parameter Store valori dei parametri utilizzando l'GetParameteroperazione con il WithDecryption parametro.

Puoi anche includere il contesto di crittografia in una IAM policy. 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 IAM policy policy consente all'utente di ottenere il valore del MyParameter parametro e di decrittarne il valore utilizzando la chiave specificataKMS. 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 KMS chiave e la chiamata a ha GetParameter esito negativo se il contesto di crittografia non corrisponde alla stringa.

Prima di utilizzare una dichiarazione di policy come questa, sostituisci la example ARNs con valori validi.

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

Risoluzione dei problemi KMS principali in Parameter Store

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

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

    Per risolvere questo errore, eseguire l'applicazione con credenziali differenti o modificare la policy IAM o delle chiavi che impedisce l'operazione. Per assistenza AWS KMS IAM e politiche chiave, consulta Accesso e autorizzazioni KMS chiave nella Guida per gli AWS Key Management Service sviluppatori.

  • La KMS chiave non è stata trovata.

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

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

    Per trovare lo stato chiave di una KMS chiave, utilizzate l'DescribeKeyoperazione.