Requerir políticas de plataforma basadas en comprobaciones de validación continua para todos los clústeres de GKE

En esta página se explica cómo usar el servicio de políticas de organización para requerir que los clústeres de GKE usen una o varias políticas de plataforma basadas en comprobaciones de validación continua (VC). Las políticas de plataforma basadas en comprobaciones obligatorias se especifican en las restricciones personalizadas. A continuación, aplica las restricciones personalizadas en tu política de organización.

Costes

En esta guía se utilizan los siguientes servicios de Google Cloud :

  • Autorización binaria, pero CV está disponible de forma gratuita durante la fase de vista previa
  • Las políticas y las restricciones de organización se ofrecen sin coste económico.

Antes de empezar

  1. Habilita Autorización binaria.
  2. Configura la verificación de contenido con políticas de plataforma basadas en comprobaciones y al menos una política de plataforma basada en comprobaciones de verificación de contenido.

Roles obligatorios

Para obtener los permisos que necesitas para crear restricciones y aplicar políticas de la organización, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en tu organización Google Cloud . Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Crear una restricción personalizada de CV

Consola

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de organización

  2. En la página Organization policies (Políticas de la organización), haga clic en Custom constraint (Restricción personalizada).

  3. Si se te pide que lo hagas, haz clic en Cambiar a la organización principal. Para obtener más información sobre las organizaciones, consulta el artículo Introducción al servicio de políticas de organización.

  4. En Detalles de la restricción, introduce la siguiente información en los campos:

    1. Nombre visible: nombre visible de la restricción, como Require a Binary Authorization continuous validation policy for all GKE clusters. El nombre visible se usa para buscar la restricción después de guardarla. El campo de nombre visible tiene una longitud máxima de 200 caracteres

    2. ID de restricción: ID de la restricción. Por ejemplo, RequireBinAuthzCVPolicy.

    3. Descripción (opcional): descripción de la restricción con formato legible para humanos que se mostrará como mensaje de error cuando se infrinja la política. El campo de descripción tiene una longitud máxima de 2000 caracteres.

  5. En Cumplimiento, haga lo siguiente:

    1. En Tipos de recursos, introduce container.googleaips.com/Cluster.

    2. En Método de aplicación, selecciona Aplicar al crear y actualizar.

    3. Introduce una expresión en el campo Condición. Este campo tiene una longitud máxima de 1000 caracteres. La restricción personalizada se aplica cuando la condición se evalúa como true. La condición es una expresión en la sintaxis del lenguaje de expresión común (CEL). Puedes combinar expresiones con los operadores "y" (&&) y "o" (||) para crear una condición compleja. CEL es un lenguaje de expresiones similar a C. Para obtener más información sobre la sintaxis y la semántica de CEL, consulta https://github.com/google/cel-spec. Para introducir la condición, haz lo siguiente:

      1. Haz clic en Editar condición.

      2. Introduce una expresión para comprobar si existe una política de plataforma de CV. La siguiente condición requiere que exista un enlace de política de plataforma de CV y que la política de plataforma tenga un nombre específico:

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
        

        Haz los cambios siguientes:

        • PROJECT_ID: el ID de proyecto de tu política de la plataforma. El proyecto debe estar en la misma organización.
        • POLICY_ID: el ID de la política de tu plataforma.

        La siguiente condición requiere que existan dos enlaces de políticas de plataforma de CV y que cada uno tenga un nombre de política de plataforma específico.

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
        
        • PROJECT_ID1: el ID de proyecto de tu primera política de plataforma. El proyecto debe estar en la misma organización.
        • POLICY_ID1: el ID de la política de tu primera política de plataforma.
        • PROJECT_ID2: el ID de proyecto de tu segunda política de plataforma.
        • POLICY_ID2: el ID de la política de tu segunda plataforma.

        • Haz clic en Guardar.

    4. En Acción, selecciona Permitir.

  6. Para crear una restricción personalizada, haga clic en Crear restricción.

