Utiliser Parameter Store paramètres dans Amazon Elastic Kubernetes Service - AWS Systems Manager

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser Parameter Store paramètres dans Amazon Elastic Kubernetes Service

Pour afficher les secrets depuis Secrets Manager et les paramètres depuis Parameter Store en tant que fichiers montés dans EKS des pods Amazon, vous pouvez utiliser le fournisseur de AWS secrets et de configuration (ASCP) pour le pilote Kubernetes Secrets Store. CSI (Parameter Store est une capacité de AWS Systems Manager.) Il ASCP fonctionne avec Amazon Elastic Kubernetes Service (Amazon) 1.17+. EKS AWS Fargate les groupes de nœuds ne sont pas pris en charge.

Avec leASCP, vous pouvez récupérer les paramètres qui sont stockés et gérés dans Parameter Store. Vous pouvez ensuite utiliser les paramètres dans vos charges de travail exécutées sur AmazonEKS. Si votre paramètre contient plusieurs paires clé-valeur au JSON format, vous pouvez éventuellement choisir de les monter sur AmazonEKS. Ils ASCP peuvent utiliser JMESPath la syntaxe pour interroger les paires clé-valeur de votre paramètre.

Vous pouvez utiliser AWS Identity and Access Management (IAM) les rôles et les politiques pour limiter l'accès à vos paramètres à des EKS pods Amazon spécifiques d'un cluster. Il ASCP récupère l'identité du pod et échange l'identité contre un IAM rôle. ASCPassume le IAM rôle du pod. Ensuite, il peut récupérer les paramètres de Parameter Store qui sont autorisés pour ce rôle.

Pour savoir comment intégrer Secrets Manager à AmazonEKS, consultez la section Utilisation des secrets de Secrets Manager dans Amazon Elastic Kubernetes Service.

Installation du ASCP

Le ASCP est disponible sur GitHub dans le référentiel secrets-store-csi-driver-provider-aws. Le référentiel contient également des YAML fichiers d'exemple permettant de créer et de monter un secret. Vous installez d'abord le CSI pilote Kubernetes Secrets Store, puis vous installez le. ASCP

Pour installer le pilote Kubernetes Secrets Store CSI et le ASCP
  1. Pour installer le pilote Kubernetes Secrets StoreCSI, exécutez les commandes suivantes. Pour obtenir des instructions d'installation complètes, consultez la section Installation dans le manuel des pilotes de Kubernetes Secrets StoreCSI. Pour plus d'informations sur l'installation de Helm, consultez la section Utilisation de Helm avec 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. Pour installer leASCP, utilisez le YAML fichier dans le GitHub répertoire de déploiement du référentiel. Pour plus d'informations sur l'installation de kubectl, consultez Installation de kubectl.

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

Étape 1 : configurer le contrôle d'accès

Pour autoriser votre EKS module Amazon à accéder aux paramètres dans Parameter Store, vous devez d'abord créer une politique qui limite l'accès aux paramètres auxquels le pod a besoin pour accéder. Vous créez ensuite un IAMrôle pour le compte de service et vous y associez la politique. Pour plus d'informations sur la restriction de l'accès aux paramètres de Systems Manager à l'aide de IAM politiques, consultezRestreindre l'accès à Parameter Store paramètres à l'aide IAM de politiques.

Note

Lors de l'utilisation Parameter Store paramètres, l'autorisation ssm:GetParameters est requise dans la politique.

Il ASCP récupère l'identité du pod et l'échange contre le IAM rôle. ASCPassume le IAM rôle du pod, qui lui donne accès aux paramètres que vous avez autorisés. Les autres conteneurs ne peuvent accéder aux paramètres que si vous les associez également au IAM rôle.

Étape 2 : paramètres de montage dans Amazon EKS

Pour afficher les paramètres dans Amazon EKS comme s'il s'agissait de fichiers du système de fichiers, vous créez un SecretProviderClass YAML fichier contenant des informations sur vos paramètres et sur la manière de les monter dans le EKS pod Amazon.

SecretProviderClassIl doit se trouver dans le même espace de noms que le EKS pod Amazon auquel il fait référence.

SecretProviderClass

Le format SecretProviderClass YAML est le suivant.

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

Contient les détails de la demande de montage.

objects

Chaîne contenant une YAML déclaration des paramètres à monter. Nous vous recommandons d'utiliser une chaîne YAML multiligne ou un caractère en forme de tube (|).

objectName

Nom convivial du paramètre. Cela devient le nom de fichier du paramètre dans le EKS pod Amazon, sauf si vous le spécifiezobjectAlias. Dans Parameter Store il doit s'agir Name du paramètre, et il ne peut pas s'agir d'un nom de ressource Amazon complet (ARN).

jmesPath

(Facultatif) Une correspondance entre les clés du paramètre JSON codé et les fichiers à monter sur AmazonEKS. L'exemple suivant montre à quoi ressemble un paramètre JSON codé.

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

Les clés sont username et password. La valeur associée à username est myusername et la valeur associée à password est mypassword.

path

La clé dans le paramètre.

objectAlias

Le nom du fichier à monter dans le EKS pod Amazon.

objectType

Dans Parameter Store, ce champ est obligatoire. Utilisez ssmparameter.

objectAlias

(Facultatif) Le nom de fichier du paramètre dans le EKS pod Amazon. Si vous ne spécifiez pas ce champ, objectName apparaît en tant que nom de fichier.

objectVersion

(Facultatif) Numéro de version du paramètre. Nous vous recommandons de ne pas utiliser ce champ car vous devez le mettre à jour chaque fois que vous mettez à jour le paramètre. Par défaut, la version la plus récente est utilisée. Dans Parameter Store paramètres, vous pouvez utiliser objectVersion ou objectVersionLabel pas les deux.

