Stocker des données dans un secret Kubernetes

Cette rubrique explique comment stocker des données sensibles dans un secret Kubernetes et les récupérer à partir de variables de flux dans un flux de proxy d'API.

Introduction

Vous avez parfois besoin de stocker des données pour les récupérer lors de l'exécution, à savoir des données qui n'expirent pas et qui ne devraient pas être codées en dur dans votre logique de proxy d'API. Une option consiste à utiliser la fonctionnalité de mappage clé-valeur hybride. Si vous utilisez déjà Kubernetes pour la gestion des secrets dans un coffre personnalisé pour des données sensibles, vous pouvez envisager d'utiliser la fonctionnalité de secret Kubernetes décrite dans cette rubrique. Comme pour les données de KVM, vous pouvez accéder aux données secrètes Kubernetes dans les variables de flux de proxy d'API.

Quels types de données peuvent être stockés dans un secret Kubernetes ?

Apigee hybride vous limite au stockage des types de fichiers de données suivants dans un secret Kubernetes. Ils incluent les informations suivantes :

Format de fichier Extensions de fichier compatibles
Certificat TLS et fichiers de clé *.crt, *.key et *.pem
Fichiers de propriétés *.properties

Les fichiers de propriétés sont des fichiers contenant des paires clé/valeur. Exemple :

username=admin
password=1f2d1e2e7df

Créer un secret Kubernetes

Cette section explique comment créer un secret Kubernetes pour stocker des données sensibles dans le cluster.

  1. Créez le ou les fichiers que vous souhaitez stocker dans le secret Kubernetes. Les fichiers doivent faire partie des formats compatibles avec les extensions de fichier répertoriées dans la section Quels types de données peuvent être stockés dans un secret Kubernetes.
  2. Exécutez la commande kubectl create secret generic. Exemple :
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    Où :

    • namespace : espace de noms Kubernetes dans lequel vos composants d'exécution sont déployés.
    • org : nom de votre organisation Apigee.
    • env : nom d'un environnement dans votre organisation.
    • filepath : chemin d'accès au fichier que vous souhaitez inclure dans le secret. Vous devez spécifier au moins un fichier à inclure dans le secret.
    • prop-file : nom d'un fichier de propriétés à inclure dans le secret.
    • key-file : nom d'un fichier de clé TLS à inclure dans le secret.
    • cert-file : nom d'un fichier de certificat TLS à inclure dans le secret.

    Vous pouvez inclure un ou plusieurs fichiers dans le secret. Exemple :

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
    
  3. Après création, il peut s'écouler jusqu'à 90 secondes avant que la modification soit reflétée dans tous les clusters. Les processeurs de messages interrogent les modifications des secrets toutes les 30 secondes. S'ils détectent une modification, le cache est mis à jour.

Récupérer des données à partir d'un secret

Une fois le secret créé et disponible (généralement environ 90 secondes après sa création), vous pouvez accéder aux données secrètes situées dans une variable de flux dans un flux de proxy d'API au sein de l'organisation/l'environnement dans lequel le secret est stocké. Par exemple, supposons que votre secret contienne un fichier *.properties appelé credentials.properties contenant une clé API, comme suit :

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Vous pouvez ensuite récupérer la clé API à partir d'une variable de flux à l'aide d'une stratégie telle que Attribuer un message. Exemple :

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

Le nom de la variable référencé dans l'élément Ref, private.secret.credential.properties.apikey, est composé des éléments suivants :

Partie du nom de la variable Description
private.secret Espace de noms fixe de la variable Tous les secrets Kubernetes stockés dans le cluster hybride partagent cet espace de noms.
credential.properties Nom d'un fichier stocké dans le secret Kubernetes
apikey Nom d'une clé stockée dans un fichier de propriétés

Dans cet exemple, la règle d'attribution de message récupère la valeur apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z et la stocke dans la variable de flux my-apikey.

Mettre à jour un secret

Comme kubectl n'accepte pas la mise à jour des secrets Kubernetes, vous devez d'abord supprimer le secret existant et le recréer en suivant la procédure décrite dans la section Créer un secret Kubernetes.