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.El servicio de políticas de la organización de Google Cloudte ayuda a administrar las configuraciones de recursos y a 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
oUPDATE
para 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 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 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 aplicarla en tu organización con Google Cloud CLI. Esta restricción debe encapsular la política específica que deseas aplicar en 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
: 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 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 serALLOW
oDENY
.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.
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.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/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: 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, 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_POLICY
Reemplaza
PATH_TO_POLICY
por 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_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, 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_LIST
El 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