Utiliser des AWS Secrets Manager secrets dans Amazon Elastic Kubernetes Service - AWS Secrets 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 des AWS Secrets Manager secrets dans Amazon Elastic Kubernetes Service

Pour afficher les secrets de Secrets Manager sous forme de 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. L'ASCP fonctionne avec Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+ exécutant un groupe de nœuds Amazon EC2. AWS Fargate les groupes de nœuds ne sont pas pris en charge. Avec l'ASCP, vous pouvez stocker et gérer vos secrets dans Secrets Manager, puis les récupérer via vos charges de travail exécutées sur Amazon EKS. Si votre secret contient plusieurs paires de clé/valeur au format JSON, vous pouvez choisir celles à monter dans Amazon EKS. L'ASCP utilise la syntaxe JMESPath pour interroger les paires clé/valeur dans votre secret. L'ASCP fonctionne également avec les paramètres du Parameter Store.

Si vous utilisez un cluster Amazon EKS privé, assurez-vous que le VPC dans lequel se trouve le cluster possède un point de terminaison Secrets Manager. Le pilote CSI Secrets Store utilise le point de terminaison pour appeler Secrets Manager. Pour plus d'informations sur la création d'un point de terminaison VPC, consultez Point de terminaison d’un VPC.

Si vous utilisez la rotation automatique Secrets Manager pour vos secrets, vous pouvez également utiliser la fonction de réconciliation de rotation du pilote CSI de Secrets Store pour être sûr de récupérer le dernier secret de Secrets Manager. Pour de plus amples informations, veuillez consulter Auto rotation of mounted contents and synced Kubernetes Secrets (Rotation automatique des contenus montés et des secrets Kubernetes synchronisés).

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

L'ASCP récupère l'identité du pod Amazon EKS et l'échange contre un rôle IAM. Vous définissez des autorisations dans une politique IAM pour ce rôle IAM. Lorsque l'ASCP assume le rôle IAM, il a accès aux secrets que vous avez autorisés. Les autres conteneurs ne peuvent pas accéder aux secrets sauf si vous les associez également au rôle IAM.

Si les appels de l'ASCP pour rechercher la région et le rôle IAM associés au pod sont limités par Kubernetes, vous pouvez modifier les quotas de limitation en utilisant, comme indiqué à l'étape 2. helm install

Pour autoriser votre pod Amazon EKS à accéder aux secrets dans Secrets Manager
  1. Créez une politique d'autorisation qui accorde secretsmanager:GetSecretValue une secretsmanager:DescribeSecret autorisation aux secrets auxquels le pod a besoin pour accéder. Pour un exemple de politique, consultez Exemple : autorisation de lire et de décrire des secrets individuels.

  2. Créez un fournisseur OpenID Connect (OIDC) IAM pour le cluster si vous n'en avez pas déjà un. Pour plus d'informations, consultez la section Créer un fournisseur IAM OIDC pour votre cluster dans le guide de l'utilisateur Amazon EKS.

  3. Créez un rôle IAM pour le compte de service et associez-y la politique. Pour plus d'informations, consultez la section Créer un rôle IAM pour un compte de service dans le guide de l'utilisateur Amazon EKS.

  4. Si vous utilisez un cluster Amazon EKS privé, assurez-vous que le VPC dans lequel se trouve le cluster possède un AWS STS point de terminaison. Pour plus d'informations sur la création d'un point de terminaison, consultez la section Points de terminaison VPC d'interface dans le guide de l'AWS Identity and Access Management utilisateur.

Étape 2 : Installation et configuration de l'ASCP

L'ASCP est disponible GitHub dans le référentiel secrets-store-csi-provider-aws. Le référentiel contient également des exemples de fichiers YAML pour créer et monter un secret.

Pendant l'installation, vous pouvez configurer l'ASCP pour utiliser un point de terminaison FIPS. Pour obtenir la liste des points de terminaison , consultez AWS Secrets Manager points de terminaison.

