Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Configure Pod security policies

Dernière mise à jour :Aug 27, 2026

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

  • managed-gatekeeper

  • managed-policy-template-controller

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éimage.
  • gatekeeper

  • policy-template-controller

  • composant de collecte de journaux (logtail-ds ou loongcollector)

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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Security > Policy Governance.

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

      Remarque

      Vous 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

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Security > Policy Governance.

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

  • infra : politiques liées aux ressources de la couche infrastructure.

  • compliance : politiques personnalisées sur la base des normes de conformité Kubernetes, telles que Alibaba Cloud Kubernetes Security Hardening.

  • psp : politiques qui remplacent les capacités de Pod Security Policy (PSP).

  • k8s-general : politiques générales qui appliquent des contraintes de sécurité sur les configurations de ressources Kubernetes selon les meilleures pratiques de sécurité.

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

  • Deny : bloque le déploiement des ressources qui violent la politique.

  • Alert : autorise le déploiement des ressources qui violent la politique, mais génère un journal d'alerte.

Scope

Sélectionnez les namespaces du cluster auxquels l'instance de politique s'applique.

Parameters

  • Si la zone de texte est vide, la règle ne nécessite aucun paramètre.

  • Si la zone de texte contient un modèle de paramètre, configurez les paramètres au format spécifié en fonction des descriptions des paramètres.

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

    1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

    2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Namespaces and Quotas.

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

    1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

    2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Network > Services.

    3. Dans la liste des Services, repérez le Service que vous souhaitez gérer, cliquez sur image 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.

Important

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

  1. Sur la page ACK Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .

  2. 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 exemple pods, policies ou customresources). 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

action

Type d'opération. Les valeurs prises en charge sont ListK8sResource et GetK8sResource.

Oui

group

Groupe API de la ressource cible.

Oui

version

Version API de la ressource cible.

Non

resource

Nom pluriel de la ressource cible (par exemple persistentvolumeclaims).

Oui

namespaced

Indique si la ressource cible se trouve dans un namespace. Valeurs : true ou false.

Pour les ressources étendues à l'ensemble du cluster, utilisez false.

Oui

namespace

Lorsque namespaced est défini sur true, spécifiez le namespace pour la requête.

Non

name

Lorsque action est défini sur GetK8sResource, spécifiez le nom de la ressource à récupérer.

Non

labelSelector

Filtre les ressources en fonction des libellés, selon la syntaxe des sélecteurs de libellés Kubernetes.

Non

limit

Nombre maximal de ressources renvoyées par ListK8sResource.

Non

requestID

ID unique de la demande. Nous vous recommandons d'utiliser review.uid.

Non

userInfo

Informations sur l'utilisateur qui initie la demande. Nous vous recommandons d'utiliser review.userInfo.

Non

requestFrom

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

    • Déclencheur : Gatekeeper détecte une opération DELETE sur un CRD.

    • Requête : les politiques Rego utilisent external_data pour 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

    1. 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"
    2. Tentez de supprimer le CRD.

      kubectl delete crd simplestthings.example.com
    3. 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.