Instalar Policy Controller

En esta página, se muestra cómo instalar el Controlador de políticas. El Controlador de políticas verifica, audita y aplica el cumplimiento de tus clústeres con las políticas relacionadas con la seguridad, las regulaciones o las reglas comerciales.

Esta página está destinada a los administradores de TI y operadores que desean asegurarse de que todos los recursos que se ejecutan dentro de la plataforma en la nube cumplan con los requisitos de cumplimiento de la organización. Para ello, deben proporcionar y mantener la automatización para auditar o aplicar el cumplimiento. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes de los usuarios de GKE.

Policy Controller está disponible si usas Google Kubernetes Engine. Para obtener más información, consulta los precios de Google Kubernetes Engine.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  1. Instala e inicializa Google Cloud CLI, que proporciona los comandos gcloud, kubectl y nomos que se usan en estas instrucciones. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente. Si usas Cloud Shell, Google Cloud CLI viene preinstalada.
  2. Asegúrate de que Open Policy Agent Gatekeeper de código abierto no esté instalado en tu clúster. Si es así, desinstala Gatekeeper antes de instalar Policy Controller.

  3. Habilita las API necesarias:

    Console

    Habilita la API de Policy Controller.

    Habilita la API de Policy Controller

    gcloud

    Ejecuta el siguiente comando:

    gcloud services enable anthospolicycontroller.googleapis.com
    
  4. Crea un clúster que ejecute una versión de Kubernetes 1.14.x o posterior o asegúrate de tener acceso a uno. Parece que el Controlador de políticas se ejecuta en versiones de Kubernetes anteriores a la versión 1.14.x, pero el producto no se comporta correctamente.

  5. Otorga las funciones de IAM necesarias al usuario que registra el clúster.

  6. Si planeas usar Google Cloud CLI para configurar el controlador de políticas, registra tu clúster en una flota ahora. Si planeas usar la consola de Google Cloud , registra tus clústeres cuando instales el controlador de políticas.

  7. Si usas clústeres conectados de GKE, asegúrate de que tu clúster de AKS no tenga el complemento de Azure Policy y evita etiquetar espacios de nombres con la clave control-plane.

  8. Si usas Google Distributed Cloud en VMware o Bare Metal, asegúrate de instalar Policy Controller en un clúster de usuarios. No se puede instalar Policy Controller en un clúster de administrador.

Instalar Controlador de políticas

Console

Para instalar Policy Controller en la Google Cloud consola, sigue estos pasos:

  1. En la consola de Google Cloud , ve a la página Política en la sección Administración de postura.

    Ir a Política

  2. Haz clic en Configurar Policy Controller.

  3. Opcional: Para cambiar la configuración predeterminada de la flota, haz clic en Personalizar la configuración de la flota. En el cuadro de diálogo que aparece, haz lo siguiente:

    1. En la sección Agregar o editar paquetes de políticas, haz clic en el botón de activación correspondiente para incluir o excluir un paquete de políticas.
    2. En la sección Editar configuración de Policy Controller, haz lo siguiente:

      1. Para habilitar el webhook de mutación, selecciona la casilla de verificación Habilitar webhook de mutación. Esta función no es compatible con los clústeres de Autopilot.
      2. En el cuadro Intervalo de auditoría, ingresa el período en segundos entre dos auditorías consecutivas.
      3. En el cuadro Espacios de nombres exentos, ingresa una lista de espacios de nombres. Policy Controller ignora los objetos de estos espacios de nombres. Esta función no es compatible con los clústeres de Autopilot.

        Práctica recomendada:

        Exime los espacios de nombres del sistema para evitar errores en tu entorno. En la página Excluir espacios de nombres, puedes encontrar las instrucciones para eximir espacios de nombres y una lista de los espacios de nombres comunes creados por los servicios de Google Cloud .

      4. Para habilitar las restricciones referenciales, selecciona la casilla de verificación Habilitar las plantillas de restricciones que hacen referencia a objetos distintos del que se está evaluando.

      5. En la lista Versión, selecciona la versión de Policy Controller que deseas usar.

    3. Haz clic en Guardar cambios.

  4. Haz clic en Configurar.

  5. En el cuadro de diálogo Confirmación, haz clic en Confirmar. Si no habilitaste Policy Controller anteriormente, haz clic en Confirmar para habilitar la API de anthospolicycontroller.googleapis.com y, luego, instalar Policy Controller en tus clústeres.

  6. Opcional: Sincroniza los clústeres existentes con la configuración predeterminada:

    1. En la pestaña Configuración, haz clic en Sincronizar con la configuración de la flota.
    2. En la lista Clústeres de la flota, selecciona los clústeres que deseas sincronizar y, luego, haz clic en Sincronizar con la configuración de la flota. Esta operación puede tardar unos minutos en completarse.

