Ce document explique comment configurer l'autorisation binaire pour les clusters GKE. Il vous explique ensuite comment configurer un exemple de stratégie d'autorisation binaire.
Avant de commencer
Vous devez disposer de clusters GKE enregistrés auprès de Connect. L'autorisation binaire est compatible avec les environnements suivants.
GKE sur solution Bare Metal
GKE sur Bare Metal 1.14 ou version ultérieure.
GKE sur VMware
GKE sur VMware 1.4 ou version ultérieure.
Le service d'autorisation binaire utilise une adresse IP publique, 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
.GKE sur solution Bare Metal
Configurez des règles de pare-feu GKE sur Bare Metal.
GKE sur VMware
Configurez des règles de pare-feu GKE sur VMware.
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 GKE, vous devez configurer Cloud Audit Logging dans la configuration de votre cluster.
GKE sur solution Bare Metal
Configurez les journaux d'audit Cloud dans GKE sur Bare Metal.
GKE sur VMware
Configurez Cloud Audit Logging dans GKE sur VMware.
Vous devez activer l'API d'autorisation binaire comme suit :
Accédez à Google Cloud Console.
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 Google Cloud qui connecte votre cluster d'utilisateur à Google Cloud.
Configurer l'autorisation binaire
Dans cette section, vous allez configurer l'autorisation binaire pour les clusters GKE dans votre cluster.
Spécifier les variables d'environnement d'installation
Pour spécifier les variables d'environnement, procédez comme suit :
Utiliser Workload Identity
Spécifiez votre projet Connect :
export PROJECT_ID=PROJECT_ID
Spécifiez l'ID de membre de parc de votre cluster:
export MEMBERSHIP_ID=MEMBERSHIP_ID
Utiliser une clé de compte de service
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.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.
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.
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 de parc.
Attribuez le rôle
binaryauthorization.policyEvaluator
au compte de service Kubernetes sur votre projet Connect :gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \ --role="roles/binaryauthorization.policyEvaluator"
Créez un répertoire de travail :
Créez un répertoire appelé
binauthz
.Accédez au répertoire.
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 de clusters GKE :GKE sur solution Bare Metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
GKE sur VMware
gsutil cp gs://gke-on-prem-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
Remplacez les variables d'environnement dans le modèle :
envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
Installez le module d'autorisation binaire dans votre cluster d'utilisateur :
kubectl apply -f manifest-0.2.6.yaml
Vérifiez que le déploiement a bien été créé :
kubectl get pod --namespace binauthz-system
Le pod
binauthz-module-deployment-*
est répertorié avecStatus
deRunning
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
Définissez le projet par défaut pour la Google Cloud CLI :
gcloud config set project ${PROJECT_ID}
Créez un compte de service d'accès à l'API d'autorisation binaire :
gcloud iam service-accounts create ${SA_NAME}
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"
Créez un répertoire de travail :
Créez un répertoire appelé
binauthz
.Accédez au répertoire.
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 de clusters GKE :anthos_clusters_on_bare_metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
anthos_clusters_on_vmware
gsutil cp gs://gke-on-prem-release/binauthz/manifest-0.2.6.yaml .
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
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
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
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}
Installez le module d'autorisation binaire dans votre cluster d'utilisateur :
kubectl apply -f manifest-0.2.6.yaml
Vérifiez que le déploiement a bien été créé :
kubectl get pod --namespace binauthz-system
Le pod
binauthz-module-deployment-*
est répertorié avecStatus
deRunning
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 GKE.
Dans chaque exemple, vous configurez la stratégie, puis la testez en essayant de déployer une image de conteneur dans votre cluster GKE.
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
Dans Google Cloud Console, accédez à la page "Autorisation binaire".
Veillez à sélectionner l'ID de votre projet Connect.
Cliquez sur Modifier la règle.
Sous Règle par défaut du projet, sélectionnez Autoriser toutes les images.
Cliquez sur Save Policy (Enregistrer la stratégie).
gcloud
Définissez le paramètre
PROJECT_ID
pour votre projet Connect. Vous pouvez trouver cet ID de projet dans le champgkeConnect
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}
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
Modifier
policy.yaml
.Définissez
evaluationMode
surALWAYS_ALLOW
.Si le fichier contient un bloc
requireAttestationsBy
, supprimez ce bloc.Enregistrez le fichier.
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 à exclure. Pour exclure des images supplémentaires, ajoutez d'autres entrées - namePattern
. En savoir plus sur admissionWhitelistPatterns
.
Sur votre poste de travail administrateur de clusters GKE, procédez comme suit :
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
Créez le pod :
kubectl apply -f pod.yaml
Vous constatez que le pod a bien été déployé.
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
Dans Google Cloud Console, accédez à la page "Autorisation binaire".
Assurez-vous que votre projet Connect est sélectionné.
Cliquez sur Modifier la règle.
Sous Règle par défaut du projet, sélectionnez Interdire toutes les images.
Cliquez sur Enregistrer la règle.
gcloud
Définissez le champ
PROJECT_ID
sur l'ID de votre projet Connect.export PROJECT_ID=PROJECT_ID
Définissez le projet Google Cloud par défaut.
gcloud config set project ${PROJECT_ID}
Exportez le fichier YAML de stratégie :
gcloud container binauthz policy export > policy.yaml
Modifier
policy.yaml
.Définissez
evaluationMode
surALWAYS_DENY
.Si le fichier contient un bloc
requireAttestationsBy
, supprimez ce bloc.Enregistrez le fichier.
Importez
policy.yaml
comme suit :gcloud container binauthz policy import policy.yaml
Sur votre poste de travail administrateur de clusters GKE, procédez comme suit :
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
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
Dans la console Google Cloud, accédez à la page Clusters de GKE Enterprise.
Sélectionnez l'ID de projet Connect pour les clusters GKE. Vous pouvez trouver cet ID de projet dans la section
gkeConnect
de votre fichier de configuration de cluster d'utilisateur.Sous Clusters gérés par Anthos, recherchez votre ID de cluster dans la colonne Nom.
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
Utilisez SSH pour vous connecter au poste de travail administrateur de clusters GKE.
Sur le poste de travail administrateur, exécutez la commande suivante :
kubectl get membership -o yaml
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
.Pour créer l'ID de ressource, ajoutez le préfixe
global.
à l'ID de cluster. Dans l'exemple, l'ID de ressource estglobal.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 la console Google Cloud ou de la CLI 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 :
Modifiez le fichier manifest-0.2.6.yaml et définissez la règle "failurePolicy" sur
Fail
.Réactivez le webhook :
kubectl apply -f manifest-0.2.6.yaml
Vous obtenez un résultat semblable à celui-ci :
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Configuration ouverte ("fail open")
Pour mettre à jour la stratégie d'échec, procédez comme suit :
Modifiez le fichier manifest-0.2.6.yaml et définissez la règle "failurePolicy" sur
Ignore
.Réactivez le webhook :
kubectl apply -f manifest-0.2.6.yaml
Vous obtenez un résultat semblable à celui-ci :
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Pour en savoir plus, consultez la page Stratégie d'échec des webhooks.
Effectuer un nettoyage
L'exemple de code suivant montre comment désactiver le webhook :
kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
L'exemple de code suivant montre comment réactiver le webhook :
kubectl apply -f manifest-0.2.6.yaml
L'exemple de code suivant montre comment supprimer toutes les ressources liées à l'autorisation binaire :
kubectl delete -f manifest-0.2.6.yaml kubectl delete namespace binauthz-system
Étape suivante
- Pour vérifier la conformité avec les règles au moment de la création du pod sans empêcher la création effective du pod, consultez la section Activer la simulation.
- Pour forcer la création d'un pod que l'outil d'application de l'autorisation binaire bloquerait, consultez la section Utiliser le mode "bris de glace".
- Utilisez le certificateur
built-by-cloud-build
pour déployer uniquement des images créées par Cloud Build (bêta). - Pour mettre en œuvre une stratégie d'autorisation binaire basée sur un certificateur, consultez les articles suivants :
- Configurez une stratégie à l'aide de Google Cloud Console ou de l'outil de ligne de commande. Définissez la règle par défaut ou spécifique au cluster pour exiger des attestations.
- Créez un certificateur à l'aide de Google Cloud Console ou de l'outil de ligne de commande.
- Créer une attestation.
- Pour afficher les événements de journal liés à l'autorisation binaire pour les clusters GKE, consultez la page Afficher les événements Cloud Audit Logs.
- Surveiller les métriques