Pour répondre aux exigences de conformité du cluster et renforcer la sécurité, activez la fonctionnalité de gouvernance des politiques. Cette fonctionnalité propose une bibliothèque de politiques de sécurité pour les applications conteneurisées Kubernetes, couvrant des catégories telles que Infra (ressources de la couche infrastructure), Compliance (normes de conformité Kubernetes), PSP (extensions des capacités de PodSecurityPolicy) et K8s-general (politiques générales). Vous pouvez activer ou personnaliser les politiques de sécurité de vos applications conteneurisées dans la console ACK afin de garantir que les déploiements et les mises à jour de Pods sont sécurisés et contrôlés.
Gouvernance des politiques
Depuis Kubernetes v1.21, PodSecurityPolicy (PSP) est obsolète. En réponse, ACK a fait évoluer sa fonctionnalité de gestion des politiques initialement basée sur PSP. S'appuyant sur le contrôleur d'admission Gatekeeper qui utilise les politiques Open Policy Agent (OPA), ACK enrichit cette fonctionnalité avec des capacités telles que les statistiques sur l'état de la gouvernance des politiques, la génération de rapports de journaux et la recherche dans les journaux. ACK inclut également une riche bibliothèque de politiques dotée de règles adaptées à un large éventail de scénarios d'application Kubernetes. Vous pouvez configurer ces politiques via une interface conviviale dans la console ACK, ce qui simplifie l'utilisation de la gouvernance des politiques.
Prérequis
Le cluster exécute Kubernetes 1.16 ou une version ultérieure. Pour mettre à niveau votre cluster, consultez la rubrique Mettre à niveau manuellement un cluster ACK.
-
Si vous utilisez un utilisateur RAM pour gérer les politiques, assurez-vous que cet utilisateur dispose des autorisations suivantes :
cs:DescribePolicies: répertorie les politiques de la bibliothèque de politiques.cs:DescribePolicyDetails: obtient les détails d'un modèle de politique.cs:DescribePolicyGovernanceInCluster: obtient les détails de la gouvernance des politiques d'un cluster.cs:DescribePolicyInstances: répertorie les instances de politique déployées dans un cluster.cs:DescribePolicyInstancesStatus: obtient l'état de déploiement des instances de politique pour différents types de politiques dans un cluster.cs:DeployPolicyInstance: déploie une instance de politique dans un cluster spécifié.cs:DeletePolicyInstance: supprime une instance de politique dans un cluster spécifié.cs:ModifyPolicyInstance: modifie une instance de politique dans un cluster spécifié.
Pour plus d'informations sur la création d'une politique RAM personnalisée, consultez la rubrique Accorder des autorisations d'accès aux clusters et aux ressources cloud à l'aide de RAM.
Composants de gouvernance des politiques
ACK propose deux types de composants de gouvernance des politiques : une version gérée et une version non gérée. Un seul type peut être activé dans un cluster à la fois. Le tableau suivant compare les deux versions.
|
Élément |
Version gérée |
Version non gérée |
|
Mode de déploiement |
Déploiement du plan de contrôle : ACK déploie et gère entièrement les composants sur le plan de contrôle du cluster. |
Déploiement du plan de données : les composants se déploient en tant que charge de travail dans votre cluster et sont installés par défaut dans le namespace kube-system, consommant des ressources de Pod sur les nœuds de travail. |
|
Clusters applicables |
Clusters en mode automatique v1.30 ou ultérieur |
Clusters managés ACK et clusters dédiés ACK v1.16 ou ultérieur |
|
Configuration des paramètres de démarrage |
Le système configure les paramètres de démarrage du composant, qui ne peuvent pas être personnalisés. |
Vous pouvez personnaliser les paramètres de démarrage des composants. |
|
Installation du composant principal |
Dans la console ACK, sur la page Add-ons, la carte du composant de la version gérée est marquée d'une icône Géré |
|
|
Collecte des journaux de politiques |
Collecte les journaux à l'aide de la fonctionnalité Collecter les journaux des composants du plan de contrôle dans un cluster managé ACK et les envoie vers un projet Log Service spécifié. |
Installe un composant de collecte de journaux dans le cluster pour collecter et envoyer les journaux vers un projet Log Service spécifié. |
|
Bibliothèque de politiques |
Toutes les politiques de la rubrique Politiques de sécurité prédéfinies pour ACK |
|
Notes
Cette fonctionnalité s'applique uniquement aux nœuds Linux.
Cette fonctionnalité ne prend pas en charge les politiques personnalisées. Toutes les règles doivent provenir de la bibliothèque de politiques intégrée d'ACK.
Étape 1 : Installer ou mettre à niveau la gouvernance des politiques
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page Policy, suivez les instructions à l'écran pour installer ou mettre à niveau les composants.
Lorsque vous activez la fonctionnalité de gouvernance des politiques, vous devez installer les composants suivants. Ces composants sont gratuits, mais ils consomment des ressources de Pod.
-
gatekeeper : un contrôleur d'admission de politiques Kubernetes basé sur le moteur de politiques OPA. Il vous aide à gérer et à appliquer les politiques OPA dans votre cluster et à mettre en œuvre des fonctionnalités telles que la gestion des libellés de namespace.
RemarqueVous devez utiliser le composant gatekeeper fourni par ACK. Si vous avez installé un composant gatekeeper provenant d'une autre source, désinstallez-le, puis réinstallez la version fournie par ACK. Pour plus d'informations sur les notes de version du composant gatekeeper, consultez la rubrique gatekeeper.
Composant de collecte de journaux : collecte et récupère les événements relatifs aux requêtes refusées ou signalées par les contraintes de politique.
policy-template-controller : un contrôleur Kubernetes développé sur la base des modèles de politique Alibaba Cloud. Il vous aide à mieux gérer les instances de politique déployées à partir de différents modèles de politique ainsi que l'état global de la gouvernance du cluster.
-
Étape 2 : Utiliser la gouvernance des politiques
Point d'entrée
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Policy, suivez les instructions à l'écran pour installer ou mettre à niveau les composants si vous y êtes invité, puis effectuez les opérations requises.
Afficher l'état d'application des politiques
Cliquez sur l'onglet Overview pour afficher l'état actuel de la gouvernance des politiques de votre cluster.
La section de présentation des politiques affiche le nombre total de politiques de protection à risque élevé et à risque moyen, le nombre de politiques activées et une liste des politiques recommandées à activer.
Statistiques sur les requêtes refusées et les alertes au cours des 7 derniers jours.
Les enregistrements d'application des politiques des 7 derniers jours sont affichés. Le tableau affiche par défaut les 100 journaux les plus récents de requêtes refusées ou d'alertes des 7 derniers jours. Pour afficher davantage de journaux d'audit, cliquez sur l'icône
située à côté de Actions within Last 7 Days et cliquez sur le lien Log Service dans la fenêtre contextuelle pour afficher tous les journaux dans le Logstore spécifié de la console Log Service. Le tableau Policy Enforcement Records for Last 7 Days en bas de la page affiche les colonnes Enforcement Time, Policy Type, Policy Name, Policy Description, Risk Level, Action et Details pour chaque politique. Vous pouvez utiliser la zone de recherche et les boutons de filtre pour localiser des enregistrements spécifiques.
Créer et gérer des instances de politique
Cliquez sur l'onglet My Policies, puis cliquez sur Create Policy Instance. Dans la boîte de dialogue Create Policy Instance, configurez les paramètres.
|
Paramètre |
Description |
|
Policy Type |
Sélectionnez un type de politique. Valeurs possibles :
Pour plus d'informations, consultez les rubriques Politiques de sécurité prédéfinies pour ACK. |
|
Policy Name |
En fonction du type de politique sélectionné, choisissez le nom du modèle de politique que vous souhaitez déployer dans la liste déroulante. |
|
Action |
|
|
Scope |
Sélectionnez les namespaces du cluster auxquels l'instance de politique s'applique. |
|
Parameters |
|
Afficher les politiques et les instances
Cliquez sur l'onglet My Policies pour afficher toutes les politiques déployables dans le cluster.
-
Vous pouvez filtrer les politiques affichées dans le coin supérieur droit de la liste. Les politiques activées s'affichent en premier. La colonne Instances indique le nombre d'instances déployées pour la politique correspondante dans le cluster.
Si la valeur de la colonne Instances est vide, la politique n'a pas été déployée dans le cluster. Vous pouvez cliquer sur Enabled dans la colonne Actions pour configurer les paramètres et déployer l'instance de politique.
-
Cliquez sur Edit dans la colonne Actions pour modifier la configuration d'une instance de politique.
Si une politique comporte plusieurs instances, cliquez sur View Instances dans la colonne Actions, puis cliquez sur Edit sur l'instance souhaitée pour la modifier.
Cliquez sur Delete dans la colonne Actions pour supprimer toutes les instances de la politique déployées dans le cluster.
Pour plus d'informations sur les descriptions des politiques et des exemples de modèles, consultez les rubriques Politiques de sécurité prédéfinies pour ACK.
Opérations connexes
Activer la protection contre la suppression
Après avoir activé la fonctionnalité de gouvernance des politiques comme décrit dans l'étape Étape 1 : Installer ou mettre à niveau la gouvernance des politiques, vous pouvez également activer la protection contre la suppression pour les namespaces ou les Services qui impliquent des données commerciales critiques ou sensibles, afin d'éviter toute suppression accidentelle. Lorsque la protection contre la suppression est activée, vous devez la désactiver manuellement avant de pouvoir supprimer les ressources correspondantes.
Cette rubrique explique comment activer la protection contre la suppression pour un namespace existant. La procédure est similaire pour les autres ressources.
-
Activer la protection contre la suppression pour un namespace existant
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Namespaces and Quotas.
Dans la liste des namespaces, repérez le namespace que vous souhaitez gérer, cliquez sur Edit dans la colonne Actions, puis suivez les instructions affichées dans la boîte de dialogue pour activer la protection contre la suppression.
-
Activer la protection contre la suppression pour un Service existant
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Dans la liste des Services, repérez le Service que vous souhaitez gérer, cliquez sur
dans la colonne Actions, cliquez sur Enable Deletion Protection, puis suivez les instructions affichées dans la boîte de dialogue pour activer la protection contre la suppression.
Validation inter-ressources avec ack-policy-external-provider
Par défaut, Gatekeeper prend des décisions stratégiques uniquement sur la base de l'objet en cours d'examen. Toutefois, les scénarios de sécurité complexes nécessitent souvent qu'une politique vérifie l'état d'autres ressources du cluster pour assurer une application précise.
Le composant géré ack-policy-external-provider agit comme une source de données externe pour Gatekeeper, permettant aux développeurs de politiques d'interroger les ressources Kubernetes depuis leur code Rego. Cette capacité est requise pour les politiques avancées, telles que la politique intégrée de protection contre la suppression des CRD.
Le composant ack-policy-external-provider doit être utilisé conjointement avec gatekeeper. Assurez-vous que gatekeeper est déployé dans votre cluster.
Installer et configurer ack-policy-external-provider
Sur la page ACK Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
-
Recherchez ack-policy-external-provider et suivez les instructions affichées pour terminer la configuration.
ProviderPodNumber : nombre d'instances du composant.
-
ProtectedKinds : ajoutez les types de ressources correspondant aux CRD que vous souhaitez protéger.
La protection contre la suppression des CRD nécessite de vérifier si des instances du type de ressource existent dans le cluster. Conformément au principe du moindre privilège, ack-policy-external-provider ne dispose pas des autorisations de requête requises par défaut et doit être configuré manuellement.
Définissez ProviderPodNumber (nombre de réplicas, valeur par défaut :
1). Dans la section ProtectedKinds, saisissez les noms des types de ressources (par exemplepods,policiesoucustomresources). Cliquez sur Add pour ajouter plusieurs entrées, ou sur Delete pour supprimer une entrée. Cliquez sur OK.
Définition de l'API et paramètres
ack-policy-external-provider implémente un fournisseur de données externes Gatekeeper standard. Dans un modèle de politique Rego, vous pouvez envoyer une demande de requête de ressource à ce composant en appelant la fonction external_data et en spécifiant provider: ack-policy-external-data-provider.
Les paramètres de la demande sont définis au format JSON. Voici quelques exemples.
// Example 1
{
"action": "ListK8sResource",
"namespaced": false,
"group": "",
"version": "v1",
"resource": "persistentvolumeclaims"
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "PVCProtector",
"labelSelector": "protected",
"limit": 1
}
// Example 2
{
"action": "GetK8sResource",
"namespaced": true,
"namespace": "default",
"group": "apps",
"version": "v1",
"resource": "deployments",
"requestID": review.uid,
"userInfo": review.userInfo,
"requestFrom": "FinOpsPolicy",
"labelSelector": "protected",
"limit": 1
}
Le tableau suivant décrit les principaux paramètres.
|
Paramètre |
Description |
Obligatoire |
|
|
Type d'opération. Les valeurs prises en charge sont |
Oui |
|
|
Groupe API de la ressource cible. |
Oui |
|
|
Version API de la ressource cible. |
Non |
|
|
Nom pluriel de la ressource cible (par exemple |
Oui |
|
|
Indique si la ressource cible se trouve dans un namespace. Valeurs : Pour les ressources étendues à l'ensemble du cluster, utilisez
|
Oui |
|
|
Lorsque |
Non |
|
|
Lorsque |
Non |
|
|
Filtre les ressources en fonction des libellés, selon la syntaxe des sélecteurs de libellés Kubernetes. |
Non |
|
|
Nombre maximal de ressources renvoyées par |
Non |
|
|
ID unique de la demande. Nous vous recommandons d'utiliser |
Non |
|
|
Informations sur l'utilisateur qui initie la demande. Nous vous recommandons d'utiliser |
Non |
|
|
Identifiant de la source de la demande, généralement le nom du modèle de politique, utilisé pour le suivi des journaux. |
Oui |
Exemple : Empêcher la suppression d'un CRD
Cet exemple montre comment utiliser ack-policy-external-provider pour mettre en œuvre une politique avancée courante : interdire la suppression d'une CustomResourceDefinition (CRD) si des instances de ressources personnalisées (CR) associées existent toujours.
Cette politique est une règle intégrée et ne nécessite aucun déploiement manuel. Cette section est fournie à titre de démonstration uniquement.
-
Logique de la politique
Requête : les politiques Rego utilisent
external_datapour appeler ack-policy-external-provider.Vérification : sur la base des paramètres de la demande, le composant ack-policy-external-provider interroge le cluster pour vérifier si des instances CR correspondantes existent.
Décision : si le résultat de la requête renvoie au moins une instance CR, ack-policy-external-provider renverra le résultat à la politique Rego, et la politique finira par
deny(rejeter) cette opération de suppression.
-
Modèle de politique (ConstraintTemplate)
Définit la logique de la politique.
apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: blockcrddeletion annotations: meta.helm.sh/release-name: gatekeeper meta.helm.sh/release-namespace: kube-system metadata.gatekeeper.sh/version: 1.0.0 labels: app.kubernetes.io/managed-by: Helm spec: crd: spec: names: kind: BlockCrdDeletion validation: legacySchema: true targets: - target: admission.k8s.gatekeeper.sh rego: | package block_crd_deletion violation[{"msg": msg}] { before(input.review.operation) response := handle(input.review) msg := after(response) } before(operation) { operation == "DELETE" } handle(review) = response { customrequest := { "action": "ListK8sResource", "namespaced": false, "group": review.object.spec.group, "version": "", "resource": review.object.spec.names.plural, "requestID": review.uid, "userInfo": review.userInfo, "requestFrom": "BlockCrdDeletion", "labelSelector": "protected", "limit": 1 } request_keys := [json.marshal(customrequest)] response := external_data({ "provider": "ack-policy-external-data-provider", "keys": request_keys }) } after(response) = msg { count(response.responses[0]) > 0 msg := sprintf( "The CRD %v is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: %v, etc.", [input.review.name, response.responses[0][0]] ) } -
Instance de politique (Constraint)
Applique le modèle à des ressources spécifiques. Cet exemple applique la politique à tous les CRD.
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: BlockCrdDeletion metadata: name: block-crd-deletion-rule spec: enforcementAction: deny match: kinds: - apiGroups: - '*' kinds: - CustomResourceDefinition -
Vérifier le résultat
-
Créez un CRD de test et une instance CR correspondante.
# Create a CRD apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: simplestthings.example.com spec: group: example.com scope: Namespaced names: plural: simplestthings singular: simplestthing kind: SimplestThing versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: message: type: string --- # Create a CR instance apiVersion: example.com/v1 kind: SimplestThing metadata: name: my-simple-thing namespace: default labels: protected: "false" spec: message: "Hello" -
Tentez de supprimer le CRD.
kubectl delete crd simplestthings.example.com -
Vérifiez que la politique bloque la suppression et renvoie un message d'erreur clair.
Sortie attendue :
Error from server (Forbidden): admission webhook "delete.validation.gatekeeper.sh" denied the request: [block-crd-deletion-rule] The CRD simplestthings.example.com is not allowed to be deleted. Reason: It is not allowed to delete a CRD object when it contains a collection of custom resources. Current existing custom resources: my-simple-thing, etc.
-
Rubriques connexes
La fonction d'inspection vous permet de rechercher des risques de sécurité dans les configurations des charges de travail. Pour plus d'informations, consultez Configurer l'inspection pour vérifier les charges de travail du cluster.