Come memorizzare dati di configurazione sensibili in AWS Secrets Manager
Amazon EMR descrive ed elenca operazioni API che emettono dati di configurazione personalizzati (ad esempio DescribeCluster
e ListInstanceGroups
) in testo normale. Amazon EMR si integra con AWS Secrets Manager in modo che puoi memorizzare i tuoi dati in Secrets Manager e utilizzare l'ARN di un segreto nelle tue configurazioni. In tal modo, non trasmetti dati di configurazione sensibili ad Amazon EMR in testo normale e non li esponi ad API esterne. Se indichi che una coppia chiave-valore contiene un ARN di un segreto archiviato in Secrets Manager, Amazon EMR recupera questo segreto quando invia i dati di configurazione al cluster. Amazon EMR non invia l'annotazione quando utilizza API esterne per visualizzare la configurazione.
Creazione di un segreto
Per creare un segreto, segui la procedura in Creazione di un segreto AWS Secrets Manager nella Guida per l'utente di AWS Secrets Manager. Nel passaggio 3 devi scegliere il campo Plaintext (Testo normale) per inserire il tuo valore sensibile.
Tieni presente che mentre Secrets Manager consente a un segreto di contenere fino a 65536 byte, Amazon EMR limita a 1024 caratteri la lunghezza combinata della chiave della proprietà (esclusa l'annotazione) e del valore del segreto recuperato.
Come concedere ad Amazon EMR l'accesso per recuperare il segreto
Amazon EMR utilizza un ruolo di servizio IAM per il provisioning e la gestione automatica dei cluster. Il ruolo di servizio di Amazon EMR definisce le azioni consentite ad Amazon EMR quando effettua il provisioning delle risorse ed esegue attività a livello di servizio che non vengono eseguite nel contesto di un'istanza Amazon EC2 in esecuzione in un cluster. Per ulteriori informazioni sui ruoli di servizio, consulta Ruolo di servizio per Amazon EMR (ruolo EMR) e Personalizzazione dei ruoli IAM.
Per consentire ad Amazon EMR di recuperare il valore del segreto da Secrets Manager, aggiungi la seguente dichiarazione di policy al tuo ruolo Amazon EMR quando avvii il cluster.
{ "Sid":"AllowSecretsRetrieval", "Effect":"Allow", "Action":"secretsmanager:GetSecretValue", "Resource":[ "arn:aws:secretsmanager:
<region>
:<aws-account-id>
:secret:<secret-name>
" ] }
Se crei il segreto con una chiave AWS KMS key gestita dal cliente, per la chiave che usi devi aggiungere anche l'autorizzazione kms:Decrypt
al ruolo Amazon EMR. Per ulteriori informazioni, consulta Autenticazione e controllo degli accessiAWS Secrets Manager nella Guida per l'utente di AWS Secrets Manager.
Come utilizzare il segreto in una classificazione di configurazione
Puoi aggiungere l'annotazione EMR.secret@
a qualunque proprietà di configurazione per indicare che la coppia chiave-valore contiene un ARN di un segreto memorizzato in Secrets Manager.
Nell'esempio seguente viene mostrato come fornire l'ARN di un segreto in una classificazione di configurazione:
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "EMR.secret@presto.s3.secret-key":"arn:aws:secretsmanager:<region>
:<aws-account-id>
:secret:<secret-name>
" } }
Quando crei un cluster e invii la configurazione annotata, Amazon EMR convalida le proprietà di configurazione. Se la configurazione è valida, Amazon EMR elimina l'annotazione dalla configurazione e recupera il segreto da Secrets Manager per creare la configurazione effettiva prima di applicarla al cluster:
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "presto.s3.secret-key":"<my-secret-key-retrieved-from-Secrets-Manager>
" } }
Quando invochi un'azione come DescribeCluster
, Amazon EMR restituisce la configurazione dell'applicazione corrente sul cluster. Se una proprietà di configurazione dell'applicazione è contrassegnata come contenente l'ARN di un segreto, la configurazione dell'applicazione restituita dalla chiamata DescribeCluster
contiene l'ARN e non il valore del segreto. Ciò garantisce che il valore del segreto sia visibile solo sul cluster:
{ "Classification":"core-site", "Properties":{ "presto.s3.access-key":"
<sensitive-access-key>
", "presto.s3.secret-key":"arn:aws:secretsmanager:<region>
:<aws-account-id>
:secret:<secret-name>
" } }
Come aggiornare il valore del segreto
Amazon EMR recupera il valore del segreto da una configurazione annotata ogni volta che il gruppo di istanze collegato viene avviato, riconfigurato o ridimensionato. Puoi utilizzare Secrets Manager per modificare il valore di un segreto utilizzato nella configurazione di un cluster in esecuzione. In tal caso, puoi inviare una richiesta di riconfigurazione a ogni gruppo di istanze che devono ricevere il valore aggiornato. Per ulteriori informazioni sulla modalità di riconfigurazione di un gruppo di istanze e sulle valutazioni da effettuare per tale operazione, consulta Riconfigurazione di un gruppo di istanze in un cluster in esecuzione.