Verwenden von Parameter Store-Parametern in Amazon Elastic Kubernetes Service - AWS Systems Manager

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von Parameter Store-Parametern in Amazon Elastic Kubernetes Service

Um Geheimnisse aus Secrets Manager und Parameter aus Parameter Store Dateien anzuzeigen, die in Amazon EKS-Pods gemountet sind, können Sie den AWS Secrets and Configuration Provider (ASCP) für den Kubernetes Secrets Store CSI-Treiber verwenden. (Parameter Storeist eine Fähigkeit von.) AWS Systems Manager Das ASCP funktioniert mit Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+. AWS Fargate (Fargate) Knotengruppen werden nicht unterstützt.

Mit dem ASCP können Sie Parameter abrufen, die in Parameter Store gespeichert und verwaltete werden. Dann können Sie die Parameter in Ihren Workloads verwenden, die auf Amazon EKS ausgeführt werden. Wenn Ihr Paramter mehrere Schlüssel/Wert-Paare im JSON-Format enthält, können Sie optional auswählen, welche in Amazon EKS bereitgestellt werden sollen. Der ASCP verwendet JMESPath-Syntax, um die Schlüssel/Wert-Paare in Ihrem Parameter abzufragen.

Sie können AWS Identity and Access Management (IAM) -Rollen und -Richtlinien verwenden, um den Zugriff auf Ihre Parameter auf bestimmte Amazon EKS-Pods in einem Cluster zu beschränken. Der ASCP ruft die Pod-Identität ab und tauscht die Identität gegen eine IAM-Rolle. ASCP übernimmt die IAM-Rolle des Pods. Dann kann es Parameter von Parameter Store abrufen, die für diese Rolle autorisiert sind.

Informationen zur Integration von Secrets Manager in Amazon EKS finden Sie unter Secrets Manager-Secrets in Amazon Elastic Kubernetes Service verwenden.

Installieren des ASCP

Das ASCP ist GitHub im secrets-store-csi-driver-provider-aws-Repository verfügbar. Das Repository enthält auch YAML-Beispieldateien zum Erstellen und Mounten eines Secrets. Sie installieren zuerst den Kubernetes-Secrets-Store-CSI-Treiber und dann den ASCP.

So installieren Sie den Kubernetes-Secrets-Store-CSI-Treiber und den ASCP
  1. Führen Sie die folgenden Befehle aus, um den Kubernetes-Secrets-Store-CSI-Treiber zu installieren. Eine vollständige Installationsanweisung finden Sie unter Installation im Kubernetes-Secrets-Store-CSI-Treiberhandbuch. Weitere Informationen zur Installation von Helm finden Sie unter Verwenden von Helm mit 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. Verwenden Sie zur Installation des ASCP die YAML-Datei im Bereitstellungsverzeichnis des Repositorys. GitHub Informationen zur Installation von kubectl finden Sie im Abschnitt Installieren der kubectl.

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

Schritt 1: Einrichten der Zugriffssteuerung

Um Ihrem Amazon-EKS-Pod Zugriff auf Parameter in Parameter Store zu gewähren, erstellen Sie zunächst eine Richtlinie, die den Zugriff auf die Parameter einschränkt, auf die der Pod zugreifen muss. Erstellen Sie dann eine IAM role for service account (IAM-Rolle für Dienstkonto) und fügen Sie die Richtlinie an diese an. Weitere Informationen zum Einschränken des Zugriffs auf Systems Manager-Parameter mithilfe von IAM-Richtlinien finden Sie unter Einschränken des Zugriffs auf Systems Manager-Parameter mithilfe von IAM-Richtlinien.

Anmerkung

Bei Verwendung von Parameter Store-Parametern, wird die Berechtigung ssm:GetParameters in der Richtlinie benötigt.

Der ASCP ruft die Pod-Identität ab und tauscht sie gegen die IAM-Rolle. ASCP übernimmt die IAM-Rolle des Pods, wodurch er Zugriff auf die von Ihnen autorisierten Parameter erhält. Andere Container können nur auf die Parameter zugreifen, wenn Sie diese auch der IAM-Rolle zuordnen.

Schritt 2: Mounten von Parametern in Amazon EKS

Um Parameter in Amazon EKS wie Dateien im Dateisystem anzuzeigen, erstellen Sie eine SecretProviderClass-YAML-Datei mit Informationen zu Ihren Parametern und dem Mounten der Parameter im Amazon-EKS-Pod.