Pour installer l'ASCP à l'aide de Helm
  1. Pour vous assurer que le dépôt pointe vers les derniers graphiques, utilisez helm repo update.

  2. Ajoutez le graphique des pilotes CSI de Secrets Store.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  3. Installez le chart. Pour configurer la régulation, ajoutez l'indicateur suivant : --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. Ajoutez le graphique ASCP.

    helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
  5. Installez le chart. Pour utiliser un point de terminaison FIPS, ajoutez l'indicateur suivant : --set useFipsEndpoint=true

    helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
Pour installer en utilisant le code YAML dans le dépôt
  • Utilisez les commandes suivantes.

    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

Étape 3 : Identifier les secrets à monter

Pour déterminer quels secrets l'ASCP monte dans Amazon EKS en tant que fichiers du système de fichiers, vous devez créer un fichier YAML SecretProviderClass. La SecretProviderClass liste répertorie les secrets à monter et le nom du fichier sous lequel les monter. La SecretProviderClass doit se trouver dans le même espace de noms que le pod Amazon EKS auquel il fait référence.

Les exemples suivants montrent comment les utiliser SecretProviderClass pour décrire les secrets que vous souhaitez monter et comment nommer les fichiers montés dans le pod Amazon EKS.

Exemple : Monter des secrets par nom ou ARN

L'exemple suivant illustre un SecretProviderClass qui monte six fichiers dans Amazon EKS :

  1. Un secret spécifié par ARN complet.

  2. Un secret spécifié par nom.

  3. Une version spécifique d'un secret.

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"

Exemple : monter des paires clé-valeur à partir d'un secret

L'exemple suivant illustre un SecretProviderClass qui monte six fichiers dans Amazon EKS :

  1. Un secret spécifié par ARN complet.

  2. La paire clé/valeur username du même secret.

  3. La paire clé/valeur password du même secret.

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

Exemple : définir une région de basculement pour un secret multi-région

Pour garantir la disponibilité en cas de panne de connectivité ou pour les configurations de reprise après sinistre, l'ASCP prend en charge une fonction de basculement automatique afin de récupérer les secrets d'une région secondaire.

L'exemple suivant montre un SecretProviderClass qui récupère un secret qui est répliqué dans plusieurs régions. Dans cet exemple, l'ASCP essaie de récupérer le secret à la fois depuis us-east-1 et us-east-2. Si l'une des régions renvoie une erreur 4xx, notamment en raison d'un problème d'authentification, l'ASCP ne monte aucun secret. Si le secret est récupéré avec succès de us-east-1, l'ASCP monte cette valeur secrète. Si le secret n'est pas récupéré correctement de us-east-1, mais qu'il l'est avec succès de us-east-2, l'ASCP monte cette valeur secrète.

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"

Exemple : choisir un secret de basculement à monter

L'exemple suivant montre un SecretProviderClass qui spécifie le secret à monter en cas de basculement. Le secret de basculement n'est pas une réplique. Dans cet exemple, l'ASCP essaie de récupérer les deux secrets spécifiés par objectName. Si l'un ou l'autre renvoie une erreur 4xx, notamment pour un problème d'authentification, l'ASCP ne monte aucun secret. Si le secret est récupéré avec succès de us-east-1, l'ASCP monte cette valeur secrète. Si le secret n'est pas récupéré correctement de us-east-1, mais qu'il l'est avec succès de us-east-2, l'ASCP monte cette valeur secrète. Le fichier monté dans Amazon EKS a pour nom 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"

Étape 4 : monter les secrets sous forme de fichiers dans le pod Amazon EKS

Pour monter des secrets dans Amazon EKS
  1. Appliquez-le au pod SecretProviderClass à l'aide de la commandekubectl apply -f ExampleSecretProviderClass.yaml.

  2. Déployez votre pod à l'aide de la commandekubectl apply -f ExampleDeployment.yaml.

  3. L'ASCP monte les fichiers.

Dépannage

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 pod, dans la commande suivante, pour <PODID>, utilisez l'ID de pod des pods 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/<PODID>
Pour voir les erreurs pour l'ASCP
  • Pour obtenir plus d'informations dans les journaux du fournisseur, utilisez la commande suivante pour <PODID>utiliser l'ID du pod csi-secrets-store-provider-aws.

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