Utilizza i parametri Parameter Store in Amazon Elastic Kubernetes Service - 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à.

Utilizza i parametri Parameter Store in Amazon Elastic Kubernetes Service

Per mostrare i segreti di Secrets Manager e i parametri dei file montati nei pod Amazon EKS, puoi utilizzare AWS Secrets and Configuration Provider (ASCP) per il driver CSI Kubernetes Secrets Store. Parameter Store (è una capacità di.) Parameter Store AWS Systems Manager L'ASCP funziona con Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+. AWS Fargate (Fargate) i gruppi di nodi non sono supportati.

Con ASCP, è possibile recuperare i parametri memorizzati e gestiti in Parameter Store. Quindi puoi utilizzare i parametri nei tuoi carichi di lavoro in esecuzione su Amazon EKS. Se il tuo parametro contiene più coppie chiave/valore in formato JSON, puoi scegliere in via facoltativa se montarli in Amazon EKS. L'ASCP utilizza sintassi JMESPath per interrogare le coppie chiave/valore nel tuo parametro.

Puoi utilizzare ruoli e policy AWS Identity and Access Management (IAM) per limitare l'accesso ai tuoi parametri a specifici pod Amazon EKS in un cluster. ASCP recupera l'identità del pod e scambia l'identità per un ruolo IAM. ASCP assume il ruolo IAM del pod. Quindi può recuperare i parametri da Parameter Store autorizzati per quel ruolo.

Per informazioni su come integrare Secrets Manager con Amazon EKS, vedi Utilizzo dei segreti di Secrets Manager nel servizio Amazon Elastic Kubernetes Service.

Installazione di ASCP

L'ASCP è disponibile GitHub nel repository secrets-store-csi-driver-provider-aws. Il repository contiene anche file YAML di esempio per la creazione e il montaggio di un segreto. Prima installare il Secrets Store CSI Driver Kubernetes e quindi installare ASCP.

Per installare il driver CSI Kubernetes Secrets Store e ASCP
  1. Per installare il driver CSI Kubernetes Secrets Store, esegui questi comandi. Per istruzioni complete sull'installazione, consulta Installazione nel Kubernetes Secrets Store CSI Driver Book. Per informazioni sull'installazione di Helm, consulta Utilizzo di Helm con Amazon EKS.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  2. Per installare ASCP, usa il file YAML nella directory di distribuzione del repository. GitHub Per informazioni sull'installazione di kubectl, consulta Installazione di kubectl.

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml

Fase 1: Configurazione del controllo degli accessi

Per concedere al tuo pod Amazon EKS l'accesso ai parametri in Parameter Store, devi innanzitutto creare una policy che limita l'accesso ai parametri a cui il pod deve accedere. Quindi si crea un Ruolo IAM per l'account del servizio e collegare la policy ad esso. Per ulteriori informazioni su come limitare l'accesso ai parametri di Systems Manager utilizzando le policy IAM, consulta Limitazione dell'accesso ai parametri di Systems Manager mediante policy IAM.

Nota

Quando utilizzi i parametri Parameter Store, l'autorizzazione ssm:GetParameters è necessaria nella policy.

L'ASCP recupera l'identità del pod e la scambia con il ruolo IAM. ASCP assume il ruolo IAM del pod, che gli dà accesso ai parametri autorizzati. Altri container non possono accedere ai parametri a meno che non vengano associati anche al ruolo IAM.

Fase 2: montare i parametri in Amazon EKS

Per mostrare parametri in Amazon EKS come se fossero file sul filesystem, si crea un file YAML SecretProviderClass che contiene informazioni sui tuoi parametri e su come montarli nel pod Amazon EKS.

La SecretProviderClass deve trovarsi nello stesso spazio dei nomi del pod Amazon EKS a cui fa riferimento.

SecretProviderClass

Il SecretProviderClass YAML presenta il formato seguente.

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: <NAME> spec: provider: aws parameters:
parameters

Contiene i dettagli della richiesta di montaggio.

objects

Una stringa contenente una dichiarazione YAML dei parametri da montare. Si consiglia di utilizzare una stringa multiriga YAML o un carattere pipe (|).

objectName

Il nome semplice del parametro. Questo diventa il nome file del parametro nel pod Amazon EKS, a meno che tu non specifichi objectAlias. Per Parameter Store questo deve essere il Name del parametro e non può essere un nome della risorsa Amazon (ARN) completo.

jmesPath

(Facoltativo) Una mappa delle chiavi nel parametro codificato JSON per i file da montare in Amazon EKS. L'esempio seguente mostra l'aspetto di un parametro codificato JSON.

{ "username" : "myusername", "password" : "mypassword" }

Le chiavi sono username e password. Il valore associato a username è myusername e il valore associato a password è mypassword.

path

La chiave nel parametro.

objectAlias

Il nome del file da montare nel pod Amazon EKS.

objectType

Per Parameter Store, questo campo è obbligatorio. Utilizza ssmparameter.

objectAlias

(Facoltativo) Il nome file del parametro nel pod Amazon EKS. Se non indichi questo campo, objectName viene visualizzato come nome del file.

objectVersion

(Facoltativo) Il numero di versione del parametro. Si consiglia di non utilizzare questo campo perché è necessario aggiornarlo ogni volta che si aggiorna il parametro. Per impostazione predefinita viene utilizzata la versione più recente. Per Parameter Store, è possibile utilizzare objectVersion o objectVersionLabel ma non entrambi.

objectVersionLabel

(Facoltativo) L'etichetta del parametro per la versione. Il valore di default è la versione più recente. Per Parameter Store, è possibile utilizzare objectVersion o objectVersionLabel ma non entrambi.