Se te redireccionará a la pestaña Configuración de Policy Controller. Cuando Policy Controller está instalado y configurado en tus clústeres, las columnas de estado muestran Instalado . Esto puede tomar varios minutos.

gcloud

Ejecuta el siguiente comando para habilitar Policy Controller:

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Puedes establecer campos adicionales para configurar Policy Controller. Por ejemplo, es posible que desees indicarle a Policy Controller que exima algunos espacios de nombres de la aplicación. Para obtener una lista completa de los campos que puedes configurar, consulta la documentación de Google Cloud CLI de Policy Controller o ejecuta gcloud container fleet policycontroller enable --help.

Para establecer la configuración a nivel de la flota para Policy Controller, completa los siguientes pasos:

  1. Crea un archivo llamado fleet-default.yaml que contenga las configuraciones predeterminadas para Policy Controller. El campo installSpec es obligatorio para habilitar los valores predeterminados a nivel de la flota. En este ejemplo, se muestran las opciones que puedes configurar:

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #         cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
    Práctica recomendada:

    Exime los espacios de nombres del sistema para evitar errores en tu entorno. En la página Excluir espacios de nombres, puedes encontrar las instrucciones para eximir espacios de nombres y una lista de los espacios de nombres comunes creados por los servicios de Google Cloud .

  2. Aplica la configuración predeterminada a tu flota:

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Para verificar que se aplicó la configuración, ejecuta el siguiente comando:

    gcloud container fleet policycontroller describe
    
  4. Para quitar la configuración predeterminada a nivel de la flota, ejecuta el siguiente comando:

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Terraform

Para habilitar Policy Controller en toda tu flota con la biblioteca de plantillas predeterminada instalada, consulta el siguiente ejemplo:

resource "google_gke_hub_feature" "policycontroller" {
  name     = "policycontroller"
  location = "global"
  project  = data.google_project.default.project_id

  fleet_default_member_config {
    policycontroller {
      policy_controller_hub_config {
        install_spec = "INSTALL_SPEC_ENABLED"
        policy_content {
          bundles {
            bundle = "pss-baseline-v2022"
          }
          template_library {
            installation = "ALL"
          }
        }
      }
    }
  }
}

Puedes pasar varios bloques bundle para instalar cualquiera de los paquetes que se indican en la descripción general de los paquetes de Policy Controller.

Si deseas obtener más información para usar Terraform, consulta Compatibilidad con Terraform para Policy Controller.

Verifica la instalación del controlador de políticas

Después de instalar el controlador de políticas, puedes verificar que se haya completado de forma correcta.

Console

Completa los siguientes pasos:

  1. En la consola de Google Cloud , ve a la página Política en la sección Administración de postura.

    Ir a Política

  2. En la pestaña Configuración, en la tabla del clúster, verifica la columna Estado de Policy Controller. Si la instalación se realiza correctamente, tendrá el estado Instalado .

gcloud

Ejecuta el siguiente comando:

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Si la instalación se realiza correctamente, se muestra membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

Verifica la instalación de la biblioteca de plantillas de restricciones

Cuando instalas Policy Controller, la biblioteca de plantillas de restricciones se instala de forma predeterminada. Esta instalación puede tardar varios minutos en completarse. Puedes verificar que la biblioteca de plantillas se haya completado correctamente.

Console

Completa los siguientes pasos:

  1. En la consola de Google Cloud , ve a la página Política en la sección Administración de postura.

    Ir a Política

  2. En la pestaña Configuración, en la tabla del clúster, selecciona el número que aparece en la columna Paquetes instalados. En el panel Estado del contenido de la política, una instalación correcta de la biblioteca de plantillas tiene el estado Instalada .

gcloud

Ejecuta el comando siguiente:

kubectl get constrainttemplates

Deberías ver un resultado similar al siguiente:

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

Cuando una plantilla de restricciones individual se instala de forma adecuada, su campo status.created es true.

Interacciones de Policy Controller con el Sincronizador de configuración

