Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Condividere segreti in AWS Parameter Store

By Tyler WengerdJun 17, 20245 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Introduzione

Il 22 febbraio 2024 Amazon Web Services (AWS) ha annunciato la possibilità di condividere i parametri di Systems Manager Parameter Store tra più account.

Si tratta di una novità per Parameter Store, mentre AWS Secrets Manager ha sempre supportato i segreti cross-account. Ora che anche i parametri di Parameter Store si possono condividere, conviene preferirlo a Secrets Manager per archiviare e condividere segreti?

In questo articolo analizziamo le differenze tra Secrets Manager e Parameter Store e illustriamo i passaggi per creare e condividere un parametro segreto tra account AWS.

Secrets Manager vs. parametri cifrati

Funzionalità e limiti di Secrets Manager

Funzionalità e limiti di Parameter Store

Sia Secrets Manager sia Parameter Store si integrano inoltre con doitintl/secrets-init, uno strumento open source che semplifica l'integrazione dei servizi di Secrets Management con i workloads in esecuzione su cluster Kubernetes. Abbiamo dedicato all'argomento un articolo di approfondimento.

Quale scegliere?

Secrets Manager rimane il primo servizio da prendere in considerazione per archiviare i segreti. È stato progettato fin dall'inizio per questo scopo, è supportato da un'ampia gamma di servizi e offre funzionalità come la rotazione automatica e una dimensione del segreto superiore rispetto ai parametri di Parameter Store.

Parameter Store può comunque essere una valida alternativa per condividere segreti se:

  • si gestisce un numero molto elevato di segreti e il risparmio sui costi diventa significativo (0,05 $ contro 0,40 $ per segreto al mese);
  • si dispone già di parametri segreti in Parameter Store e non servono le funzionalità aggiuntive di Secrets Manager.

Creare e condividere un parametro segreto cifrato

La documentazione di Parameter Store contiene una guida passo passo alla creazione e condivisione di un parametro. Creare e condividere un parametro SecureString è un processo analogo, con la differenza che occorre condividere anche la chiave KMS usata per cifrare il parametro.

1. Creare una chiave in KMS

Per prima cosa, creare in AWS una chiave KMS simmetrica da utilizzare per cifrare il parametro. La documentazione completa è disponibile sul sito AWS.

Screenshot del passaggio 2 del processo di creazione della chiave KMS

Screenshot del processo di creazione della chiave KMS. La creazione di un alias è facoltativa ma consigliata.

Nella policy della chiave, inserire una condizione che ne consenta l'uso agli altri account. Per condividere chiave e parametro all'interno dell'intera AWS Organization, si può sfruttare una Condition nella policy come spiegato in questo articolo di AWS re:Post.

Screenshot della schermata di revisione del processo di creazione della chiave KMS

Screenshot della schermata finale di revisione del processo di creazione della chiave KMS

2. Creare un parametro Advanced in Parameter Store

Una volta creata la chiave KMS, creare il parametro in Parameter Store come descritto nella documentazione AWS.

Selezionare il tier Advanced, il tipo SecureString e la chiave KMS creata in precedenza.

Screenshot del processo di creazione del parametro

Si possono archiviare solo parametri Advanced! Se per errore si seleziona un parametro standard, nessun problema: lo si può modificare in seguito.

3. Condividere il parametro tramite Resource Access Manager (RAM)

Una volta creato il parametro, aprire Resource Access Manager e creare un nuovo Resource Share per il parametro come descritto nella documentazione AWS.

Nello step Associate managed permissions utilizzare la policy AWSRAMDefaultPermissionsSSMParameterReadOnly e, nello step Grant access to principals, indicare gli account a cui consentire l'accesso al parametro (oppure l'intera AWS Organization, se si preferisce).

Screenshot da Resource Access Manager per la condivisione del parametro - sezione \

Si tenga presente che i tag associati al resource share non modificano i tag del parametro

Screenshot da Resource Access Manager per la condivisione del parametro - sezione \

Il permesso AWSRAMDefaultPermissionsSSMParameterReadOnly è sufficiente quando serve un accesso in sola lettura

Screenshot da Resource Access Manager per la condivisione del parametro - sezione \

In questo esempio, solo l'account ID 123456789012 avrà accesso al parametro condiviso. Non aggiungere l'account in cui il parametro è già presente.

Screenshot da Resource Access Manager per la condivisione del parametro - schermata finale di revisione

L'ultimo step è semplicemente una schermata di revisione

4. Accettare il resource share

Una volta creato il resource share, gli account esterni potrebbero dover accettare l'invito.

Se gli account in condivisione fanno parte della propria AWS Organization e la condivisione delle risorse all'interno dell'organizzazione è abilitata, l'accettazione avviene in automatico.

Per gli account esterni all'organizzazione, o se la condivisione delle risorse all'interno dell'organizzazione non è abilitata, il resource share dovrà essere accettato da ogni singolo account.

5. Verificare l'accesso al parametro condiviso

Creato e condiviso correttamente il parametro, è arrivato il momento di metterlo alla prova.

Un modo rapido per verificare l'accesso al parametro da un account esterno è ricorrere alla AWS CLI (da un terminale locale o tramite AWS CloudShell):

 aws ssm get-parameter --name <ARN completo del parametro> --with-decryption

Di seguito un esempio di output con il valore decifrato del parametro:

Screenshot da AWS CloudShell che mostra il comando per leggere il parametro cifrato e l'output positivo

Per non visualizzare il valore del parametro segreto, è sufficiente omettere il flag with-decryption

Riferimenti

La possibilità di condividere i parametri di Parameter Store è un'aggiunta molto utile, soprattutto per distribuire parametri non segreti da un account centrale all'interno di un'AWS Organization. Per la gestione dei segreti, però, Secrets Manager resta la prima scelta.

Esempio di codice

Vuole provarlo con un approccio Infrastructure-as-Code? Questo gist su GitHub contiene un esempio di codice Terraform per creare un parametro cifrato condiviso all'interno della propria AWS Organization.

Maggiori informazioni

In DoiT International mettiamo a disposizione competenza e supporto su Secrets Manager, Parameter Store e altri servizi cloud. Per scoprire di più sulla consulenza DoiT, visiti https://www.doit.com/services/.

Condividere segreti in AWS Parameter Store