Gatekeeper Policy Manager est une simple interface utilisateur Web en lecture seule pour consulter l'état des politiques Gatekeeper OPA dans un cluster Kubernetes.
Le cluster cible Kubernetes peut être le même lorsque GPM s'exécute ou un autre out cluster distant à l'aide d'un fichier kubeconfig . Vous pouvez également exécuter GPM localement dans une machine client et vous connecter à un cluster distant.
GPM peut afficher tous les modèles de contraintes définis avec leur code Rego, tous les CRD de configuration de Gatekeeper et toutes les contraintes avec leur statut actuel, les violations, l'action d'application, les définitions de correspondance, etc.
Vous pouvez voir quelques captures d'écran ci-dessous.
Vous aurez besoin d'OPA Gatekeeper exécuté dans votre cluster et au moins quelques modèles de contraintes et contraintes définis pour profiter de cet outil.
ℹ Vous pouvez facilement déployer Gatekeeper sur votre cluster à l'aide du module Kubernetes Fury OPA (également open source).
Pour déployer Gatekeeper Policy Manager sur votre cluster, appliquez le fichier kustomization fourni exécutant la commande suivante:
kubectl apply -k . Par défaut, cela créera un déploiement et un service à la fois avec le nom gatekeper-policy-manager dans l'espace de noms gatekeeper-system . Nous vous invitons à jeter un coup d'œil dans le fichier kustomization.yaml pour effectuer une configuration supplémentaire.
L'application peut être exécutée sous forme de pod dans un cluster Kubernetes ou localement avec un fichier
kubeconfig. Il fera de son mieux pour automatiquement la configuration correcte.
Une fois que vous avez déployé l'application, si vous n'avez pas configuré une entrée, vous pouvez accéder au Web-UI à l'aide de port-Forward:
kubectl -n gatekeeper-system port-forward svc/gatekeeper-policy-manager 8080:80Puis accédez-y avec votre navigateur sur: http://127.0.0.1:8080
Il est également possible de déployer GPM en utilisant le graphique de casque fourni.
Créez d'abord un fichier de valeurs, par exemple my-values.yaml , avec vos valeurs personnalisées pour la version. Voir la lecture du graphique et les valeurs par défaut.yaml pour plus d'informations.
Ensuite, exécutez:
helm repo add gpm https://sighupio.github.io/gatekeeper-policy-manager
helm upgrade --install --namespace gatekeeper-system --set image.tag=v1.0.13 --values my-values.yaml gatekeeper-policy-manager gpm/gatekeeper-policy-managerN'oubliez pas de remplacer
my-values.yamlpar le chemin du fichier de valeurs.
GPM peut également être exécuté localement à l'aide de Docker et un kubeconfig , en supposant que le fichier kubeconfig que vous souhaitez utiliser est situé à ~/.kube/config la commande pour exécuter GPM localement:
docker run -v ~ /.kube/config:/home/gpm/.kube/config -p 8080:8080 quay.io/sighup/gatekeeper-policy-manager:v1.0.13Puis accédez-y avec votre navigateur sur: http://127.0.0.1:8080
Vous pouvez également exécuter l'application FLASK directement, voir la section de développement pour plus d'informations.
GPM est une application apatride, mais elle peut être configurée à l'aide de variables d'environnement. Les configurations possibles sont:
| Nom de la variable d'environnement | Description | Défaut |
|---|---|---|
GPM_SECRET_KEY | La clé secrète utilisée pour générer des jetons. Modifier cette valeur de production . | g8k1p3rp0l1c7m4n4g3r |
KUBECONFIG | Chemin vers un fichier kubeconfig, s'il est fourni lors de l'exécution à l'intérieur d'un cluster, ce fichier de configuration sera utilisé à la place de l'API du cluster. | |
GPM_LOG_LEVEL | Niveau de journal (voir les documents de journalisation Python pour les niveaux disponibles) | INFO |
GPM_AUTH_ENABLED | Activer l'authentification Options actuelles: "Anonymous", "OIDC" | Anonyme |
GPM_PREFERRED_URL_SCHEME | Schéma d'URL à utiliser lors de la génération de liens. | http |
GPM_OIDC_REDIRECT_DOMAIN | Le domaine où GPM est en cours d'exécution. C'est là que le client sera redirigé après l'authentification | |
GPM_OIDC_CLIENT_ID | L'ID client a utilisé pour s'authentifier contre le fournisseur OIDC | |
GPM_OIDC_CLIENT_SECRET | Le secret du client a utilisé pour s'authentifier contre le fournisseur OIDC (facultatif) | |
GPM_OIDC_ISSUER | Nom d'hôte OIDC ISUER (requis si OIDC Auth est activé) | |
GPM_OIDC_AUTHORIZATION_ENDPOINT | Point de terminaison de l'autorisation OIDC (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si le définition de celui-ci) | |
GPM_OIDC_JWKS_URI | OIDC JWKS URI (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si elle définit celle-ci) | |
GPM_OIDC_TOKEN_ENDPOINT | Point de terminaison du jeton OIDC (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si le définition de celui-ci) | |
GPM_OIDC_INTROSPECTION_ENDPOINT | Point de terminaison d'introspection OIDC (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si le définition de celui-ci) | |
GPM_OIDC_USERINFO_ENDPOINT | OIDC UserInfo Endpoint (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si le définition de celui-ci) | |
GPM_OIDC_END_SESSION_ENDPOINT | Point de terminaison de la session de fin OIDC (Facultatif, le réglage de ce paramètre désactive la découverte du reste de la configuration du fournisseur, définissez toutes les autres valeurs également si elle définit celle-ci) |
️ Veuillez noter que l'authentification OIDC est dans l'État bêta. Il a été testé pour travailler avec Keycloak en tant que fournisseur.Ces variables d'environnement sont déjà fournies et prêtes à être définies dans le fichier
manifests/enable-oidc.yaml.
Puisque v1.0.13 GPM a une prise en charge multi-cluster de base lors de l'utilisation d'un kubeconfig avec plus d'un contexte. GPM vous permettra de choisir le contexte directement à partir de l'interface utilisateur.
Si vous souhaitez exécuter GPM dans un cluster mais avec une prise en charge multi-cluster, c'est aussi simple que le montage d'un fichier kubeconfig dans les pod (s) de GPM avec la configuration d'accès au cluster et définissez la variable d'environnement KUBECONFIG avec le chemin vers le fichier kubeconfig monté. Ou vous pouvez simplement le monter dans /home/gpm/.kube/config et GPM le détectera automatiquement.
N'oubliez pas que l'utilisateur des clusters devrait avoir les bonnes autorisations. Vous pouvez utiliser le fichier
manifests/rabc.yamlcomme référence.Notez également que le cluster où GPM fonctionne devrait être en mesure d'atteindre les autres clusters.
Lorsque vous exécutez GPM localement, vous utilisez déjà un fichier kubeconfig pour vous connecter aux clusters, vous devriez maintenant voir tous vos contextes définis et vous pouvez facilement basculer entre l'interface utilisateur.
Si vous souhaitez utiliser un kubeconfig avec l'authentification IAM, vous devrez personnaliser l'image de conteneur de GPM car l'authentification IAM utilise des binaires AWS externes qui ne sont pas inclus par défaut dans l'image.
Vous pouvez personnaliser l'image du conteneur avec un Dockerfile comme ce qui suit:
FROM curlimages/curl:7.81.0 as downloader
RUN curl https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/download/v0.5.5/aws-iam-authenticator_0.5.5_linux_amd64 --output /tmp/aws-iam-authenticator
RUN chmod +x /tmp/aws-iam-authenticator
FROM quay.io/sighup/gatekeeper-policy-manager:v1.0.13
COPY --from=downloader --chown=root:root /tmp/aws-iam-authenticator /usr/local/bin/ Vous devrez peut-être ajouter également la CLI aws , vous pouvez utiliser la même approche qu'auparavant.
Assurez-vous que votre kubeconfig a l'ensemble apiVersion en tant que client.authentication.k8s.io/v1beta1
Vous pouvez en savoir plus dans ce numéro.








