Configurer pour les clusters sur site

Ce document explique comment configurer l'autorisation binaire pour les clusters sur site créés dans Google Distributed Cloud. Il vous explique ensuite comment configurer un exemple de stratégie d'autorisation binaire.

Avant de commencer

  1. Assurez-vous que vos clusters disposent d'une version Google Distributed Cloud compatible. L'autorisation binaire est compatible avec les environnements suivants.

    Bare Metal

    Google Distributed Cloud 1.14 ou 1.15. Pour la version 1.16 ou ultérieure, l'autorisation binaire peut être configurée lors de la création ou de la mise à jour du cluster.

    VMware

    Distributed Cloud pour VMware (Google Distributed Cloud) 1.4 ou version ultérieure.

  2. Le service d'autorisation binaire utilise une adresse IP externe, accessible via une connexion Internet standard. Configurez vos règles de pare-feu pour HTTPS afin de permettre au cluster d'utilisateur d'accéder au point de terminaison binaryauthorization.googleapis.com.

  3. Si vous souhaitez utiliser des journaux d'audit Cloud centralisés pour afficher les entrées des journaux d'audit, y compris celles de l'autorisation binaire pour les clusters en dehors de Google Cloud, vous devez configurer Cloud Audit Logs dans la configuration de votre cluster.

    Bare Metal

    Configurez Cloud Audit Logs dans Google Distributed Cloud.

    VMware

    Configurez Cloud Audit Logs dans Google Distributed Cloud.

  4. Vous devez activer l'API d'autorisation binaire comme suit :

    1. Accédez à la console Google Cloud .

      Activer les API

    2. Dans la liste déroulante des projets, sélectionnez votre projet hôte du parc. Vous pouvez le trouver dans la section gkeConnect de votre fichier de configuration de cluster d'utilisateur. Il s'agit du projet Google Cloud qui connecte votre cluster d'utilisateur à Google Cloud.

Configurer l'autorisation binaire

Dans cette section, vous allez configurer l'autorisation binaire dans votre cluster sur site.

Spécifier les variables d'environnement d'installation

Pour spécifier les variables d'environnement, procédez comme suit :

Utiliser Workload Identity

  1. Spécifiez votre projet hôte de parc :

    export PROJECT_ID=PROJECT_ID
    
  2. Définissez l'ID de membre de parc sur l'ID de votre cluster :

    L'ID de membre est indiqué dans la colonne NAME lorsque vous exécutez la commande gcloud container fleet memberships list.

    export MEMBERSHIP_ID=CLUSTER_NAME
    

Utiliser une clé de compte de service

  1. Spécifiez votre projet hôte de parc :

    export PROJECT_ID=PROJECT_ID
    

    Remplacez PROJECT_ID par le projet Google Cloud dans la section gkeConnect du fichier de configuration de votre cluster d'utilisateur.

  2. Spécifiez le chemin d'accès au fichier kubeconfig du cluster d'utilisateur :

    export KUBECONFIG=PATH
    

    Remplacez PATH par le chemin d'accès du fichier kubeconfig de votre cluster d'utilisateur.

  3. Choisissez un nom pour le compte de service d'accès à l'API d'autorisation binaire :

    export SA_NAME=SERVICE_ACCOUNT_NAME
    

    Remplacez SERVICE_ACCOUNT_NAME par le nom de compte de service de votre choix. Le module d'autorisation binaire utilise ce compte de service pour accéder à l'API d'autorisation binaire.

  4. Spécifiez le chemin d'accès au fichier de clé de compte de service que vous allez télécharger plus loin dans ce guide :

    export SA_JSON_PATH=SA_KEY_FILE_PATH
    

    Remplacez SA_KEY_FILE_PATH par le chemin du fichier de clé JSON pour le compte de service.

Installer le module d'autorisation binaire dans votre cluster d'utilisateur

Pour installer le module d'autorisation binaire, procédez comme suit :

Utiliser Workload Identity

Fleet Workload Identity permet aux charges de travail de votre cluster de s'authentifier auprès de Google sans que vous ayez besoin de télécharger, d'alterner manuellement ni de gérer les clés des comptes de service Google Cloud . Pour en savoir plus sur le fonctionnement de Workload Identity pour parc et les avantages liés à son utilisation, consultez la page Utiliser Workload Identity pour parc.

  1. Attribuez le rôle binaryauthorization.policyEvaluator au compte de service Kubernetes sur votre projet hôte de parc :

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \
        --role="roles/binaryauthorization.policyEvaluator"
    
  2. Créez un répertoire de travail :

    1. Créez un répertoire appelé binauthz.

    2. Accédez au répertoire.

  3. Téléchargez le fichier manifest-wi-0.2.6.yaml.tmpl que vous utilisez pour installer le module d'autorisation binaire dans votre cluster d'utilisateur :

    Bare Metal

    gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
    

    VMware

    gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
    
  4. Remplacez les variables d'environnement dans le modèle :

    envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
    
  5. Installez le module d'autorisation binaire dans votre cluster d'utilisateur :

    kubectl apply -f manifest-0.2.6.yaml
    
  6. Vérifiez que le déploiement a bien été créé :

    kubectl get pod --namespace binauthz-system
    

    Le pod binauthz-module-deployment-* est répertorié avec Status de Running et 1/1 Pods prêt, semblable à ce résultat :

    NAME                                          READY   STATUS    RESTARTS   AGE
    binauthz-module-deployment-5fddf9594f-qjprz   1/1     Running   0          11s
    

Utiliser une clé de compte de service

  1. Définissez le projet par défaut pour la Google Cloud CLI :

    gcloud config set project ${PROJECT_ID}
    
  2. Créez un compte de service d'accès à l'API d'autorisation binaire :

    gcloud iam service-accounts create ${SA_NAME}
    
  3. Attribuez le rôle binaryauthorization.policyEvaluator au compte de service d'accès de l'API d'autorisation binaire sur votre projet hôte de parc :

    gcloud projects add-iam-policy-binding ${PROJECT_ID}\
        --member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role="roles/binaryauthorization.policyEvaluator"
    
  4. Créez un répertoire de travail :

    1. Créez un répertoire appelé binauthz.

    2. Accédez au répertoire.

  5. Téléchargez le fichier manifest-0.2.6.yaml que vous utilisez pour installer le module d'autorisation binaire dans votre cluster d'utilisateur :

    Bare Metal

    gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
    

    VMware

    gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-0.2.6.yaml .
    
  6. Créez un fichier YAML pour l'espace de noms binauthz-system.

    Copiez le fichier suivant dans un fichier nommé namespace.yaml :

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        control-plane: binauthz-controller
      name: binauthz-system
    
  7. Créez l'espace de noms dans votre cluster d'utilisateur :

    kubectl apply -f namespace.yaml
    

    Vous obtenez un résultat semblable à celui-ci :

    namespace/binauthz-system created
    
  8. Téléchargez un fichier de clé JSON associé à votre compte de service :

    gcloud iam service-accounts keys create ${SA_JSON_PATH} --iam-account ${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
    
  9. Enregistrez la clé du compte de service en tant que secret Kubernetes dans votre cluster d'utilisateur :

    kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
    
  10. Installez le module d'autorisation binaire dans votre cluster d'utilisateur :

    kubectl apply -f manifest-0.2.6.yaml
    
  11. Vérifiez que le déploiement a bien été créé :

    kubectl get pod --namespace binauthz-system
    

    Le pod binauthz-module-deployment-* est répertorié avec Status de Running et 1/1 Pods prêt, semblable à ce résultat :

    NAME                                          READY   STATUS    RESTARTS   AGE
    binauthz-module-deployment-5fddf9594f-qjprz   1/1     Running   0          11s
    

Configurer et utiliser des stratégies d'autorisation binaire

Cette section vous explique comment configurer et utiliser des stratégies d'autorisation binaire pour les clusters sur site.

Dans chaque exemple, vous configurez la stratégie, puis la testez en essayant de déployer une image de conteneur dans votre cluster.

Tout autoriser

Cette section décrit un cas de réussite. Vous configurez la stratégie d'autorisation binaire de sorte qu'une image de conteneur respecte la stratégie et soit déployée.

Dans Google Cloud, procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page "Autorisation binaire".

    Accéder à la page "Autorisation binaire"

  2. Veillez à sélectionner l'ID de votre projet hôte de parc.

  3. Cliquez sur Modifier la stratégie.

  4. Sous Règle par défaut du projet, sélectionnez Autoriser toutes les images.

  5. Cliquez sur Save Policy (Enregistrer la stratégie).

gcloud

  1. Définissez PROJECT_ID pour votre projet hôte de parc. Vous pouvez trouver cet ID de projet dans le champ gkeConnect de votre fichier de configuration de cluster d'utilisateur.

    export PROJECT_ID=PROJECT_ID
    

    Définissez le projet Google Cloud par défaut.

    gcloud config set project ${PROJECT_ID}
    
  2. Exportez le fichier YAML de stratégie vers votre système local :

    gcloud container binauthz policy export  > policy.yaml
    

    Votre fichier YAML se présente comme suit :

    defaultAdmissionRule:
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      evaluationMode: ALWAYS_ALLOW
    globalPolicyEvaluationMode: ENABLE
    name: projects/<var>PROJECT_ID</var>/policy
    
  3. Modifier policy.yaml.

  4. Définissez evaluationMode sur ALWAYS_ALLOW.

  5. Si le fichier contient un bloc requireAttestationsBy, supprimez ce bloc.

  6. Enregistrez le fichier.

  7. Importez policy.yaml comme suit :

    gcloud container binauthz policy import policy.yaml
    

Pour ajouter une image exclue à la liste d'autorisation, ajoutez ce qui suit au fichier de stratégie :

admissionWhitelistPatterns:
  - namePattern: EXEMPT_IMAGE_PATH

Remplacez EXEMPT_IMAGE_PATH par le chemin d'accès à l'image que vous souhaitez exclure. Pour exclure d'autres images, ajoutez d'autres entrées - namePattern. En savoir plus sur admissionWhitelistPatterns.

Sur votre poste de travail administrateur, procédez comme suit :

  1. Créez un fichier manifeste pour un pod.

    Enregistrez le fichier suivant dans un fichier nommé pod.yaml :

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
      - name: test-container
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    
  2. Créez le pod :

    kubectl apply -f pod.yaml
    

    Vous constatez que le pod a bien été déployé.

  3. Supprimez le pod :

    kubectl delete -f pod.yaml
    

Refuser pour l'ensemble

Cette section présente un exemple d'échec. Dans cette section, vous allez configurer la stratégie par défaut pour interdire le déploiement de votre image de conteneur.

Dans Google Cloud , procédez comme suit :

Console

  1. Dans la console Google Cloud , accédez à la page "Autorisation binaire".

    Accéder à la page "Autorisation binaire"

  2. Assurez-vous que votre projet hôte du parc est sélectionné.

  3. Cliquez sur