SecretProviderClass muss sich im gleichen Namespace wie der Amazon-EKS-Pod befinden, auf den verwiesen wird.

SecretProviderClass

Die SecretProviderClass-YAML-Datei hat folgendes Format:

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

Enthält die Details der Mounting-Anfrage.

objects

Eine Zeichenfolge, die eine YAML-Deklaration der bereitzustellenden Parameter enthält. Wir empfehlen, eine mehrzeilige YAML-Zeichenfolge oder ein Pipe-Zeichen (|) zu verwenden.

objectName (Objektname)

Der Anzeigename des Parameters. Dies wird der Dateiname des Parameters im Amazon-EKS-Pod, es sei denn, Sie geben objectAlias an. Dabei muss Parameter Store der Name des Parameters sein und kann kein vollständiger Amazon-Ressourcenname (ARN) sein.

jmesPath

(Optional) Eine Zuordnung der Schlüssel im JSON-kodierten Parameter zu den Dateien, die in Amazon EKS bereitgestellt werden sollen. Das folgende Beispiel zeigt, wie ein JSON-kodierter Parameter aussieht.

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

Die Schlüssel sind username und password. Der Wert, der mit username verbunden ist, ist myusername, und der Wert, der mit password verbunden ist, ist mypassword.

Pfad

Der Schlüssel im Parameter.

objectAlias

Der Dateiname, der im Amazon-EKS-Pod bereitgestellt werden soll.

objectType

Dies ist ein Pflichtfeld für Parameter Store. Verwenden Sie ssmparameter.

objectAlias

(Optional) Der Dateiname des Parameters im Amazon-EKS-Pod. Wenn Sie dieses Feld nicht angeben, wird objectName als Dateiname angezeigt.

objectVersion (Objektversion)

Optional: Die Versionsnummer des Parameters. Es wird empfohlen, dieses Feld nicht zu verwenden, da Sie es jedes Mal aktualisieren müssen, wenn Sie den Parameter aktualisieren. Standardmäßig wird die neueste Version verwendet. Für Parameter Store-Parameter können Sie objectVersionoder objectVersionLabel verwenden, aber nicht beides.

objectVersionLabel

(Optional) Die Parameterbeschriftung für die Version. Die Standardversion ist die neueste Version. Für Parameter Store-Parameter können Sie objectVersionoder objectVersionLabel verwenden, aber nicht beides.

Region

(Optional) Der Wert AWS-Region des Parameters. Wenn Sie dieses Feld nicht verwenden, sucht der ASCP die Region aus der Anmerkung auf dem Knoten. Diese Suche steigert den Overhead von Mounting-Anfragen. Daher wird empfohlen, die Region für Cluster mit einer großen Anzahl von Pods anzugeben.

pathTranslation (Pfadangabe)

(Optional) Ein einzelnes Ersetzungszeichen, das verwendet werden soll, wenn der Dateiname (objectName oderobjectAlias) das Pfadtrennzeichen enthält, z. B. Schrägstrich (/) unter Linux. Wenn ein Parametername das Pfadtrennzeichen enthält, kann ASCP keine eingehängte Datei mit diesem Namen erstellen. Stattdessen können Sie das Pfadtrennzeichen durch ein anderes Zeichen ersetzen, das Sie in dieses Feld eingeben. Wenn Sie dieses Feld nicht verwenden, ist der Standardwert ein Unterstrich (_), d. h. My/Path/Parameter wird als My_Path_Parameter bereitgestellt.

Um die Zeichenersetzung zu verhindern, geben Sie die Zeichenfolge False ein.

Beispiel

Die folgende Beispielkonfiguration zeigt eine SecretProviderClass mit einer Parameter Store-Parameterressource.

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

Schritt 3: Aktualisieren der Bereitstellungs-YAML

Aktualisieren Sie Ihre Bereitstellungs-YAML, damit sie die secrets-store.csi.k8s.io-Treiber verwendet und auf dieSecretProviderClass-Ressource verweist, die im vorherigen Schritt erstellt wurde. Dadurch wird sichergestellt, dass Ihr Cluster den Secrets-Store-CSI-Treiber verwendet.

Im Folgenden finden Sie eine Beispiel-Bereitstellungs-YAML mit einer SecretProviderClass mit dem Namen aws-secrets.

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

Tutorial: Erstellen Sie einen Parameter und mounten Sie ihn in einem Amazon-EKS-Pod