GPM est écrit en Python en utilisant le framework Flask pour le backend et réagit avec une interface utilisateur élastique et le thème Fury pour le frontend.
Pour développer GPM, vous devrez créer un environnement virtuel Python 3, installez toutes les dépendances spécifiées dans les requirements.txt fournies.txt, créez le frontend React et vous êtes prêt à commencer le piratage.
Les commandes suivantes devraient vous mettre en service:
# Build frontend and copy over to static folder
$ pushd app/web-client
$ yarn install && yarn build
$ cp -r build/ * ../static-content/
$ popd
# Create a virtualenv
$ python3 -m venv env
# Activate it
$ source ./env/bin/activate
# Install all the dependencies
$ pip install -r app/requirements.txt
# Run the development server
$ FLASK_APP=app/app.py flask runL'accès à un cluster Kubernetes avec OPA Gatekeeper déployé est recommandé pour déboguer l'application.
Vous aurez besoin d'un fournisseur OIDC pour tester l'authentification OIDC. Vous pouvez utiliser notre module Fury-Kubernetes-Keycloak.
Ce qui suit est une liste de souhaits de fonctionnalités que nous aimerions ajouter à GPM (sans ordre particulier):
ConstraintTemplate S'il vous plaît, faites-nous savoir si vous utilisez GPM et quelles fonctionnalités aimeriez-vous avoir en créant un problème ici sur github ??