objectVersionLabel

(Facultatif) Étiquette du paramètre pour la version. La version par défaut est la plus récente. Dans Parameter Store paramètres, vous pouvez utiliser objectVersion ou objectVersionLabel pas les deux.

region

(Facultatif) Le Région AWS du paramètre. Si vous n'utilisez pas ce champ, la ASCP région est recherchée à partir de l'annotation sur le nœud. Comme cette recherche ajoute une surcharge aux demandes de montage, nous vous recommandons de fournir la région pour les clusters qui utilisent un grand nombre de pods.

pathTranslation

(Facultatif) Un caractère de substitution unique à utiliser si le nom de fichier (objectName ou objectAlias) contient le caractère séparateur de chemin, tel que la barre oblique (/) sous Linux. Si le nom d'un paramètre contient le séparateur de chemin, il est ASCP impossible de créer un fichier monté portant ce nom. Au lieu de cela, vous pouvez remplacer le caractère séparateur de chemin d'accès par un autre caractère en le saisissant dans ce champ. Si vous n'utilisez pas ce champ, la valeur par défaut est le trait de soulignement (_). Par exemple,My/Path/Parameter se monte en tant que My_Path_Parameter.

Pour empêcher la substitution de caractères, entrez la chaîne False.

Exemple

L'exemple de configuration suivant montre un SecretProviderClass avec un Parameter Store ressource de paramètres.

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

Étape 3 : mettre à jour le déploiement YAML

Mettez à jour votre déploiement YAML pour utiliser le secrets-store.csi.k8s.io pilote et référencer la SecretProviderClass ressource créée à l'étape précédente. Cela garantit que votre cluster utilise le CSI pilote Secrets Store.

Vous trouverez ci-dessous un exemple de déploiement YAML utilisant un SecretProviderClass nomaws-secrets.

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

Tutoriel : Création et montage d'un paramètre dans un EKS module Amazon

Dans ce didacticiel, vous allez créer un exemple de paramètre dans Parameter Store, puis vous montez le paramètre dans un EKS pod Amazon et vous le déployez.

Avant de commencer, installez leASCP. Pour de plus amples informations, veuillez consulter Installation du ASCP.

Pour créer et monter un secret
  1. Définissez le nom Région AWS et le nom de votre cluster en tant que variables shell afin de pouvoir les utiliser dans les bash commandes. Dans region, saisissez l' Région AWS endroit où s'exécute votre EKS cluster Amazon. Dans clustername, entrez le nom de votre cluster.

    REGION=region CLUSTERNAME=clustername
  2. Créez un paramètre de test.

    aws ssm put-parameter --name "MyParameter" --value "EKS parameter" --type String --region "$REGION"
  3. Créez une politique de ressource pour le pod qui limite son accès au paramètre que vous avez créé à l'étape précédente. Dans parameter-arn, utilisez ARN le paramètre. Enregistrez la politique ARN dans une variable shell. Pour récupérer le paramètreARN, utilisezget-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. Créez un fournisseur IAM OpenID Connect (OIDC) pour le cluster si vous n'en avez pas déjà un. Pour plus d'informations, voir Création d'un IAM OIDC fournisseur pour votre cluster.

    eksctl utils associate-iam-oidc-provider --region="$REGION" --cluster="$CLUSTERNAME" --approve # Only run this once
  5. Créez le compte de service utilisé par le pod et associez la politique de ressources que vous avez créée à l'étape 3 à ce compte de service. Pour ce didacticiel, pour le nom du compte de service, vous utilisez nginx-deployment-sa. Pour plus d'informations, voir Créer un IAM rôle pour un compte de service.

    eksctl create iamserviceaccount --name nginx-deployment-sa --region="$REGION" --cluster "$CLUSTERNAME" --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts
  6. Créez la SecretProviderClass pour spécifier le paramètre à monter dans le pod. La commande suivante utilise l'emplacement de fichier d'un fichier SecretProviderClass nommé ExampleSecretProviderClass.yaml. Pour plus d'informations sur la création de votre propre SecretProviderClass, consultez SecretProviderClass.

    kubectl apply -f ./ExampleSecretProviderClass.yaml
  7. Déployez votre pod La commande suivante utilise un fichier de déploiement nommé ExampleDeployment.yaml. Pour plus d'informations sur la création de votre propre SecretProviderClass, consultez Étape 3 : mettre à jour le déploiement YAML.

    kubectl apply -f ./ExampleDeployment.yaml
  8. Pour vérifier que le paramètre a été monté correctement, utilisez la commande suivante et confirmez que votre valeur de paramètre apparaît.

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

    La valeur du paramètre apparaît.

    "EKS parameter"

Résolution des problèmes

Vous pouvez afficher la plupart des erreurs en décrivant le déploiement du pod.

Pour afficher les messages d'erreur pour votre conteneur
  1. Obtenez une liste de noms de pod à l'aide de la commande suivante. Si vous n'utilisez pas l'espace de noms par défaut, utilisez -n <NAMESPACE>.

    kubectl get pods
  2. Pour décrire le module, dans la commande suivante, pour pod-id utilisez l'identifiant des pods que vous avez trouvés à l'étape précédente. Si vous n'utilisez pas l'espace de noms par défaut, utilisez -n <NAMESPACE>.

    kubectl describe pod/pod-id
Pour voir les erreurs associées au ASCP
  • Pour trouver plus d'informations dans les journaux des fournisseurs, dans la commande suivante, pour pod-id utilisez l'ID du module csi-secrets-store-provider-aws.

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