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
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
Pour installer le pilote CSI Kubernetes Secrets Store et l'ASCP
-
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
-
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 dekubectl
.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'agirName
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
etpassword
. La valeur associée àusername
estmyusername
et la valeur associée àpassword
estmypassword
.- 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
ouobjectVersionLabel
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
ouobjectVersionLabel
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
ouobjectAlias
) 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 queMy_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
-
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
-
Créez un paramètre de test.
aws ssm put-parameter --name "MyParameter" --value "EKS parameter" --type String --region "$REGION"
-
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. Pour
, utilisez l'ARN du paramètre. Enregistrez l'ARN de politique dans une variable shell. Pour récupérer l'ARN du paramètre, utilisezparameter-arn
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
"] } ] }') -
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
-
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
-
Créez la
SecretProviderClass
pour spécifier le paramètre à monter dans le pod. La commande suivante utilise l'emplacement de fichier d'un fichierSecretProviderClass
nomméExampleSecretProviderClass.yaml
. Pour plus d'informations sur la création de votre propreSecretProviderClass
, consultez SecretProviderClass.kubectl apply -f ./ExampleSecretProviderClass.yaml
-
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 propreSecretProviderClass
, consultez Étape 3 : mettre à jour le déploiement YAML.kubectl apply -f ./ExampleDeployment.yaml
-
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
-
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
-
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