Crea y administra restricciones personalizadas

En esta página, se muestra cómo habilitar y usar restricciones personalizadas en tu entorno de clústeres adjuntos de GKE servicio de políticas de la organización de Google Cloudte ayuda a administrar las configuraciones de recursos y crear protecciones en tu entorno de nube.

Descripción general

Con las políticas de organización personalizadas, puedes crear políticas de recursos detalladas en los entornos de GKE Multi-Cloud para cumplir con los requisitos específicos de seguridad y cumplimiento de tu organización. También puedes crear políticas de la organización en modo de ejecución de prueba para probar políticas nuevas sin afectar tus cargas de trabajo de producción.

Para obtener más información sobre las políticas de la organización, consulta Introducción al servicio de políticas de la organización.

Antes de comenzar

Antes de comenzar, asegúrate de comprender los siguientes temas:

Herencia de políticas

De forma predeterminada, las políticas de la organización se heredan según los subordinados de los recursos en los que se aplica la política. Por ejemplo, si aplicas una política en una organización, Google Cloud aplica la política en todos los proyectos de la organización. Para obtener más información sobre la herencia de políticas y cómo cambiar las reglas de evaluación, consulta Reglas de evaluación de jerarquía.

Limitaciones

Antes de crear restricciones personalizadas, ten en cuenta las siguientes limitaciones:

  • Las restricciones personalizadas solo se pueden aplicar en los métodos CREATE o UPDATE para los recursos de clústeres adjuntos de GKE.
  • Las restricciones personalizadas recién aplicadas no se aplican automáticamente a los recursos existentes. Debes actualizar los recursos existentes para aplicar la restricción. Para encontrar los recursos existentes que deben actualizarse, puedes aplicar una política de la organización de ejecución de prueba.
  • Para crear restricciones y aplicar políticas de la organización, necesitas el rol de IAM de administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en tu Google Cloud organización. Para obtener más información sobre los permisos necesarios para administrar las políticas de la organización con restricciones personalizadas, consulta Roles obligatorios.

Precios

Las políticas de la organización y las restricciones personalizadas se ofrecen sin cargo.

Crea restricciones personalizadas

Las restricciones personalizadas se deben especificar con los campos de la especificación de recursos de la API de AttachedCluster, sin incluir los campos que se describen como "Solo de salida".

Crea una restricción personalizada

Para crear una nueva restricción personalizada, debes definir la restricción en un archivo YAML y aplicarla en tu organización con Google Cloud CLI. Esta restricción debe encapsular la política específica que deseas aplicar en los recursos de tus clústeres conectados de GKE.

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

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - gkemulticloud.googleapis.com/AttachedCluster
    methodTypes: 
    - CREATE
    condition: \"CONDITION\"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    Reemplaza lo siguiente:

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

    • CONSTRAINT_NAME : Es el nombre de tu nueva restricción personalizada. Una restricción personalizada debe comenzar con custom. y solo puede incluir letras mayúsculas, minúsculas o números. Por ejemplo, custom.allowClusterCreateIfAnnotationPresent. La longitud máxima de este campo es de 70 caracteres, sin contar el prefijo, por ejemplo, organizations/123456789/customConstraints/custom.

    • CONDITION : Es una condición que se escribe en una representación de un recurso de clúster adjunto. Las condiciones se escriben en Common Expression Language (CEL). La longitud máxima de este campo es de 1,000 caracteres. Por ejemplo, condición: "key" in resource.annotations && resource.annotations.key == "created-by".

    • ACTION : La acción que se realiza si se cumple la condición. Puede ser ALLOW o DENY.

    • DISPLAY_NAME : Es un nombre visible para la restricción. La longitud máxima de este campo es 200 caracteres.

    • DESCRIPTION : Una descripción de la restricción que se mostrará como un mensaje de error cuando se infrinja la política, por ejemplo, "Allow new clusters only when certain annotations are set.". Este campo tiene una longitud máxima de 2,000 caracteres.

    Para obtener más información sobre cómo crear una restricción personalizada, consulta Define restricciones personalizadas.

Asocia la restricción con tus recursos

Después de crear el archivo YAML para una nueva restricción personalizada, debes configurarla para que esté disponible para las políticas de la organización.

  1. Para configurar una restricción personalizada, usa el comando gcloud org-policies set-custom-constraint:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Reemplaza PATH_TO_FILE por la ruta de acceso de la definición de YAML de tu restricción personalizada.

  2. Para verificar que se creó la restricción personalizada, usa el comando gcloud org-policies list-custom-constraints:

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

    En el resultado, se enumeran las políticas creadas:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AttachedCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

Aplica la restricción personalizada

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

  1. Crea un archivo YAML para la política de la organización:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    Reemplaza lo siguiente:

    • RESOURCE_HIERARCHY: La ubicación de la política nueva, que afecta el alcance de la aplicación. Usa la jerarquía de recursos de Google Cloud como guía. Por ejemplo, si deseas aplicar la política en un proyecto específico, usa projects/PROJECT_ID. Para aplicar la política en una organización específica, usa organizations/ORGANIZATION_ID.

    • POLICY_NAME: el nombre de la política nueva.

  2. Aplica la política:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Reemplaza PATH_TO_POLICY por la ruta de acceso al archivo de definición de la política.

  3. Verifica que la política exista:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Reemplaza lo siguiente:

    • RESOURCE_FLAG: El Google Cloud recurso en el que aplicaste la política. Por ejemplo, un proyecto o una organización.

    • RESOURCE_ID: El ID del recurso en el que aplicaste la política. Por ejemplo, el ID de tu organización o proyecto.

    El resultado es similar a este:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Prueba la política

Para probar la política de la organización, registra un clúster de EKS en un proyecto restringido.

  1. Registrar un clúster de EKS en un proyecto restringido

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=eks \
      --issuer-url=ISSUER_URL \
      --context=KUBECONFIG_CONTEXT \
      --kubeconfig=KUBECONFIG_PATH
    
    
  2. El resultado es similar a este:

    ERROR: (gcloud.container.attached.clusters.register) FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION