Configurer pour Anthos Clusters on VMware

Ce document explique comment configurer l'autorisation binaire pour Anthos clusters on VMware (GKE On-Prem). Il vous explique ensuite comment configurer un exemple de stratégie d'autorisation binaire.

Avant de commencer

  1. Anthos clusters on VMware 1.4 ou version ultérieure doit être installé et configuré, avec un administrateur et un cluster d'utilisateur. Votre cluster d'utilisateur doit être enregistré auprès de Connect.

  2. Le service d'autorisation binaire utilise une adresse IP publique, accessible via une connexion Internet standard. Configurez vos règles de pare-feu Anthos clusters on VMware 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 des clusters d'autorisation binaire pour Anthos Clusters on VMware, vous devez configurer Cloud Audit Logs dans la configuration de votre cluster d'utilisateur avant de créer le cluster d'utilisateur.

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

    1. Accédez à Google Cloud Console.

      Activer les API

    2. Dans la liste déroulante des projets, sélectionnez votre projet Connect. Vous trouverez ce projet Google Cloud dans la section gkeConnect du fichier de configuration de votre cluster d'utilisateur. Il s'agit du projet Cloud qui connecte votre cluster d'utilisateur à Google Cloud.

Configurer l'autorisation binaire

Dans cette section, vous allez configurer l'autorisation binaire pour Anthos Clusters on VMware dans votre cluster d'utilisateur.

Spécifier les variables d'environnement d'installation

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

  1. Utilisez SSH pour vous connecter à votre poste de travail administrateur Anthos Clusters on VMware.

  2. Spécifiez votre projet Connect :

    export PROJECT_ID=PROJECT_ID
    

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

  3. 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.

  4. Choisissez un nom pour le compte de service d'accès à l'API Binary Authorization :

    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.

  5. 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 :

  1. Défini le projet par défaut pour l'outil gcloud command-line tool.

    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 Connect :

    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.yaml que vous utilisez pour installer le module d'autorisation binaire dans votre cluster d'utilisateur Anthos Clusters on VMware :

    gsutil cp gs://gke-on-prem-release/binauthz/manifest-0.2.2.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.2.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 Anthos clusters on VMware.

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

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 Google Cloud Console, accédez à la page "Autorisation binaire".

    Accéder à la page "Autorisation binaire"

  2. Veillez à sélectionner l'ID de votre projet Connect.

  3. Cliquez sur Modifier la règle.

  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 le paramètre PROJECT_ID pour votre projet Connect. 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 :

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google_containers/*
    - namePattern: gcr.io/google-containers/*
    - namePattern: k8s.gcr.io/**
    - namePattern: gke.gcr.io/**
    - namePattern: gcr.io/stackdriver-agents/*
    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_ALLOW
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    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
    

Sur votre poste de travail d'administrateur Anthos clusters on VMware, 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: gcr.io/google-samples/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 Google Cloud Console, accédez à la page "Autorisation binaire".

    Accéder à la page "Autorisation binaire"

  2. Assurez-vous que votre projet Connect est sélectionné.

  3. Cliquez sur Modifier la règle.

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

  5. Cliquez sur Enregistrer la règle.

gcloud

  1. Définissez le champ PROJECT_ID sur l'ID de votre projet Connect.

    export PROJECT_ID=PROJECT_ID
    
  2. Définissez le projet Cloud par défaut.

    gcloud config set project ${PROJECT_ID}
    
  3. Exportez le fichier YAML de stratégie :

    gcloud container binauthz policy export  > policy.yaml
    
  4. Modifier policy.yaml.

  5. Définissez evaluationMode sur ALWAYS_DENY.

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

  7. Enregistrez le fichier.

  8. Importez policy.yaml comme suit :

    gcloud container binauthz policy import policy.yaml
    

Sur votre poste de travail d'administrateur Anthos clusters on VMware, 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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    
  2. Créez le pod :

    kubectl apply -f pod.yaml
    

    Vous constatez que le déploiement du pod a été bloqué. La sortie ressemble à ceci :

    Error from server (VIOLATES_POLICY): error when creating "pod.yaml": admission webhook "binaryauthorization.googleapis.com" denied the request: Denied by default admission rule. Overridden by evaluation mode
    

Obtenir l'ID de ressource du cluster d'utilisateur

Cette section explique comment composer l'ID de ressource du cluster pour votre cluster d'utilisateur. Dans votre stratégie d'autorisation binaire, vous pouvez créer des règles spécifiques à un cluster. Vous associez ces règles à un ID de ressource spécifique à un cluster, qui est basé sur votre ID de cluster.

Vous obtenez l'ID de ressource comme suit :

Console

  1. Dans Cloud Console, accédez à la page Clusters.

    accéder aux clusters

  2. Sélectionnez l'ID de projet Connect pour Anthos Clusters on VMware. Vous pouvez trouver cet ID de projet dans la section gkeConnect de votre fichier de configuration de cluster d'utilisateur.

  3. Sous Clusters gérés par Anthos, recherchez votre ID de cluster dans la colonne Nom.

  4. Pour créer l'ID de ressource, ajoutez le préfixe global. à l'ID de cluster afin que l'ID de ressource ait le format suivant : global.CLUSTER_ID.

gcloud

  1. Utilisez SSH pour vous connecter à votre poste de travail administrateur Anthos Clusters on VMware.

  2. Sur le poste de travail administrateur, exécutez la commande suivante :

    kubectl get membership -o yaml
    
  3. Obtenez l'ID de cluster à partir du champ spec.owner.id du résultat. Exemple de résultat :

    apiVersion: v1
    items:
    - apiVersion: hub.gke.io/v1
      kind: Membership
      ...
      spec:
        owner:
          id: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/my-cluster-id
    

    Dans l'exemple de résultat, l'ID de cluster est my-cluster-id.

  4. Pour créer l'ID de ressource, ajoutez le préfixe global. à l'ID de cluster. Dans l'exemple, l'ID de ressource est global.my-cluster-id.

Vous pouvez utiliser cet ID de ressource lorsque vous définissez des règles spécifiques à un cluster. Découvrez comment définir des règles spécifiques à un cluster à l'aide de Cloud Console ou de l'outil gcloud.

Mettre à jour la stratégie d'échec

Le webhook du module d'autorisation binaire peut être configuré en mode fail open ou fail closed.

Configuration fermée ("fail close")

Pour mettre à jour la stratégie d'échec, procédez comme suit :

  1. Modifiez le fichier manifest-0.2.2.yaml et définissez la règle "failurePolicy" sur fail.

  2. Réactivez le webhook :

    kubectl apply -f namespace.yaml
    

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

    namespace/binauthz-system created
    

Configuration ouverte ("fail open")

Pour mettre à jour la stratégie d'échec, procédez comme suit :

  1. Modifiez le fichier manifest-0.2.2.yaml et définissez la règle "failurePolicy" sur ignore.

  2. Réactivez le webhook :

    kubectl apply -f namespace.yaml
    

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

    namespace/binauthz-system created
    

Pour en savoir plus, consultez la page Stratégie d'échec des webhooks.

Effectuer un nettoyage

  1. L'exemple de code suivant montre comment désactiver le webhook :

    kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
    
  2. L'exemple de code suivant montre comment réactiver le webhook :

    kubectl apply -f manifest-0.2.2.yaml
    
  3. L'exemple de code suivant montre comment supprimer toutes les ressources liées à l'autorisation binaire :

    kubectl delete -f manifest-0.2.2.yaml
    kubectl delete namespace binauthz-system
    

Étape suivante