Si usas Policy Controller con el Sincronizador de configuración, debes tener en cuenta las siguientes interacciones con los recursos almacenados en tu fuente de información, como un repositorio de Git, que sincroniza Config Sync:

  • No puedes sincronizar una plantilla de restricciones que también es parte de la biblioteca de plantillas, a menos que la biblioteca de plantillas de restricciones esté inhabilitada.

  • Si deseas sincronizar el recurso Config almacenado en el espacio de nombres gatekeeper-system, solo debes definir el recurso Config en la fuente de información. No se debe definir el Namespace de gatekeeper-system con él.

Configura métricas

De forma predeterminada, el controlador de políticas intenta exportar métricas a Prometheus y Cloud Monitoring. Es posible que debas completar pasos de configuración adicionales, como otorgar permisos, para permitir que Policy Controller exporte métricas. Para obtener más información, consulta Usa las métricas de Policy Controller.

Administra la biblioteca de plantillas de restricciones

Si quieres obtener información para desinstalar o instalar plantillas de restricciones, sus restricciones asociadas o la biblioteca de plantillas de restricciones, consulta Crea restricciones.

Exime espacios de nombres de la aplicación

Puedes configurar el controlador de políticas para ignorar objetos dentro de un espacio de nombres. Para obtener más información, consulta Excluye espacios de nombres del controlador de políticas.

Muta los recursos

El controlador de políticas también actúa como un webhook de mutación. Para obtener más información, consulta Muta recursos.

Visualiza la versión del controlador de políticas

Para descubrir qué versión del Controlador de políticas de Gatekeeper usa, ejecuta el siguiente comando a fin de ver la etiqueta de imagen:

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

La etiqueta de Git (o el hash) que se usó para compilar Gatekeeper y el número de versión del operador de ConfigManagement se incluyen en la etiqueta de imagen, como se muestra a continuación:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Por ejemplo, en la siguiente imagen, sucede lo siguiente:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 es el número de versión.
  • 480baac es la etiqueta de Git.
  • 0 es el número de compilación.

Actualiza el controlador de políticas

Antes de actualizar Policy Controller, consulta las notas de la versión para obtener detalles sobre los cambios entre las versiones.

Para actualizar Policy Controller, completa los siguientes pasos:

Console

  1. En la consola de Google Cloud , ve a la página Política en la sección Administración de postura.

    Ir a Política

  2. En la pestaña Configuración, junto al clúster cuya versión deseas actualizar, selecciona Editar configuración.
  3. Expande el menú Editar configuración de Policy Controller.
  4. En la lista desplegable Versión, selecciona la versión a la que deseas actualizar.
  5. Haz clic en Guardar cambios.

gcloud

Ejecuta el siguiente comando:

gcloud container fleet policycontroller update \
  --version=VERSION \
  --memberships=MEMBERSHIP_NAME

Reemplaza lo siguiente:

  • VERSION: Es la versión a la que deseas actualizar.
  • MEMBERSHIP_NAME: Es el nombre de la membresía que elegiste cuando registraste el clúster. Para encontrar el nombre de la membresía, ejecuta gcloud container fleet memberships list.

Desinstala el controlador de políticas

Sigue estos pasos para desinstalar el Controlador de políticas de tus clústeres.

Console

Para inhabilitar el Controlador de políticas en tus clústeres, completa las siguientes tareas:

  1. En la consola de Google Cloud , ve a la página Política en la sección Administración de postura.

    Ir a Política

  2. En la pestaña Configuración, en la tabla del clúster, selecciona Editar en la columna Editar configuración.
  3. En el panel del clúster, expande el menú Acerca de Policy Controller.
  4. Selecciona Desinstalar Policy Controller.
  5. Para confirmar la desinstalación, sigue las instrucciones del diálogo de confirmación y selecciona Confirmar.

Cuando se desinstala Policy Controller, las columnas de estado muestran No instalado .

gcloud

Para desinstalar Policy Controller, ejecuta el siguiente comando:

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Reemplaza MEMBERSHIP_NAME por el nombre de membresía del clúster registrado para inhabilitar Policy Controller. Puedes especificar varias membresías separadas por comas.

RBAC y permisos del controlador de políticas

El controlador de políticas incluye cargas de trabajo con muchos privilegios. Los permisos para estas cargas de trabajo se analizan en la documentación de operaciones Open Policy Agent Gatekeeper.

¿Qué sigue?