Crea y administra restricciones personalizadas
En esta página, se muestra cómo habilitar y usar restricciones personalizadas en tu entorno de GKE en Azure. Google CloudEl servicio de políticas de la organización te ayuda a administrar las configuraciones de recursos y crear medidas de protección en tu entorno de nube.
Descripción general
Con las políticas de la organización personalizadas, puedes crear políticas de recursos detalladas en todos 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 la 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
CREATEoUPDATEpara los recursos de GKE en Azure. - 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 organización Google Cloud . 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.
Cómo crear restricciones personalizadas
Las restricciones personalizadas se deben especificar con los campos de las especificaciones de recursos de la API de AzureCluster, AzureNodepool y AzureClient, sin incluir los campos que se describen como "Solo salida".Crea una restricción personalizada
Para crear una nueva restricción personalizada, debes definir la restricción en un archivo YAML y aplicar la restricción personalizada en tu organización con Google Cloud CLI. Esta restricción debe encapsular la política específica que deseas aplicar en todos tus recursos de GKE en Azure.
Crea un archivo YAML para definir una restricción personalizada en tu clúster:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AzureCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Para definir una restricción personalizada en tu grupo de nodos, usa la siguiente configuración de YAML:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AzureNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Reemplaza lo siguiente:
ORGANIZATION_ID: Es el ID de tu organización, como123456789.CONSTRAINT_NAME: Es el nombre de tu nueva restricción personalizada. Una restricción personalizada debe comenzar concustom.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 Google Cloud . Las condiciones se escriben en Common Expression Language (CEL). La longitud máxima de este campo es 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 serALLOWoDENY.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 a 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.
Para configurar una restricción personalizada, usa el comando
gcloud org-policies set-custom-constraint:gcloud org-policies set-custom-constraint PATH_TO_FILEReemplaza
PATH_TO_FILEpor la ruta de acceso a la definición de YAML de tu restricción personalizada.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_IDEl resultado enumera las políticas creadas:
CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent ACTION_TYPE: ALLOW METHOD_TYPES: CREATE RESOURCE_TYPES: gkemulticloud.googleapis.com/AzureCluster 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.
Crea un archivo YAML para la política de la organización:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: trueReemplaza 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 Google Cloud como guía. Por ejemplo, si deseas aplicar la política en un proyecto específico, usaprojects/PROJECT_ID. Para aplicar la política en una organización específica, usaorganizations/ORGANIZATION_ID.POLICY_NAME: el nombre de la política nueva.
Aplica la política:
gcloud org-policies set-policy PATH_TO_POLICYReemplaza
PATH_TO_POLICYpor la ruta de acceso al archivo de definición de la política.Verifica que la política exista:
gcloud org-policies list --RESOURCE_FLAG=RESOURCE_IDReemplaza lo siguiente:
RESOURCE_FLAG: El recurso Google Cloud en el que aplicaste la política. Por ejemplo, un proyecto o una organización.RESOURCE_ID: Es el ID del recurso en el que aplicaste la política. Por ejemplo, el ID de tu proyecto o el ID de tu organización.
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, crea un clúster de Azure nuevo en un proyecto restringido.
Crea un clúster de Azure en un proyecto restringido.
gcloud container azure clusters create CLUSTER_NAME \ --location GOOGLE_CLOUD_LOCATION \ --fleet-project FLEET_PROJECT \ --azure-tenant-id "${TENANT_ID}" \ --azure-application-id "${APPLICATION_ID}" \ --azure-region AZURE_REGION \ --pod-address-cidr-blocks POD_CIDR \ --service-address-cidr-blocks SERVICE_CIDR \ --vm-size VM_SIZE \ --cluster-version 1.31.1-gke.1800 \ --ssh-public-key "$SSH_PUBLIC_KEY" \ --resource-group-id "$CLUSTER_RG_ID" \ --vnet-id "$VNET_ID" \ --subnet-id "$SUBNET_ID" # Optional, see following note \ --tags "control-plane=CLUSTER_NAME" \ --admin-users ADMIN_USERS_LISTEl resultado es similar a este:
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