Usa AWS Secrets Manager i segreti in Amazon Elastic Kubernetes Service - AWS Secrets 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à.

Usa AWS Secrets Manager i segreti in Amazon Elastic Kubernetes Service

Per mostrare i segreti di Secrets Manager come file montati nei pod Amazon EKS, puoi utilizzare AWS Secrets and Configuration Provider (ASCP) per il driver CSI Kubernetes Secrets Store. L'ASCP funziona con Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+ che esegue un gruppo di nodi Amazon EC2. AWS Fargate i gruppi di nodi non sono supportati. Con ASCP, puoi archiviare e gestire i segreti in Secrets Manager e recuperarli tramite i carichi di lavoro in esecuzione su Amazon EKS. Se il tuo segreto contiene più coppie chiave/valore in formato JSON, puoi scegliere quali montare in Amazon EKS. L'ASCP utilizza Sintassi JMESPath per interrogare le coppie chiave/valore nel tuo segreto. L'ASCP funziona anche con i parametri dell'archivio parametri.

Se utilizzi un cluster Amazon EKS privato, assicurati che il VPC in cui si trova il cluster disponga di un endpoint Secrets Manager. Il driver CSI di Secrets Store utilizza l'endpoint per effettuare chiamate a Secrets Manager. Per informazioni su come creare un endpoint in un VPC, consulta la sezione Endpoint VPC.

Se si utilizza la rotazione automatica di Secrets Manager per i propri segreti, è anche possibile utilizzare la funzione di riconciliazione rotazione Secrets Store CSI Driver per assicurarsi di recuperare il segreto più recente da Secrets Manager. Per ulteriori informazioni, consulta Rotazione automatica dei contenuti montati e sincronizzati Kubernetes Secrets.

Fase 1: Configurazione del controllo degli accessi

L'ASCP recupera l'identità del pod Amazon EKS e la scambia con un ruolo IAM. Le autorizzazioni vengono impostate in una policy IAM per quel ruolo IAM. Quando l'ASCP assume il ruolo IAM, ottiene l'accesso ai segreti che hai autorizzato. Altri container non possono accedere ai segreti a meno che non vengano associati anche al ruolo IAM.

Se le chiamate dall'ASCP per cercare la regione e il ruolo IAM associati al pod vengono limitate da Kubernetes, puoi modificare le quote di limitazione utilizzando, come mostrato nel passaggio 2. helm install

Per concedere al tuo pod Amazon EKS l'accesso ai segreti in Secrets Manager
  1. Crea una politica di autorizzazioni che conceda secretsmanager:GetSecretValue e secretsmanager:DescribeSecret autorizzi i segreti a cui il pod deve accedere. Per un esempio di policy, consulta Esempio: autorizzazione a leggere e descrivere singoli segreti.

  2. Crea un provider OpenID Connect (OIDC) IAM per il cluster se non ne è già presente uno. Per ulteriori informazioni, consulta Creare un provider IAM OIDC per il tuo cluster nella Amazon EKS User Guide.

  3. Crea un ruolo IAM per l'account di servizio e allega la policy ad esso. Per ulteriori informazioni, consulta Creare un ruolo IAM per un account di servizio nella Amazon EKS User Guide.

  4. Se utilizzi un cluster Amazon EKS privato, assicurati che il VPC in cui si trova il cluster abbia un AWS STS endpoint. Per informazioni sulla creazione di un endpoint, consulta Interface VPC endpoints nella AWS Identity and Access Management Guida per l'utente.

Fase 2: Installare e configurare l'ASCP

L'ASCP è disponibile GitHub nel repository secrets-store-csi-provider-aws. Il repository contiene anche file YAML di esempio per la creazione e il montaggio di un segreto.

Durante l'installazione, è possibile configurare l'ASCP per utilizzare un endpoint FIPS. Per un elenco di endpoint, consulta AWS Secrets Manager endpoint.