gcloud

  1. Crea un archivo YAML para la restricción personalizada:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_ID
    resource_types: container.googleapis.com/Cluster
    method_types:
      - CREATE
      - UPDATE
    condition: >-
      CONDITION
    action_type: ACTION
    display_name: DISPLAY_NAME
    description: DESCRIPTION
    

    Haz los cambios siguientes:

    • ORGANIZATION_ID: el ID de tu organización. Por ejemplo, 123456789.
    • CONSTRAINT_ID: un ID de restricción. Por ejemplo, RequireBinAuthzCVPolicy.
    • CONDITION: introduce una expresión para comprobar si existe una política de plataforma de CV. Este campo tiene una longitud máxima de 1000 caracteres. La restricción personalizada se aplica cuando la condición se evalúa como true. La condición es una expresión en la sintaxis del lenguaje de expresión común (CEL). Puedes combinar expresiones con los operadores "y" (&&) y "o" (||) para crear una condición compleja. CEL es un lenguaje de expresiones similar a C. Para obtener más información sobre la sintaxis y la semántica de CEL, consulta https://github.com/google/cel-spec. La siguiente condición requiere que exista un enlace de política de plataforma de CV y que la política de plataforma tenga un nombre específico:

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
      

      Haz los cambios siguientes:

      • PROJECT_ID: el ID de proyecto de tu política de la plataforma. El proyecto debe estar en la misma organización.
      • POLICY_ID: el ID de la política de tu plataforma.

      La siguiente condición requiere que existan dos enlaces de políticas de plataforma de CV y que cada uno tenga un nombre de política de plataforma específico.

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
      
      • PROJECT_ID1: el ID de proyecto de tu primera política de plataforma. El proyecto debe estar en la misma organización.
      • POLICY_ID1: el ID de la política de tu primera política de plataforma.
      • PROJECT_ID2: el ID de proyecto de tu segunda política de plataforma.
      • POLICY_ID2: el ID de la política de tu segunda plataforma.

      • ACTION: la acción que se debe llevar a cabo si se cumple la condition. Puede ser ALLOW o DENY.

      • DISPLAY_NAME: un nombre descriptivo para la restricción (por ejemplo, Require a Binary Authorization continuous validation policy for all GKE clusters). El campo de nombre visible tiene una longitud máxima de 200 caracteres

      • DESCRIPTION: descripción de la restricción que se mostrará como mensaje de error cuando se infrinja la política. El campo de descripción tiene una longitud máxima de 2000 caracteres.

    • Aplica la restricción personalizada:

      gcloud org-policies set-custom-constraint CUSTOM_CONSTRAINT_PATH
      

      Sustituye CUSTOM_CONSTRAINT_PATH por la ruta de tu definición de restricción personalizada.

    • Verifica que la restricción personalizada exista:

      gcloud org-policies list-custom-constraints \
          --organization=ORGANIZATION_ID
      

      El resultado debería ser similar al siguiente:

      CUSTOM_CONSTRAINT: custom.RequireBinAuthzCVPolicy
      ACTION_TYPE: ALLOW
      METHOD_TYPES: CREATE,UPDATE
      RESOURCE_TYPES: container.googleapis.com/Cluster
      DISPLAY_NAME: This cluster requires the continuous validation policy: projects/my-project/platforms/gke/policies/my-policy
      

Para habilitar la aplicación de la restricción personalizada que has creado, crea una política de organización.

Usar una política de organización para aplicar la restricción personalizada

Para aplicar la nueva restricción personalizada, crea una política de organización que haga referencia a la restricción y, a continuación, aplica la política de organización.

Consola

Para aplicar la restricción, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de organización

  2. Selecciona el selector de proyectos y, a continuación, la organización.

  3. Busca y selecciona la restricción en la lista.

  4. En la página Detalles de la política de esa restricción, haga clic en Gestionar política.

  5. En la página Editar política, selecciona Anular política del recurso superior.

  6. Haz clic en Añadir regla.

  7. En Implementación obligatoria, selecciona Activada.

  8. Opcional: Haz clic en Probar cambios para simular el efecto de esta política de la organización. Para obtener más información, consulta Probar los cambios en las políticas de la organización con el simulador de políticas.

  9. Para finalizar y aplicar la política de organización, haz clic en Definir política.

gcloud

  1. Crea un archivo de definición de política YAML:

    name: organizations/ORGANIZATION_ID/policies/custom.CONSTRAINT_ID
    spec:
      rules:
      - enforce: true
    

    Haz los cambios siguientes:

    • ORGANIZATION_ID: el ID de la organización
    • CONSTRAINT_ID: el ID de la restricción
  2. Aplica la política:

    gcloud org-policies set-policy ORG_POLICY_PATH
    

    Sustituye ORG_POLICY_PATH por la ruta al archivo de definición de tu política.

  3. Comprueba que la política exista:

    gcloud org-policies list \
        --organization=ORGANIZATION_ID
    

    Sustituye ORGANIZATION_ID por el ID de la organización.

    Para ver una lista de argumentos, consulta gcloud org-policies list.

    El resultado debería ser similar al siguiente:

    CONSTRAINT: custom.RequireBinAuthzCVPolicy
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CN622LIGEIDXnpMB-
    

La política puede tardar hasta 15 minutos en aplicarse.

Para aplicar varias restricciones en las políticas de la plataforma basadas en la comprobación de CV, haga lo siguiente:

  • Crea una restricción personalizada por política basada en comprobaciones de CV.
  • Actualiza la política de la organización con cada restricción personalizada, tal como se describe en esta sección.

Elimina la restricción personalizada.

Puedes eliminar una restricción personalizada mediante la Google Cloud consola o la CLI de Google Cloud.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de organización

  2. Selecciona el selector de proyectos en la parte superior de la página.

  3. En el selector de proyectos, selecciona tu organización.

  4. Busca y selecciona la restricción en la lista.

  5. En Detalles de la restricción, haz clic en Eliminar.

  6. Para confirmar que quieres eliminar la restricción, haz clic en Eliminar.

gcloud

Para eliminar una restricción personalizada, usa el comando de org-policies delete-custom-constraintgcloud CLI:

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_ID \
  --organization=ORGANIZATION_ID

Haz los cambios siguientes:

  • ORGANIZATION_ID: el ID de tu organización, como 123456789

  • CONSTRAINT_NAME: el nombre de tu restricción personalizada

El resultado debería ser similar al siguiente:

Deleted custom constraint [organizations/123456789/customConstraints/CONSTRAINT_NAME]

Después de eliminar una restricción personalizada, las políticas que se hayan creado con esa restricción seguirán existiendo, pero se ignorarán. No puedes crear otra restricción personalizada con el mismo nombre que una restricción personalizada eliminada.

Siguientes pasos