Administra recursos de función con restricciones personalizadas

Como administrador de la organización, puedes crear restricciones personalizadas para Cloud Run Functions. Las políticas de la organización aplican estas restricciones personalizadas a nivel del proyecto, la carpeta o la organización.

La política de la organización proporciona restricciones predefinidas para varios servicios de Google Cloud. Sin embargo, si deseas un control más detallado y personalizable sobre los campos específicos que están restringidos en las políticas de tu organización, también puedes crear políticas de la organización personalizadas.

En esta página, se detalla cómo crear restricciones personalizadas para las funciones creadas con las APIs de Cloud Functions v2 y aplicarlas a nivel del proyecto. Para obtener información sobre las políticas de la organización personalizadas, consulta Crea y administra políticas de la organización personalizadas.

Beneficios

  • Administración de costos: Usa políticas personalizadas de la organización para restringir los tamaños y tipos de instancias de VM y discos que se pueden usar en tu organización. También puedes restringir la familia de máquinas que se usa para la instancia de VM.
  • Seguridad, cumplimiento y administración :
    • Para aplicar requisitos de seguridad, puedes requerir reglas de puerto de firewall específicas en las VMs.
    • Para admitir el aislamiento de hardware o el cumplimiento de las licencias, puedes exigir que todas las VMs de un proyecto o una carpeta específicos se ejecuten en nodos de usuario único.
    • Para administrar las secuencias de comandos de automatización, puedes usar políticas de organización personalizadas para verificar que las etiquetas coincidan con las expresiones necesarias.

Herencia de políticas

Cuando se aplica una política de la organización a un recurso, todos los elementos subordinados del recurso también heredan la política de la organización. Por ejemplo, si aplicas una política en una carpeta, Google Cloud aplica la política en todos los proyectos de la carpeta. Para obtener más información sobre este comportamiento y cómo cambiarlo, consulta Reglas de evaluación de la jerarquía.

Precios

El Servicio de políticas de la organización, que incluye las políticas de la organización predefinidas y personalizadas, se ofrece sin cargo.

Limitaciones

Las siguientes limitaciones se aplican a las políticas de organización personalizadas:

  • No se aplica a los nombres de instancias de VM cuando usas la API de inserción masiva.
  • Solo se aplica en el método CREATE para los recursos de Compute Engine.
  • Solo está disponible en las APIs de Cloud Functions v2. No se pueden aplicar en Cloud Run Functions (1ª gen.).
  • Protege solo las funciones cuando uses las APIs de Cloud Functions v2. Cloud Run Functions también se pueden modificar desde la API de Cloud Run. Para obtener protección adicional, es posible que también debas aplicar restricciones personalizadas en Cloud Run.

Antes de comenzar

Roles obligatorios

Crea una restricción personalizada

Una restricción personalizada se define en un archivo YAML mediante los recursos, los métodos, las condiciones y las acciones que son compatibles con el servicio en el que aplicas la política de la organización. Las condiciones para tus restricciones personalizadas se definen con Common Expression Language (CEL). Si deseas obtener más información para compilar condiciones en restricciones personalizadas mediante CEL, consulta la sección CEL de Crea y administra restricciones personalizadas.

Para especificar una restricción personalizada que niegue toda la creación de funciones con una instancia máxima superior a 150, haz lo siguiente:

  • Crea un archivo nuevo maxInstanceConstraint.yaml con el siguiente contenido:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - cloudfunctions.googleapis.com/Function
    methodTypes: 
    - CREATE
    - UPDATE
    condition: resource.serviceConfig.maxInstanceCount > 150
    actionType: DENY
    displayName: Deny functions with max instance count greater than 150
    description: Functions cannot be created with a max instance count greater than 150
    

Reemplaza ORGANIZATION_ID por el ID de tu organización, como 123456789.

Para obtener más información, consulta Define consultas personalizadas.

Configura una restricción personalizada

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 de tu organización. Para configurar una restricción personalizada, usa el comando gcloud org-policies set-custom-constraint:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Reemplaza CONSTRAINT_PATH por la ruta de acceso completa al archivo de restricción personalizado. Por ejemplo, /home/user/customconstraint.yaml. Una vez completadas, tus restricciones personalizadas estarán disponibles como políticas de la organización en tu lista de políticas de la organización de Google Cloud. Para verificar que la restricción personalizada exista, usa el comando gcloud org-policies list-custom-constraints:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Reemplaza ORGANIZATION_ID por el ID del recurso de tu organización. Para obtener más información, consulta Visualiza las políticas de la organización.