Per installare l'ASCP utilizzando Helm
  1. Per assicurarti che il repository punti ai grafici più recenti, usa helm repo update.

  2. Aggiungi la tabella dei driver CSI di Secrets Store.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  3. Installare il grafico. Per configurare la limitazione, aggiungi il seguente flag: --set-json 'k8sThrottlingParams={"qps": "<number of queries per second>", "burst": "<number of queries per second>"}'

    helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  4. Aggiungi il grafico ASCP.

    helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
  5. Installare il grafico. Per utilizzare un endpoint FIPS, aggiungete il seguente flag: --set useFipsEndpoint=true

    helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
Da installare utilizzando lo YAML nel repository
  • Usa i seguenti comandi.

    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 kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml

Fase 3: Identifica quali segreti montare

Per determinare quali segreti l'ASCP monta in Amazon EKS come file sul file system, è necessario creare un file SecretProviderClass YAML. SecretProviderClassElenca i segreti da montare e il nome del file con cui montarli. La SecretProviderClass deve trovarsi nello stesso spazio dei nomi del pod Amazon EKS a cui fa riferimento.

Gli esempi seguenti mostrano come usare SecretProviderClass per descrivere i segreti che desideri montare e come denominare i file montati nel pod Amazon EKS.

Esempio: montaggio di segreti per nome o ARN

Il seguente esempio mostra un SecretProviderClass che monta tre file in Amazon EKS:

  1. Un segreto specificato dall'ARN completo.

  2. Un segreto specificato dal nome.

  3. Una versione specifica di un segreto.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret2-d4e5f6" - objectName: "MySecret3" objectType: "secretsmanager" - objectName: "MySecret4" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT"

Esempio: montaggio di coppie chiave/valore da un segreto

Il seguente esempio mostra un SecretProviderClass che monta tre file in Amazon EKS:

  1. Un segreto specificato dall'ARN completo.

  2. La username coppia chiave/valore dallo stesso segreto.

  3. La password coppia chiave/valore dallo stesso segreto.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword

Esempio: definizione di una Regione di failover per un segreto multiregione

Per garantire la disponibilità durante le interruzioni della connettività o per le configurazioni del ripristino di emergenza, ASCP supporta una funzionalità di failover automatizzato per recuperare i segreti da una Regione secondaria.

L'esempio seguente mostra una SecretProviderClass che recupera un segreto replicato in più Regioni. In questo esempio, l'ASCP tenta di recuperare il segreto sia da us-east-1 che da us-east-2. Se una delle Regioni restituisce un errore 4xx, ad esempio per un problema di autenticazione, l'ASCP non installa nessuno dei due segreti. Se il segreto viene recuperato correttamente da us-east-1, l'ASCP monta tale valore del segreto. Se il segreto non viene recuperato correttamente da us-east-1, ma viene correttamente recuperato da us-east-2, l'ASCP monta tale valore del segreto.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"

Esempio: scelta di un segreto di failover da montare

L'esempio seguente mostra una SecretProviderClass che specifica quale segreto montare in caso di failover. Il segreto di failover non è una replica. In questo esempio, l'ASCP tenta di recuperare i due segreti specificati da objectName. Se uno dei due restituisce un errore 4xx, ad esempio per un problema di autenticazione, l'ASCP non installa nessuno dei due segreti. Se il segreto viene recuperato correttamente da us-east-1, l'ASCP monta tale valore del segreto. Se il segreto non viene recuperato correttamente da us-east-1, ma viene correttamente recuperato da us-east-2, l'ASCP monta tale valore del segreto. Il file montato in Amazon EKS è denominato MyMountedSecret.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "arn:aws:secretsmanager:us-east-1:111122223333:secret:MySecret-a1b2c3" objectAlias: "MyMountedSecret" failoverObject: - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MyFailoverSecret-d4e5f6"

Passaggio 4: installa i segreti come file nel pod Amazon EKS

Per montare segreti in Amazon EKS
  1. Applica il SecretProviderClass al pod con il comandokubectl apply -f ExampleSecretProviderClass.yaml.

  2. Distribuisci il tuo pod con il comandokubectl apply -f ExampleDeployment.yaml.

  3. L'ASCP monta i file.

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 <PODID> 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/<PODID>
Come visualizzare gli errori per l'ASCP
  • Per trovare maggiori informazioni nei log del provider, nel comando seguente, usa l'ID del csi-secrets-store-provider pod -aws. <PODID>

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/<PODID>