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
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
Per installare il driver CSI Kubernetes Secrets Store e ASCP
-
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
-
Per installare ASCP, usa il file YAML nella directory di distribuzione del repository. GitHub Per informazioni sull'installazione di
kubectl
, consulta Installazione dikubectl
.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 ilName
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
epassword
. Il valore associato ausername
èmyusername
e il valore associato apassword
è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
oobjectVersionLabel
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
oobjectVersionLabel
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
oobjectAlias
) 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 comeMy_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
-
Imposta il nome Regione AWS e il nome del cluster come variabili di shell in modo da poterle utilizzare nei
bash
comandi. Per laregione
, inserisci Regione AWS dove viene eseguito il tuo cluster Amazon EKS. Perclustername
inserisci un nome per il tuo cluster.REGION=
region
CLUSTERNAME=clustername
-
Creazione di un parametro di prova.
aws ssm put-parameter --name "MyParameter" --value "EKS parameter" --type String --region "$Region"
-
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, utilizzaget-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
"] } ] }') -
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
-
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
-
Creazione dell'
SecretProviderClass
per specificare quale parametro montare nel pod. Il comando seguente utilizza la posizione del file di un fileSecretProviderClass
denominatoExampleSecretProviderClass.yaml
. Per informazioni su come creare il tuoSecretProviderClass
, consulta SecretProviderClass.kubectl apply -f ./ExampleSecretProviderClass.yaml
-
Distribuzione del pod Il comando seguente utilizza un file di implementazione denominato
ExampleDeployment.yaml
. Per informazioni su come creare il tuoSecretProviderClass
, consulta Fase 3: aggiornare l'implementazione YAML.kubectl apply -f ./ExampleDeployment.yaml
-
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
-
È 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
-
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