In diesem Tutorial erstellen Sie einen Beispiel-Parameter in Parameter Store mounten den Parameter dann in einem Amazon-EKS-Pod und stellen ihn bereit.

Bevor Sie beginnen, installieren Sie den ASCP. Weitere Informationen finden Sie unter Installieren des ASCP.

Ein Secret erstellen und mounten
  1. Legen Sie den AWS-Region und den Namen Ihres Clusters als Shell-Variablen fest, damit Sie sie in bash Befehlen verwenden können. Geben Sie für Region den Ort ein, AWS-Region in dem Ihr Amazon EKS-Cluster ausgeführt wird. Geben Sie unter Cluster-Name einen Namen für Ihren Cluster ein.

    REGION=region CLUSTERNAME=clustername
  2. Erstellen Sie einen Test-Parameter.

    aws ssm put-parameter --name "MyParameter" --value "EKS parameter" --type String --region "$REGION"
  3. Erstellen Sie eine Ressourcenrichtlinie für den Pod, die den Zugriff auf den Parameter beschränkt, den Sie im vorherigen Schritt erstellt haben. Verwenden Sie für parameter-arn den ARN des Parameters. Speichern Sie den Richtlinien-ARN in einer Shell-Variablen. Um den Parameter-ARN abzurufen, verwenden Sie 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. Erstellen Sie einen IAM OpenID Connect (OIDC)-Anbieter für den Cluster, wenn Sie noch keinen haben. Weitere Informationen finden Sie unter Erstellen eines IAM-OIDC-Anbieters für Ihren Cluster.

    eksctl utils associate-iam-oidc-provider --region="$REGION" --cluster="$CLUSTERNAME" --approve # Only run this once
  5. Erstellen Sie das Dienstkonto, das der Pod verwendet, und ordnen Sie die Ressourcenrichtlinie, die Sie in Schritt 3 erstellt haben, diesem Dienstkonto zu. Für dieses Tutorial verwenden Sie für den Namen des Dienstkontos. nginx-deployment-sa Weitere Informationen finden Sie unter Erstellen einer IAM-Rolle für ein Servicekonto.

    eksctl create iamserviceaccount --name nginx-deployment-sa --region="$REGION" --cluster "$CLUSTERNAME" --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts
  6. Erstellen Sie SecretProviderClass, um anzugeben, welcher Parameter im Pod gemounted werden soll. Der folgende Befehl verwendet den Dateispeicherort einer SecretProviderClass-Datei mit dem Namen ExampleSecretProviderClass.yaml. Informationen zum Erstellen Ihrer eigenen SecretProviderClass finden Sie unter SecretProviderClass.

    kubectl apply -f ./ExampleSecretProviderClass.yaml
  7. Ihr Pod bereitstellen Der folgende Befehl verwendet eine Bereitstellungsdatei mit dem Namen ExampleDeployment.yaml. Informationen zum Erstellen Ihrer eigenen SecretProviderClass finden Sie unter Schritt 3: Aktualisieren der Bereitstellungs-YAML.

    kubectl apply -f ./ExampleDeployment.yaml
  8. Um zu überprüfen, ob der Parameter ordnungsgemäß gemounted wurde, verwenden Sie den folgenden Befehl und bestätigen Sie, dass Ihr Parameterwert angezeigt wird.

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

    Der Parameterwert wird angezeigt.

    "EKS parameter"

Fehlerbehebung

Sie können die meisten Fehler anzeigen, indem Sie die Pod-Bereitstellung beschreiben.

Fehlermeldungen für Ihren Container anzeigen
  1. Erstellen Sie mit dem folgenden Befehl eine Liste der Pod-Namen. Wenn Sie nicht den Standard-Namespace verwenden, verwenden Sie -n <NAMESPACE>.

    kubectl get pods
  2. Um den Pod zu beschreiben, geben Sie im folgenden Befehl für pod-id die Pod-ID aus den Pods an, die Sie im vorherigen Schritt gefunden haben. Wenn Sie nicht den Standard-Namespace verwenden, verwenden Sie -n <NAMESPACE>.

    kubectl describe pod/pod-id
Fehler für den ASCP anzeigen
  • Um weitere Informationen in den Anbieterprotokollen zu finden, verwenden Sie im folgenden Befehl für pod-id die ID des csi-secrets-store-provider-aws-Pods.

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