Crear y gestionar restricciones personalizadas
En esta página se explica 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 gestionar las configuraciones de los recursos y a crear medidas de protección en tu entorno de nube.
Información general
Con las políticas de organización personalizadas, puedes crear políticas de recursos detalladas en entornos de GKE Multi-Cloud para cumplir los requisitos específicos de seguridad y cumplimiento de tu organización. También puedes crear políticas de organización en modo de prueba para probar nuevas políticas sin que afecten a tus cargas de trabajo de producción.
Para obtener más información sobre las políticas de organización, consulta el artículo Introducción al servicio de políticas de organización.
Antes de empezar
Antes de empezar, asegúrate de que conoces los siguientes temas.
Herencia de políticas
De forma predeterminada, las políticas de organización se heredan de los descendientes de los recursos en los que se aplican. Por ejemplo, si aplicas una política a una organización, Google Cloud se aplicará a 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, consulte 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
CREATE
oUPDATE
de los recursos de GKE en Azure. - Las restricciones personalizadas que se aplican no se aplican automáticamente a los recursos que ya tienes. Debes actualizar los recursos que ya tengas para aplicar la restricción. Para encontrar los recursos que necesitan actualizarse, puedes aplicar una política de organización de prueba.
- Para crear restricciones y aplicar políticas de organización, necesitas el rol de gestión de identidades y accesos Administrador de políticas de organización (
roles/orgpolicy.policyAdmin
) en tu Google Cloud organización. Para obtener más información sobre los permisos necesarios para gestionar las políticas de la organización con restricciones personalizadas, consulta Roles necesarios.
Precios
Las políticas de organización y las restricciones personalizadas se ofrecen sin coste económico.
Crear restricciones personalizadas
Las restricciones personalizadas deben especificarse mediante los campos de las especificaciones de recursos de la API AzureCluster, AzureNodepool y AzureClient, excluyendo los campos que se describen como "Output only" (Solo salida).Crear una restricción personalizada
Para crear una restricción personalizada, debes definirla en un archivo YAML y aplicarla en tu organización con la CLI de Google Cloud. Esta restricción debe encapsular la política específica que quieras 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 YAML:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AzureNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Haz los cambios siguientes:
ORGANIZATION_ID
: el ID de tu organización, como123456789
.CONSTRAINT_NAME
: el nombre de la nueva restricción personalizada. Una restricción personalizada debe empezar porcustom.
y solo puede incluir letras mayúsculas, letras 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
: condición escrita en función de una representación de un recurso Google Cloud . Las condiciones se escriben en lenguaje de expresión común (CEL). Este campo tiene una longitud máxima de 1000 caracteres. Por ejemplo, condición:"key" in resource.annotations && resource.annotations.key == "created-by"
.ACTION
: la acción que se debe llevar a cabo si se cumple la condición. Puede serALLOW
oDENY
.DISPLAY_NAME
: un nombre visible para la restricción. Este campo 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. Por ejemplo,"Allow new clusters only when certain annotations are set."
Este campo tiene una longitud máxima de 2000 caracteres.
Para obtener más información sobre cómo crear una restricción personalizada, consulta Definir restricciones personalizadas.
Asocia la restricción a tus recursos
Una vez que hayas creado el archivo YAML de una nueva restricción personalizada, debes configurarlo para que la restricción esté disponible para las políticas de 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
Sustituye
PATH_TO_FILE
por la ruta de la definición YAML de tu restricción personalizada.Para verificar que la restricción personalizada se ha creado, usa el comando
gcloud org-policies list-custom-constraints
:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
En la salida se muestran 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.
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.
Crea un archivo YAML para la política de la organización:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true
Haz los cambios siguientes:
RESOURCE_HIERARCHY
: la ubicación de la nueva política, que afecta al ámbito de aplicación. Usa la jerarquía de recursos de Google Cloud como guía. Por ejemplo, si quieres aplicar la política en un proyecto específico, usaprojects/
PROJECT_ID
. Para aplicar la política en una organización concreta, usaorganizations/
ORGANIZATION_ID
.POLICY_NAME
: el nombre de la nueva política.
Aplica la política:
gcloud org-policies set-policy PATH_TO_POLICY
Sustituye
PATH_TO_POLICY
por la ruta al archivo de definición de la política.Comprueba que la política exista:
gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
Haz los cambios siguientes:
RESOURCE_FLAG
: el Google Cloud recurso en el que has aplicado la política. Por ejemplo, un proyecto o una organización.RESOURCE_ID
: el ID del recurso en el que has aplicado la política. Por ejemplo, el ID de tu proyecto o de tu organización.
El resultado debería ser similar al siguiente:
CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent LIST_POLICY: - BOOLEAN_POLICY: SET ETAG: CPjb27wGEOijhL4B-
Probar la política
Prueba la política de la organización creando un clúster de Azure 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 debería ser similar al siguiente:
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