Proteggi i segreti delle app con Vault Dedicated e External Secrets Operator
In questo tutorial imparerai come utilizzare IBM Cloud Vault Enterprise per gestire i segreti delle applicazioni in esecuzione nel tuo cluster IBM Cloud Kubernetes Service, avvalendoti dello strumento open source External Secrets Operator.
Sei uno sviluppatore all'interno di un'organizzazione e il tuo team utilizza Kubernetes Service per distribuire applicazioni e servizi containerizzati su IBM Cloud. Desideri archiviare i segreti della tua applicazione in Vault Dedicated, il servizio gestito HashiCorp Vault di IBM Cloud, dove potrai crittografarli a riposo, gestirne il ciclo di vita e ruotarli facilmente.
Grazie a Vault Dedicated e all’External Secrets Operator, è possibile centralizzare e proteggere i segreti utilizzati dalle applicazioni in esecuzione nei cluster di Kubernetes. Anziché inserire i segreti al momento della distribuzione, è possibile configurare le applicazioni in modo che recuperino in modo sicuro i segreti da Vault Dedicated durante l'esecuzione. Ad esempio, considera il seguente scenario:
- In qualità di sviluppatore, utilizzi Vault Dedicated per archiviare un segreto relativo a un'applicazione che desideri distribuire in un cluster di Kubernetes.
- È possibile configurare l'External Secrets Operator per connettersi alla propria istanza di Vault Dedicated utilizzando il provider HashiCorp Vault.
- Il controller External Secrets recupera gli oggetti “
ExternalSecrets” presenti nel file di configurazione che hai definito utilizzando l’API Kubernetes. - Durante l'esecuzione dell'applicazione, il controller recupera i dati segreti da Vault Dedicated e converte gli oggetti "
ExternalSecrets" in segreti " Kubernetes " per il proprio cluster.
Questo scenario riguarda uno strumento di terze parti che può influire sulla preparazione alla conformità dei carichi di lavoro in esecuzione nel cluster di Kubernetes. Se aggiungi uno strumento della community o di terze parti, tieni presente che sei responsabile di garantire la conformità delle tue app e di collaborare con il fornitore competente per risolvere eventuali problemi. Per ulteriori informazioni, consulta la sezione “Le tue responsabilità nell’uso di IBM Cloud Kubernetes Service ”.
Prima di iniziare
Prima di iniziare, assicurati di disporre dei diritti di amministratore sulla piattaforma, in modo da poter creare le credenziali degli account e assegnare le risorse. Sono inoltre necessari i seguenti prerequisiti:
- Scarica e installa la CLI di IBM Cloud.
- Installa la CLI di Kubernetes(
kubectl). - Installa Helm 3.x.
- Scarica e installa
jq.
jq ti aiuta a suddividere e filtrare i dati JSON. In questo tutorial si utilizza jq per recuperare e utilizzare le variabili d’ambiente memorizzate.
- Un'istanza dedicata di Vault configurata nel tuo account IBM Cloud. Per ulteriori informazioni, consulta la sezione " Configurazione dell'istanza Vault Dedicated".
Configura l'ambiente
Per utilizzare Vault Dedicated e Kubernetes Service, è necessario creare un cluster nel proprio account IBM Cloud e configurare l'accesso alla propria istanza di Vault Dedicated.
Crea un cluster Kubernetes
Crea un cluster " Kubernetes " nel tuo account IBM Cloud.
-
Dalla riga di comando, accedi a IBM Cloud tramite la CLI di IBM Cloud.
ibmcloud loginSe l'accesso non riesce, esegui il comando
ibmcloud login --ssoe prova di nuovo. Il parametro--ssoè obbligatorio quando accedi con un ID federato. Se viene utilizzata questa opzione, vai al link elencato nell'output della CLI per generare una passcode monouso. -
Selezionare l'account, la regione e il gruppo di risorse in cui si desidera creare il cluster.
ibmcloud target -r REGION -g RESOURCE_GROUPSostituisci
REGIONcon la tua regione di destinazione (ad esempio,au-syd) eRESOURCE_GROUPcon il nome del tuo gruppo di risorse. -
Creare un cluster Kubernetes.
ibmcloud ks cluster create vpc-gen2 --zone ZONE --flavor FLAVOR --workers 1 --name eso-test-cluster --vpc-id VPC_ID --subnet-id SUBNET_IDSostituisci
ZONE,FLAVOR,VPC_IDeSUBNET_IDcon i tuoi valori. Il processo di configurazione del cluster di Kubernetes richiede dai 5 ai 15 minuti. -
Prima di passare alla fase successiva, verifica che il cluster sia stato configurato correttamente.
ibmcloud ks worker ls --cluster eso-test-clusterUna volta completata la configurazione del nodo di lavoro, lo stato passa a “Pronto ”.
-
Imposta il contesto per il tuo cluster Kubernetes nella CLI.
ibmcloud ks cluster config --cluster eso-test-cluster -
Verifica che i comandi
kubectlvengano eseguiti correttamente e che il contesto Kubernetes sia impostato sul tuo cluster.kubectl config current-context
Prepara la tua istanza Vault Dedicated
Configura la tua istanza Vault Dedicated per iniziare a lavorare con i segreti e imposta l'autenticazione per l'External Secrets Operator.
-
Esporta le variabili d'ambiente con i dettagli della tua istanza Vault Dedicated.
export VAULT_DEDICATED_ADDR="https://<your-vault_dedicated-instance-id>.vault.<region>.appdomain.cloud" export VAULT_DEDICATED_NAMESPACE="admin"Sostituisci
<your-vault_dedicated-instance-id>con l'ID della tua istanza di Vault Dedicated e<region>con la tua regione di Vault Dedicated (ad esempio,au-syd). -
Ottieni un token Vault dalla tua istanza Vault Dedicated.
È possibile generare un token dall'interfaccia utente di Vault Dedicated oppure utilizzando la CLI di Vault. Per lo sviluppo e il collaudo, è possibile utilizzare un token root. Per la produzione, creare un token con le politiche appropriate.
export VAULT_TOKEN="<your-vault-token>" -
Verifica il punto di montaggio del motore dei segreti KV in Vault Dedicated.
Le istanze dedicate di Vault hanno, per impostazione predefinita, il motore dei segreti KV v2 montato su
kv/. È possibile verificarlo nell'interfaccia utente di Vault Dedicated oppure visualizzando l'elenco dei mount.curl -k -X GET \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/sys/mounts | jq -
Crea un segreto di prova in Vault Dedicated.
curl -k -X POST \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ -d '{"data":{"username":"user123","password":"cloudy-rainy-coffee-book"}}' \ $VAULT_DEDICATED_ADDR/v1/kv/data/example_username_passwordSi noti che Vault Dedicated utilizza
kv/come percorso di montaggio per il motore dei segreti KV. -
Verifica che il segreto sia stato creato.
curl -k -X GET \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/kv/data/example_username_password | jq
Installa l'operatore External Secrets
Installa l'Operator External Secrets utilizzando Helm.
-
Aggiungi il repository "External Secrets" d Helm.
helm repo add external-secrets https://charts.external-secrets.io helm repo update -
Installa l'operatore External Secrets.
helm install external-secrets \ external-secrets/external-secrets \ --namespace external-secrets \ --create-namespace \ --set installCRDs=true -
Verificare l'installazione.
kubectl get pods -n external-secretsAttendere che tutti i pod siano nello stato “Running ”.
-
Verificare che le definizioni delle risorse personalizzate (CRD) siano installate.
kubectl get crd | grep external-secretsDovresti dare un'occhiata a CRD come
secretstores,clustersecretstoreseexternalsecrets.
Configurare SecretStore per Vault Dedicated
Crea una risorsa “ SecretStore ” che definisca le modalità di connessione di External Secrets Operator alla tua istanza di Vault Dedicated.
-
Crea un segreto " Kubernetes " utilizzando il tuo token Vault.
kubectl create secret generic vault-token \ --namespace external-secrets \ --from-literal=token="$VAULT_TOKEN" -
Crea un file denominato "
secretstore.yaml".touch secretstore.yaml -
Aggiungi la seguente configurazione al file.
apiVersion: external-secrets.io/v1beta1 kind: SecretStore metadata: name: vault-dedicated-secretstore namespace: default spec: provider: vault: server: "<VAULT_DEDICATED_ADDR>" path: "kv" version: "v2" namespace: "admin" auth: tokenSecretRef: name: "vault-token" key: "token" namespace: "external-secrets"Sostituisci
<VAULT_DEDICATED_ADDR>con l'indirizzo della tua istanza Vault Dedicated. Si noti che l'pathè impostato sukv, che è il punto di montaggio predefinito per il motore dei segreti KV in Vault Dedicated. -
Applicare la configurazione " SecretStore ".
kubectl apply -f secretstore.yaml -
Verificare che l’ SecretStore sia valido.
kubectl get secretstore vault-dedicated-secretstore -n default kubectl describe secretstore vault-dedicated-secretstore -n defaultLo stato dovrebbe essere "Valido " se la connessione a Vault Dedicated è andata a buon fine.
Crea un ExternalSecret
Crea una risorsa “ ExternalSecret ” che definisca quali segreti recuperare da Vault Dedicated.
-
Crea un file “
externalsecret.yaml”.touch externalsecret.yaml -
Aggiungere la seguente configurazione.
apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: vault-dedicated-app-secret namespace: default spec: refreshInterval: 1h secretStoreRef: name: vault-dedicated-secretstore kind: SecretStore target: name: my-k8s-secret creationPolicy: Owner data: - secretKey: username remoteRef: key: example_username_password property: username - secretKey: password remoteRef: key: example_username_password property: passwordIl parametro "
refreshInterval" determina la frequenza con cui External Secrets Operator interroga Vault Dedicated per verificare la presenza di aggiornamenti. Il valore predefinito e consigliato è 1 ora. -
Applicare la configurazione " ExternalSecret ".
kubectl apply -f externalsecret.yaml -
Verificare che l’operatore dei segreti esterni abbia recuperato il segreto da Vault Dedicated.
kubectl get secret my-k8s-secret -o json | jq '.data | map_values(@base64d)'Output di esempio:
{ "password": "cloudy-rainy-coffee-book", "username": "user123" }Operazione riuscita. Ora puoi recuperare i dati riservati dalla tua istanza Vault Dedicated e utilizzarli nel tuo cluster di Kubernetes.
Distribuire un'app sul cluster
Infine, è possibile distribuire nel proprio cluster un’applicazione che utilizza il segreto di Vault Dedicated. Durante l'esecuzione dell'applicazione, i dati riservati recuperati da Vault Dedicated vengono convertiti in un segreto " Kubernetes " che può essere utilizzato dal proprio cluster.
-
Crea una semplice distribuzione di prova che utilizzi il segreto.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: test-app namespace: default spec: containers: - name: app image: busybox command: ['sh', '-c', 'echo "Username: \$USERNAME"; echo "Password: \$PASSWORD"; sleep 3600'] env: - name: USERNAME valueFrom: secretKeyRef: name: my-k8s-secret key: username - name: PASSWORD valueFrom: secretKeyRef: name: my-k8s-secret key: password EOF -
Controlla i log del pod per verificare che il segreto sia stato inserito.
kubectl logs test-app -n defaultOutput previsto:
Username: user123 Password: cloudy-rainy-coffee-book
Cerchi altri esempi su come distribuire un'app? Consulta la guida “Distribuzione di applicazioni native di Kubernetes ” in cluster per ulteriori informazioni sulla distribuzione delle applicazioni.
(Facoltativo) Liberare le risorse
Se non hai più bisogno delle risorse che hai creato in questo tutorial, puoi seguire i passaggi riportati di seguito per rimuoverle dal tuo account.
-
Elimina il tuo cluster di prova " Kubernetes ".
ibmcloud ks cluster rm --cluster eso-test-cluster -
Eliminare i segreti di test nell'area dedicata di Vault.
curl -k -X DELETE \ -H "X-Vault-Token: $VAULT_TOKEN" \ -H "X-Vault-Namespace: $VAULT_DEDICATED_NAMESPACE" \ $VAULT_DEDICATED_ADDR/v1/kv/metadata/example_username_password
Note di interesse
Durante la creazione dei documenti YAML, tieni presente quanto segue:
-
Intervallo di polling: per impostazione predefinita, l'intervallo di polling è impostato su 1 ora (
refreshInterval: 1h) ed è il valore consigliato. È possibile modificare questo valore nel modello " ExternalSecret ". L'intervallo può essere espresso in unità dis,moh. -
Percorso di montaggio di Vault Dedicated: Vault Dedicated utilizza
kv/come percorso di montaggio predefinito per il motore dei segreti KV, anzichésecret/. Assicurati di specificare il percorso corretto nella configurazione di SecretStore. -
Spazi dei nomi di Vault Dedicated: Vault Dedicated utilizza gli spazi dei nomi di Vault Enterprise. Lo spazio dei nomi predefinito è
admin. Assicurati di specificare lo spazio dei nomi corretto nella configurazione di SecretStore. -
Metodi di autenticazione: per semplicità, questo tutorial utilizza l'autenticazione tramite token. Negli ambienti di produzione, si consiglia di utilizzare i metodi di autenticazione AppRole o Kubernetes per garantire una maggiore sicurezza.
-
TLS Note: Vault Dedicated richiede connessioni di tip TLS. Negli ambienti di produzione, assicurarsi che sia configurata una corretta convalida dei certificati, anziché utilizzare
skipTLSVerify.
Passi successivi
Ottimo lavoro! In questo tutorial hai imparato come configurare Vault Dedicated per inserire in modo sicuro i segreti delle applicazioni nel tuo cluster di Kubernetes utilizzando l'External Secrets Operator. Scopri altre risorse che ti aiuteranno a muovere i primi passi con Vault Dedicated.
- Scopri Vault Secrets Operator, l'operatore ufficiale di HashiCorp's per l'integrazione con Kubernetes.
- Consulta la documentazione relativa al provider External Secrets Operator Vault.
- Consulta la documentazione dedicata a Vault per scoprire funzionalità e configurazioni più avanzate.
- Scopri di più su HashiCorp Vault.