Regione

(Facoltativo) Il parametro. Regione AWS Se non utilizzi questo campo, l'ASCP cerca la regione dall'annotazione sul nodo. Questa ricerca aggiunge un sovraccarico alle richieste di montaggio, quindi consigliamo di fornire la regione per i cluster che utilizzano un numero elevato di pod.

pathTranslation

(Facoltativo) Un singolo carattere di sostituzione da utilizzare se il nome del file (objectName o objectAlias) contiene il carattere separatore di percorso, come barra (/) su Linux. Se il nome di un parametro contiene il separatore di percorso, ASCP non è in grado di creare un file montato con tale nome. Invece, è possibile sostituire il carattere separatore di percorso con un carattere diverso inserendolo in questo campo. Se non si utilizza questo campo, il valore predefinito è il carattere di sottolineatura (_), quindi ad esempio, My/Path/Parameter monta come My_Path_Parameter.

Per impedire la sostituzione dei caratteri, immettere la stringa False.

Esempio

La configurazione di esempio seguente ne è un'SecretProviderClass con una risorsa di parametro Parameter Store.

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "MyParameter" objectType: "ssmparameter"

Fase 3: aggiornare l'implementazione YAML

Aggiornare l'implementazione YAML per utilizzare il driver secrets-store.csi.k8s.io e fare riferimento al SecretProviderClass creata nella fase precedente. In questo modo il cluster utilizza il driver CSI Secrets Store.

Di seguito è riportato un esempio di implementazione YAML utilizzando unSecretProviderClass denominato aws-secrets.

volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "aws-secrets"

Tutorial: creare e montare un parametro in un pod Amazon EKS

In questo tutorial si crea un parametro di esempio in Parameter Store, quindi si monta il parametro in un pod Amazon EKS e lo si distribuisce.

Prima di iniziare, installa ASCP. Per ulteriori informazioni, consulta Installazione di ASCP.

Come creare e montare un segreto
  1. Imposta il nome Regione AWS e il nome del cluster come variabili di shell in modo da poterle utilizzare nei bash comandi. Per la regione, inserisci Regione AWS dove viene eseguito il tuo cluster Amazon EKS. Per clustername inserisci un nome per il tuo cluster.

    REGION=region CLUSTERNAME=clustername
  2. Creazione di un parametro di prova.

    aws ssm put-parameter --name "MyParameter" --value "EKS parameter" --type String --region "$Region"
  3. Crea una policy di risorse per il pod che ne limita l'accesso al parametro creato nella fase precedente. Per<PARAMETERARN>, utilizza l'ARN del parametro. Salva l'ARN della policy in una variabile di shell. Per recuperare il parametro ARN, utilizza get-parameter.

    POLICY_ARN=$(aws --region "$REGION" --query Policy.Arn --output text iam create-policy --policy-name nginx-parameter-deployment-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["ssm:GetParameter", "ssm:GetParameters"], "Resource": ["parameter-arn"] } ] }')
  4. Crea un provider OpenID Connect (OIDC) IAM per il cluster se non ne è già presente uno. Per ulteriori informazioni, consulta Creare un provider OIDC IAM per il cluster.

    eksctl utils associate-iam-oidc-provider --region="$REGION" --cluster="$CLUSTERNAME" --approve # Only run this once
  5. Creare l'account di servizio utilizzato dal pod e associare la policy delle risorse creata nel passaggio 3 a tale account di servizio. Per questo tutorial, per il nome dell'account di servizio che utilizzi nginx-deployment-sa. Per ulteriori informazioni, consulta Creare di un ruolo IAM per l'account di servizio.

    eksctl create iamserviceaccount --name nginx-deployment-sa --region="$REGION" --cluster "$CLUSTERNAME" --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts
  6. Creazione dell'SecretProviderClass per specificare quale parametro montare nel pod. Il comando seguente utilizza la posizione del file di un file SecretProviderClass denominato ExampleSecretProviderClass.yaml. Per informazioni su come creare il tuo SecretProviderClass, consulta SecretProviderClass.

    kubectl apply -f ./ExampleSecretProviderClass.yaml
  7. Distribuzione del pod Il comando seguente utilizza un file di implementazione denominato ExampleDeployment.yaml. Per informazioni su come creare il tuo SecretProviderClass, consulta Fase 3: aggiornare l'implementazione YAML.

    kubectl apply -f ./ExampleDeployment.yaml
  8. Per assicurarsi che il parametro sia stato montato correttamente, utilizza il seguente comando e verifica che venga visualizzato il valore del parametro.

    kubectl exec -it $(kubectl get pods | awk '/nginx-deployment/{print $1}' | head -1) cat /mnt/secrets-store/MyParameter; echo

    Viene visualizzato il valore del parametro.

    "EKS parameter"

Risoluzione dei problemi

È possibile visualizzare la maggior parte degli errori descrivendo l'implementazione del pod.

Per visualizzare i messaggi di errore per il container
  1. È possibile ottenere un elenco di nomi di pod con il comando seguente. Se non si sta utilizzando lo spazio dei nomi predefinito, utilizzare -n <NAMESPACE>.

    kubectl get pods
  2. Per descrivere il pod, nel comando seguente, per pod-id utilizzare l'ID pod dai pod trovati nel passaggio precedente. Se non si sta utilizzando lo spazio dei nomi predefinito, utilizzare -n <NAMESPACE>.

    kubectl describe pod/pod-id
Come visualizzare gli errori per l'ASCP
  • Per trovare maggiori informazioni nei log del provider, nel comando seguente, per pod-id usa l'ID del csi-secrets-store-provider pod -aws.

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/pod-id