Utilisation 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.

Utilisation 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 des pods Amazon EKS, vous pouvez utiliser le fournisseur de AWS secrets et de configuration (ASCP) pour le pilote CSI Kubernetes Secrets Store. (Parameter Store est un outil dans AWS Systems Manager.) L'ASCP fonctionne avec Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+. AWS Fargate les groupes de nœuds ne sont pas pris en charge.

Avec l'ASCP, 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 Amazon EKS. Si votre paramètre contient plusieurs paires de clé-valeur au format JSON, vous pouvez choisir celles à monter dans Amazon EKS. L'ASCP peut utiliser JMESPath la syntaxe pour interroger les paires clé-valeur de votre paramètre.

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

Pour apprendre comment intégrer Secrets Manager à Amazon EKS, veuillez consulter Utilisation des secrets Secrets Manager dans Amazon Elastic Kubernetes Service.

Installation de l'ASCP

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

Pour installer le pilote CSI Kubernetes Secrets Store et l'ASCP
  1. Pour installer le pilote CSI Kubernetes Secrets Store, exécutez les commandes suivantes. Pour obtenir les instructions d'installation complètes, consultez Installation dans le livre de pilotes CSI Secrets Store Kubernetes. Pour obtenir des informations sur l'installation de Helm, veuillez consulter 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 l'ASCP, utilisez le fichier YAML dans 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 pod Amazon EKS à 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. Ensuite, vous créez un Rôle IAM pour le compte de service et vous lui attachez la politique. Pour de plus amples informations sur la restriction de l'accès aux paramètres Systems Manager à l'aide de politiques IAM, veuillez consulter Restreindre l'accès à Parameter Store paramètres utilisant des politiques IAM.

Note

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

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

Étape 2 : monter les paramètres dans Amazon EKS

Pour afficher des paramètres dans Amazon EKS comme s'il s'agissait de fichiers sur le système de fichiers, créez un fichier YAML SecretProviderClass qui contient des informations sur vos paramètres et sur comment les monter dans le pod Amazon EKS.

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

SecretProviderClass

Le fichier YAML SecretProviderClass a le format 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 déclaration YAML des paramètres à monter. Nous vous recommandons d'utiliser une chaîne YAML multi-ligne ou un caractère pipe (|).

objectName

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

jmesPath

(Facultatif) Une carte des clés du paramètre codé JSON avec les fichiers à monter dans Amazon EKS. L'exemple suivant montre comment se présente un paramètre codé JSON.

{ "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 pod Amazon EKS.

objectType

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

objectAlias

(Facultatif) Nom de fichier du paramètre dans le pod Amazon EKS. 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, ASCP va rechercher la région à 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 un nom de paramètre contient le séparateur de chemin, l'ASCP ne peut pas créer un fichier monté avec 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 pilote secrets-store.csi.k8s.io et référencer la ressource SecretProviderClass créée à l'étape précédente. Cela garantit que votre cluster utilise le pilote CSI Secrets Store.

Voici un exemple de déploiement YAML avec une SecretProviderClass nommée aws-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 pod Amazon EKS

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

Avant de commencer, installez l'ASCP. Pour de plus amples informations, veuillez consulter Installation de l'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. Pourregion, entrez l' Région AWS endroit où s'exécute votre cluster Amazon EKS. Pourclustername, 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. Pourparameter-arn, utilisez l'ARN du paramètre. Enregistrez l'ARN de politique dans une variable shell. Pour récupérer l'ARN du paramètre, utilisez 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. Créez un fournisseur OpenID Connect (OIDC) IAM pour le cluster si vous n'en avez pas déjà un. Pour de plus amples informations, veuillez consulter Créer un fournisseur IAM OIDC 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 de plus amples informations, consultez Création d'un rôle IAM pour votre 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, pod-id utilisez l'ID du module trouvé à 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 pour l'ASCP
  • Pour obtenir plus d'informations dans les journaux du fournisseur, utilisez la commande suivante pour pod-id utiliser l'ID du pod csi-secrets-store-provider-aws.

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