La Política de la Organización de Google Cloud te brinda un control centralizado y programático sobre los recursos de tu organización. Como administrador de políticas de la organización, puedes definir una política de la organización, que es un conjunto de restricciones llamadas restricciones que se aplican a los recursos de Google Cloud y a los descendientes de esos recursos en la jerarquía de recursos de Google Cloud. Puedes aplicar políticas de la organización a nivel de la organización, carpeta o proyecto.
La política de la organización proporciona restricciones predefinidas para varios servicios de Google Cloud. Sin embargo, si deseas un mayor control de las políticas de la organización, puedes crear restricciones personalizadas y usarlas en las políticas de la organización.
En esta página, se describe cómo ver, crear y administrar restricciones personalizadas de las políticas de la organización. Los administradores crean las restricciones personalizadas para proporcionar un control más detallado y personalizable sobre los campos específicos que restringen las políticas de la organización.
Antes de comenzar
Para obtener más información sobre qué son las políticas y restricciones de la organización y cómo funcionan, consulta Introducción al servicio de políticas de la organización.
Funciones obligatorias
Para obtener los permisos que necesitas a fin de administrar las políticas de la organización, pídele a tu administrador que te otorgue el rol de IAM de administrador de políticas de la organización (roles/orgpolicy.policyAdmin
) en la organización.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.
Este rol predefinido contiene los permisos necesarios para administrar las políticas de la organización. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para administrar las políticas de la organización:
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
Es posible que también puedas obtener estos permisos con funciones personalizadas o con otras funciones predefinidas.
Restricciones personalizadas
Se crea una restricción personalizada en un archivo YAML que especifica los recursos, métodos, condiciones y acciones que están sujetas a la restricción. Estas son específicas del servicio en el que aplicas la política de la organización. Las condiciones para tu restricción personalizada se definen mediante Common Expression Language (CEL).
Configura una restricción personalizada
Puedes crear una restricción personalizada y configurarla para su uso en las políticas de la organización mediante la consola de Google Cloud o Google Cloud CLI.
Consola
En la consola de Google Cloud, ve a la página Políticas de la organización.
Selecciona el Selector de proyectos en la parte superior de la página.
En el Selector de proyectos, selecciona el recurso para el que deseas configurar la política de la organización.
Haz clic en
Restricción personalizada.En el cuadro Nombre visible, ingresa un nombre descriptivo para la restricción. La longitud máxima de este campo es 200 caracteres. No uses PII ni datos sensibles en nombres de restricciones, ya que podrían exponerse en mensajes de error.
En el cuadro ID de restricción, ingresa el nombre que deseas para la nueva restricción personalizada. Por ejemplo,
custom.disableGkeAutoUpgrade
. La longitud máxima de este campo es de 70 caracteres, sin contar el prefijo (por ejemplo,organizations/123456789/customConstraints/custom.
).En el cuadro Description, ingresa una descripción fácil de usar de la restricción que se mostrará como un mensaje de error cuando se infringe la política. La longitud máxima de este campo es 2000 caracteres.
En el cuadro Tipo de recurso, selecciona el nombre del recurso de REST de Google Cloud que contiene el objeto y el campo que deseas restringir, por ejemplo,
container.googleapis.com/NodePool
. Existe un máximo de 20 restricciones personalizadas por tipo de recurso. Si intentas crear una restricción personalizada para un tipo de recurso que ya tiene 20 restricciones personalizadas, la operación fallará.En Método de aplicación, selecciona si deseas aplicar la restricción en un método
CREATE
de REST o en ambos métodosCREATE
yUPDATE
. No todos los servicios de Google Cloud admiten ambos métodos. A fin de ver los métodos compatibles para cada servicio, busca el servicio en Servicios compatibles.Para definir una condición, haz clic en
Editar condición.En el panel Agregar condición, crea una condición de CEL que haga referencia a un recurso de servicio compatible, por ejemplo,
resource.management.autoUpgrade == false
. La longitud máxima de este campo es 1000 caracteres. Para obtener detalles sobre el uso de CEL, consulta Common Expression Language. Para obtener más información sobre los recursos de servicio que puedes usar en tus restricciones personalizadas, consulta Servicios compatibles con restricciones personalizadas.Haz clic en Guardar.
En Acción, selecciona si deseas permitir o rechazar el método evaluado si se cumple la condición anterior.
Haz clic en Crear restricción.
Cuando ingreses un valor en cada campo, aparecerá a la derecha la configuración de YAML equivalente para esta restricción personalizada.
gcloud
A fin de crear una restricción personalizada con Google Cloud CLI, crea un archivo YAML para la restricción personalizada:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Reemplaza lo siguiente:
ORGANIZATION_ID
: el ID de la organización, como123456789
.CONSTRAINT_NAME
: el nombre que deseas para tu nueva restricción personalizada. Por ejemplo,custom.disableGkeAutoUpgrade
La longitud máxima de este campo es de 70 caracteres, sin contar el prefijo (por ejemplo,organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: Es el nombre completamente calificado del recurso de REST de Google Cloud que contiene el objeto y el campo que deseas restringir. Por ejemplo,container.googleapis.com/NodePool
Existe un máximo de 20 restricciones personalizadas por tipo de recurso. Si intentas crear una restricción personalizada para un tipo de recurso que ya tiene 20 restricciones personalizadas, la operación fallará. Para obtener más información sobre los recursos de servicio que puedes usar en tus restricciones personalizadas, consulta Servicios compatibles con restricciones personalizadas.METHOD1,METHOD2
: Es una lista de métodos RESTful para aplicar de manera forzosa la restricción. Puede serCREATE
oCREATE
yUPDATE
. No todos los servicios de Google Cloud admiten ambos métodos. A fin de ver los métodos compatibles para cada servicio, busca el servicio en Servicios compatibles.CONDITION
: Es una condición de CEL que hace referencia a un recurso de servicio compatible, por ejemplo,"resource.management.autoUpgrade == false"
. La longitud máxima de este campo es 1000 caracteres. Para obtener detalles sobre el uso de CEL, consulta Common Expression Language.ACTION
: la acción que se realiza si se cumplecondition
. Puede serALLOW
oDENY
.DISPLAY_NAME
: un nombre descriptivo para la restricción. La longitud máxima de este campo es 200 caracteres.DESCRIPTION
: una descripción fácil de usar de la restricción que se mostrará como un mensaje de error cuando se infringe la política. La longitud máxima de este campo es 2,000 caracteres.
Después de crear una nueva restricción personalizada mediante Google Cloud CLI, debes configurarla a fin de 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_PATHReemplaza
CONSTRAINT_PATH
por la ruta de acceso completa al archivo de restricción personalizado. Por ejemplo, /home/user/customconstraint.yaml
Una vez completadas, encontrarás tus restricciones personalizadas como restricciones disponibles 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_IDReemplaza
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.Actualizar una restricción personalizada
Puedes actualizar una restricción personalizada si la editas en la consola de Google Cloud o si creas un archivo YAML nuevo y vuelves a usar el comando set-custom-constraint
de gcloud CLI. No hay control de versiones de las restricciones personalizadas, por lo que se reemplaza la restricción personalizada existente. Si la restricción personalizada ya se aplicó, la restricción personalizada actualizada entrará en vigencia de inmediato.
Consola
En la consola de Google Cloud, ve a la página Políticas de la organización.
Selecciona el Selector de proyectos en la parte superior de la página.
En el Selector de proyectos, selecciona el recurso para el que deseas actualizar la política de la organización.
Selecciona la restricción que deseas editar de la lista de la página Políticas de la organización. Debería aparecer la página Detalles de la política para esa restricción.
Haz clic en
Editar restricción.Realiza cambios en el nombre visible, la descripción, el método de aplicación, la condición y la acción. No puedes cambiar el ID ni el tipo de recurso de la restricción una vez que se crea la restricción.
Haga clic en Guardar cambios.
gcloud
Para editar una restricción personalizada existente con Google Cloud CLI, crea un nuevo archivo YAML que contenga los cambios que deseas realizar:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Reemplaza lo siguiente:
ORGANIZATION_ID
: el ID de la organización, como123456789
.CONSTRAINT_NAME
: el nombre que deseas para tu nueva restricción personalizada. Por ejemplo,custom.disableGkeAutoUpgrade
La longitud máxima de este campo es de 70 caracteres, sin contar el prefijo (por ejemplo,organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: Es el nombre completamente calificado del recurso de REST de Google Cloud que contiene el objeto y el campo que deseas restringir. Por ejemplo,container.googleapis.com/NodePool
Para obtener más información sobre los recursos de servicio que puedes usar en tus restricciones personalizadas, consulta Servicios compatibles con restricciones personalizadas.METHOD1,METHOD2
: Es una lista de métodos RESTful para aplicar de manera forzosa la restricción. Puede serCREATE
oCREATE
yUPDATE
. No todos los servicios de Google Cloud admiten ambos métodos. A fin de ver los métodos compatibles para cada servicio, busca el servicio en Servicios compatibles.CONDITION
: Es una condición de CEL que hace referencia a un recurso de servicio compatible, por ejemplo,"resource.management.autoUpgrade == false"
. La longitud máxima de este campo es 1000 caracteres. Para obtener detalles sobre el uso de CEL, consulta Common Expression Language.ACTION
: la acción que se realiza si se cumplecondition
. Puede serALLOW
oDENY
.DISPLAY_NAME
: un nombre descriptivo para la restricción. La longitud máxima de este campo es 200 caracteres.DESCRIPTION
: una descripción fácil de usar de la restricción que se mostrará como un mensaje de error cuando se infringe la política. La longitud máxima de este campo es 2,000 caracteres.
Después de crear una nueva restricción personalizada mediante Google Cloud CLI, debes configurarla a fin de 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_PATHReemplaza
CONSTRAINT_PATH
por la ruta de acceso completa al archivo de restricción personalizado. Por ejemplo, /home/user/customconstraint.yaml
Una vez completadas, encontrarás tus restricciones personalizadas como restricciones disponibles 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_IDReemplaza
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.Borrar una restricción personalizada
Puedes borrar una restricción personalizada con la consola de Google Cloud o Google Cloud CLI.
Consola
En la consola de Google Cloud, ve a la página Políticas de la organización.
Selecciona el Selector de proyectos en la parte superior de la página.
En el Selector de proyectos, selecciona el recurso para el que deseas borrar la política de la organización.
Selecciona la restricción que deseas borrar de la lista de la página Políticas de la organización. Debería aparecer la página Detalles de la política para esa restricción.
Haz clic en
Borrar.Para confirmar que deseas borrar la restricción, haz clic en Borrar.
gcloud
Para borrar una restricción personalizada, usa el comando org-policies delete-custom-constraint
de gcloud CLI:
gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
--organization=ORGANIZATION_ID
Reemplaza lo siguiente:
ORGANIZATION_ID
: el ID de la organización, como123456789
.CONSTRAINT_NAME
: Es el nombre de la restricción personalizada. Por ejemplo,custom.disableGkeAutoUpgrade
El resultado es similar al siguiente:
Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade
]
Si borras una restricción personalizada, las políticas que se hayan creado con esa restricción seguirán existiendo, pero se ignorarán. No puedes crear otra restricción personalizada con el mismo nombre que una restricción personalizada borrada.
Aplica una restricción personalizada
Una vez que se configura una restricción personalizada, funciona de manera idéntica a las restricciones booleanas predefinidas. Google Cloud verifica las restricciones personalizadas primero cuando evalúa si se permite una solicitud del usuario. Si alguna de las restricciones personalizadas rechaza la solicitud, esta se rechaza. Luego, Google Cloud verifica si hay restricciones predefinidas que se apliquen a ese recurso.
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.Consola
Para aplicar una restricción booleana, sigue estos pasos:
-
Abre la página
Políticas de la organización en la consola de Google Cloud. -
Selecciona el
Selector de proyectos en la parte superior de la página. -
En el
Selector de proyectos , selecciona el proyecto para el que deseas configurar la política de la organización. -
Selecciona tu restricción de la lista en la página de las
políticas de la organización . Debería aparecer la páginaDetalles de la política para esa restricción. -
Si deseas personalizar las políticas de la organización para este recurso, haz clic en
Administrar política . -
En la página
Editar política , seleccionaPersonalizar . -
Haz clic en
Agregar regla . -
En
Aplicación , selecciona si la aplicación de esta política de la organización debe estar activada o desactivada. -
De manera 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. -
Para finalizar y aplicar la política de la organización, haz clic en
Guardar (Save). La política tardará 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.disableGkeAutoUpgrade
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 tardará hasta 15 minutos en aplicarse.
Crea una política de ejecución de prueba de la organización
Una política de la organización de ejecución de prueba es un tipo de política de la organización en la que los incumplimientos de la política se registran mediante auditoría, pero no se rechazan las acciones infractoras. Puedes crear una política de la organización de ejecución de prueba a partir de una restricción personalizada con la consola de Google Cloud o Google Cloud CLI. Para obtener instrucciones detalladas, consulta Crea una política de la organización de ejecución de prueba.
Restricción de ejemplo
Puedes definir restricciones personalizadas similares a las predefinidas que proporciona Google. Un archivo YAML de restricción personalizado típico es similar al siguiente:
name: organizations/1234567890123/customConstraints/custom.disableGkeAutoUpgrade
resourceTypes:
- container.googleapis.com/NodePool
methodTypes:
- CREATE
- UPDATE
condition: "resource.management.autoUpgrade == false"
actionType: ALLOW
displayName: Disable GKE auto upgrade
description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.
Common Expression Language
El Servicio de políticas de la organización usa Common Expression Language (CEL) para evaluar las condiciones de las restricciones personalizadas. CEL es un lenguaje completo de código abierto sin recorrido que implementa semánticas comunes para la evaluación de expresiones.
Cada servicio que admite restricciones personalizadas pone a disposición un conjunto particular de sus recursos y los campos de estos recursos. Los campos disponibles tienen tipado fuerte y se puede hacer referencia directamente a ellos mediante restricciones personalizadas.
Puedes crear condiciones de CEL que hagan referencia a campos de recursos de servicio según el tipo de campo. El servicio de políticas de la organización admite un subconjunto de tipos de datos, expresiones y macros de CEL. En las siguientes secciones, se enumeran los tipos de datos disponibles, las expresiones comunes y las macros que funcionan con ellos.
Si deseas obtener detalles sobre qué expresiones y macros están disponibles para cada servicio, consulta Servicios compatibles con restricciones personalizadas.
En el siguiente ejemplo de JSON, se muestra cada uno de los tipos de campos potenciales a los que puedes hacer referencia con restricciones personalizadas:
{
integerValue: 1
stringValue: "A text string"
booleanValue: true
nestedValue: {
nestedStringValue: "Another text string"
}
listValue: [foo, bar]
mapValue["costCenter"] == "123"
}
Para cada expresión de CEL, la restricción personalizada se aplica cuando la condición se evalúa como true
. Puedes combinar expresiones con (&&
) o (||
) para crear una consulta compleja. Cuando crees el archivo YAML o JSON para tu restricción personalizada, encierra la consulta completa entre comillas dobles ("
).
Integer
Los campos de número entero, como integerValue
en el ejemplo anterior, permiten que los operadores de comparación se usen en condiciones. Por ejemplo:
resource.integerValue == 1
resource.integerValue > 5
resource.integerValue < 10
Cadena
Los campos de string, como stringValue
en el ejemplo anterior, se pueden evaluar mediante un literal de string, una expresión regular o una expresión CEL. Por ejemplo:
resource.stringValue == "abc"
// stringValue is exactly "abc".
resource.stringValue.matches("dev$")
// stringValue matches a regular expression, which specifies the string ends
// with the word "dev".
resource.stringValue.startsWith("startValue")
// stringValue starts with "startValue".
resource.stringValue.endsWith("endValue")
// stringValue ends with "endValue".
resource.stringValue.contains("fooBar")
// stringValue contains "fooBar".
Se debe hacer referencia a los campos anidados, como nestedStringValue
en el ejemplo anterior, con la ruta de acceso completa. Por ejemplo:
resource.nestedValue.nestedStringValue == "foo"
// nestedValue contains the object nestedStringValue, which has a value of "foo".
Ir a la lista
Los campos de lista, como listValue
en el ejemplo anterior, se pueden evaluar según el tamaño y el contenido de la lista, y si existe un elemento particular dentro de ella.
Por ejemplo:
resource.listValue.size() >= 1 && resource.listValue[0] == "bar"
// listValue has size greater than or equal to one, and the first element is "bar".
resource.listValue.exists(value, value == "foo")
// listValue has at least one element that is exactly "foo".
resource.listValue.all(value, value.contains("foo"))
// listValue is a list of values that are all exactly "foo".
Map
Los campos de mapa, como mapValue
en el ejemplo anterior, son pares clave-valor que se pueden evaluar en función de la existencia y el valor de elementos particulares.
Por ejemplo:
has(resource.mapValue.foo) && resource.mapValue.foo == "bar"
// mapValue contains the key "foo", and that key has the value "bar".
Soluciona errores de CEL
Una condición que se crea con expresiones no válidas o tipos que no coinciden muestra un error cuando intentas configurar la restricción personalizada. Por ejemplo, dada la siguiente restricción personalizada no válida, que compara una string con un número entero:
name: organizations/1234567890123/customConstraints/custom.badConfig
resourceTypes:
- dataproc.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.config.masterConfig.numInstances == 'mismatch'"
actionType: ALLOW
displayName: Number of instances is a string
description: Demonstrate that type mismatches cause an error.
Se produce un error si intentas configurar esa restricción con Google Cloud CLI:
ERROR: (gcloud.org-policies.set-custom-constraint) INVALID_ARGUMENT: Custom constraint condition [resource.config.masterConfig.numInstances == "mismatch"] is invalid. Error: ERROR: <input>:1:15: found no matching overload for '_==_' applied to '(int, string)' (candidates: (%A0, %A0))
| resource.config.masterConfig.numInstances == "mismatch"
| ..........................................^.
En la consola de Google Cloud, los errores de sintaxis CEL no válidos se marcarán con un ícono
Error. Si destacas este ícono, se muestra información sobre la herramienta con más información sobre el error de sintaxis.El Servicio de políticas de la organización compila y valida las condiciones que creas y muestra un error si la condición no es sintácticamente correcta. Sin embargo, hay ciertas condiciones que se compilan, pero generan un error cuando Google Cloud intenta aplicar las restricciones. Por ejemplo, si configuras una restricción con una condición que intenta acceder a un índice de lista o a una clave de mapa que no existe, la restricción falla y muestra un error en el momento de la aplicación, y bloquea cualquier intento de crear el recurso.
Cuando crees condiciones que dependan de los elementos de una lista o un mapa, te recomendamos que inicies la condición con una verificación que garantice que la condición sea válida en todos los casos. Por ejemplo, verifica list.size()
antes de hacer referencia a un elemento de lista en particular o usa has()
antes de hacer referencia a un elemento del mapa.
Servicios compatibles
Cada servicio define el conjunto de campos de restricciones personalizados que se pueden usar para aplicar las políticas de la organización en sus recursos de servicio. Para obtener una lista de los servicios que admiten restricciones personalizadas, consulta Servicios compatibles con restricciones personalizadas.
Para obtener más información sobre cómo configurar un análisis de políticas de la organización, consulta Resultados de vulnerabilidades de las políticas de la organización.
¿Qué sigue?
- Obtén información detallada sobre las restricciones.
- Obtén información sobre las opciones adicionales que puedes usar para personalizar tus políticas.
- Obtén información sobre cómo establecer políticas de la organización basadas en etiquetas.
- Obtén información sobre la validación y la supervisión de las políticas de la organización con el Validador de configuración.