Activer la fédération d'identité de charge de travail sur AKS et EKS.

Cet article explique comment activer Workload Identity pour les installations Apigee hybrid sur les plates-formes AKS et EKS.

Présentation

La fédération d'identité de charge de travail permet aux applications exécutées en dehors de Google Cloud d'emprunter l'identité d'un compte de service Google Cloud Platform en utilisant les identifiants d'un fournisseur d'identité externe.

La fédération d'identité de charge de travail peut vous aider à améliorer la sécurité en permettant aux applications d'utiliser les mécanismes d'authentification fournis par l'environnement externe et à remplacer les clés de compte de service.

Pour en savoir plus, consultez la page Bonnes pratiques d'utilisation de la fédération d'identité de charge de travail.

Configurer la fédération d'identité de charge de travail

Pour utiliser la fédération d'identité de charge de travail avec Apigee hybrid, configurez d'abord votre cluster, puis appliquez la fonctionnalité à votre installation Apigee hybrid.

Configurez votre cluster pour qu'il utilise la fédération d'identité de charge de travail.

Suivez les instructions Google Cloud pour configurer la fédération d'identité de charge de travail pour Kubernetes, en tenant compte des modifications suivantes :

  • Listez vos comptes de service IAM et vos comptes de service Kubernetes à l'aide des commandes suivantes :
    • Comptes de service IAM : vous avez probablement déjà créé les comptes de service IAM (également appelés "comptes de service Google") lors de l'installation initiale d'Apigee hybrid avec l'outil create-service-account. Pour obtenir la liste des comptes de service IAM requis par Apigee hybrid, consultez la section À propos des comptes de service.

      Vous pouvez afficher la liste des comptes de service IAM de votre projet à l'aide de la commande suivante :

      gcloud iam service-accounts list --project PROJECT_ID
    • Comptes de service Kubernetes : les graphiques Apigee hybrid créent les comptes de service Kubernetes nécessaires pour chaque composant lorsque vous exécutez la commande helm install ou helm update.

      Vous pouvez afficher les comptes de service Kubernetes dans votre cluster à l'aide des commandes kubectl get sa :

      kubectl get sa -n APIGEE_NAMESPACE
      kubectl get sa -n apigee-system
  • À l'étape Configurer la fédération d'identité de charge de travail, l'audience par défaut des pools et fournisseurs d'identité de charge de travail créés est la suivante. Utilisez cette valeur par défaut ou définissez une audience attendue personnalisée, puis enregistrez cette valeur pour une utilisation ultérieure.
    https://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
  • Arrêtez-vous après l'étape 1 sous Déployer une charge de travail Kubernetes. Il existe un fichier de configuration des identifiants pour chaque compte de service Google. Enregistrez chaque fichier de configuration des identifiants, puis enregistrez le chemin d'accès saisi pour le paramètre --credential-source-file, par exemple : /var/run/service-account/token.

Configurer Apigee hybrid pour utiliser la fédération d'identité de charge de travail

  1. Copiez le fichier source et le fichier de sortie (credential-configuration.json) des identifiants dans les répertoires de chart suivants. Il s'agit des valeurs que vous avez fournies à l'étape 1 sous Déployer une charge de travail Kubernetes.
    • apigee-datastore/
    • apigee-env
    • apigee-org/
    • apigee-telemetry/
  2. Apportez les modifications globales suivantes au fichier de remplacement de votre cluster :
    gcp:
      workloadIdentity:
        enabled: false # must be set to false to use Workload Identity Federation
      federatedWorkloadIdentity:
        enabled: true
        audience: "AUDIENCE"
        credentialSourceFile: "CREDENTIAL_SOURCE_FILE"
    

    Où :

    • AUDIENCE correspond à l'audience autorisée du fournisseur d'identité de charge de travail, la valeur sous .audience dans le fichier de configuration des identifiants JSON que vous avez configuré dans l'Étape 1 sous Déployer une charge de travail Kubernetes.
    • CREDENTIAL_SOURCE_FILE correspond au nom de fichier et chemin d'accès au fichier source d'identifiants utilisé par la fédération d'identité de charge de travail pour obtenir les identifiants des comptes de service. Il s'agit de la valeur que vous fournissez pour credential-source-file lorsque vous configurez la fédération d'identité de charge de travail avec la commande create-cred-config à l'étape 1 sous Déployer une charge de travail Kubernetes. Exemple :
    • Exemple :

      gcp:
        workloadIdentity:
          enabled: false
        federatedWorkloadIdentity:
          enabled: true
          audience: "//iam.googleapis.com/projects/123456789012/locations/global/workloadIdentityPools/aws-pool/providers/aws-provider"
          credentialSourceFile: "/var/run/service-account/token"
      
  3. Configurez les remplacements pour chaque composant à l'aide de la fédération d'identité de charge de travail. Sélectionnez les instructions correspondant aux fichiers de certificat, aux secrets Kubernetes ou à Vault en fonction de votre installation.

    Fichier de certification

    Remplacez la valeur de serviceAccountPath par le fichier source des identifiants. Il doit s'agir du chemin d'accès relatif au répertoire de chart. Exemple :

    udca:
      serviceAccountPath: fwi/credential-configuration.json
    

    Secret K8s

    1. Créez un secret Kubernetes en utilisant le fichier source des identifiants.
      kubectl create secret -n apigee generic SECRET_NAME --from-file="client_secret.json=CREDENTIAL_CONFIGURATION_FILE"

      Exemple :

      kubectl create secret -n apigee generic udca-fwi-secret --from-file="client_secret.json=./fwi/credential-configuration.json"
    2. Remplacez la valeur de serviceAccountRef par le nouveau secret. Exemple :
      udca:
        serviceAccountRef: udca-fwi-secret
      

    Vault

    Mettez à jour la clé de compte de service SAKEY dans Vault avec le fichier de source des identifiants. Par exemple, pour UDCA (la procédure est similaire pour tous les composants) :

    SAKEY=$(cat ./fwi/credential-configuration.json); kubectl -n apigee exec vault-0 -- vault kv patch secret/apigee/orgsakeys udca="$SAKEY"
  4. Appliquez les modifications à chaque composant concerné à l'aide de la commande helm update :

    Si vous utilisez Vault pour la première fois avec ce cluster, mettez à jour le chart apigee-operator :

    helm upgrade operator apigee-operator/ \
      --namespace apigee-system \
      --atomic \
      -f overrides.yaml
    

    Mettez à jour les autres charts concernés dans l'ordre suivant :

    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    
    helm upgrade telemetry apigee-telemetry/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace apigee \
      --atomic \
      -f overrides.yaml
    

    Mettez à jour le chart apigee-env pour chaque environnement, en remplaçant ENV_NAME à chaque fois :

    helm upgrade $ENV_NAME apigee-env/ \
      --namespace apigee \
      --atomic \
      --set env=$ENV_NAME \
      -f overrides.yaml
    

    Consultez la documentation de référence de Helm sur Apigee hybrid pour obtenir la liste des composants et des charts correspondants.

Pour en savoir plus sur la fédération d'identité de charge de travail et les bonnes pratiques, consultez la page Bonnes pratiques d'utilisation de la fédération d'identité de charge de travail.