Aplica de manera forzosa una política de la organización personalizada

Puedes aplicar una restricción booleana si creas una política de la organización que haga referencia a ella y si aplicas esa política a un recurso de Google Cloud.

Console

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

    Ir a Políticas de la organización

  2. En el selector de proyectos, selecciona el proyecto para el que deseas configurar la política de la organización.
  3. En la lista de la página Políticas de la organización, selecciona tu restricción para ver la página Detalles de la política de esa restricción.
  4. Si deseas configurar las políticas de la organización para este recurso, haz clic en Administrar política.
  5. En la página Editar política, selecciona Anular la política del elemento superior.
  6. Haz clic en Agregar una regla.
  7. En la sección Aplicación, selecciona si la aplicación de esta política de la organización está activada o desactivada.
  8. Opcional: haz clic en Agregar condición para que la política de la organización sea condicional en una etiqueta. Ten en cuenta que si agregas una regla condicional a una política de la organización, debes agregar al menos una regla sin condición o la política no se puede guardar. Para obtener más información, consulta Configura una política de la organización con etiquetas.
  9. Si se trata de una restricción personalizada, puedes hacer clic en Probar cambios para simular el efecto de esta política de la organización. Para obtener más información, consulta Prueba los cambios en las políticas de la organización con Policy Simulator.
  10. Para finalizar y aplicar la política de la organización, haz clic en Establecer política. La política tarda hasta 15 minutos en aplicarse.

gcloud

Para crear una política de la organización que aplique una restricción booleana, crea un archivo de política en formato YAML que haga referencia a la restricción:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

Reemplaza lo siguiente:

  • PROJECT_ID: el proyecto en el que deseas aplicar tu restricción.
  • CONSTRAINT_NAME: el nombre que definiste para tu restricción personalizada. Por ejemplo: custom.cloudFunctionsMaxInstanceLimit

Para aplicar la política de la organización que contiene la restricción, ejecuta el siguiente comando:

    gcloud org-policies set-policy POLICY_PATH
    

Reemplaza POLICY_PATH por la ruta de acceso completa al archivo YAML de la política de la organización. La política tarda hasta 15 minutos en aplicarse.

Prueba la política de la organización personalizada

Para crear una función con una instancia máxima de 151, ejecuta el siguiente comando:

gcloud functions deploy FUNCTION_NAME \
  ...
  --max-instances 151

Se muestra el siguiente resultado:

 Operation denied by custom org policy on resource: ["customConstraints/custom.cloudFunctionsMaxInstanceLimit": "Cloud Functions cannot be created with a max instance count greater than 150."]

Operaciones y recursos compatibles con Cloud Run Functions

Tipo de recurso Tipos de métodos Referencia de la API
cloudfunctions.googleapis.com/Function CREATE, UPDATE projects.locations.functions

Ejemplos comunes de políticas de la organización

En la siguiente tabla, se proporciona la sintaxis de algunas políticas de la organización personalizadas que pueden resultarte útiles:

Descripción Sintaxis de la restricción
Evita que se creen funciones con un lenguaje específico
    name: organizations/ORGANIZATION_IDcustomConstraints/custom.cloudFunctionRuntimeBlock
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.runtime == "python312"
    action_type: DENY
    display_name: Deny functions using Python 3.12
    description: Functions cannot be created with Python 3.12 as the language runtime
Cómo exigir que las funciones usen un grupo de trabajadores específico
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsWorkerPool
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.workerPool == "WORKER_POOL"
    action_type: DENY
    display_name: Require worker pool
    description: Functions must use a worker pool 
Reemplaza WORKER_POOL por el nombre de tu grupo de trabajadores de Cloud Build.
Exige que las funciones almacenen todas las imágenes de contenedor en un repositorio de imágenes específico
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsRepository
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.dockerRepository.startsWith("REPO_PATH")
    action_type: DENY
    display_name: Image repository constraint
    description: Functions must push images to a central image repository under REPO_PATH
Reemplaza REPO_PATH por el URI de la URL del repositorio de imágenes en el que deseas que todas las funciones almacenen sus imágenes de contenedor.

¿Qué sigue?