En esta página se explica cómo restringir operaciones específicas en recursos de Google Kubernetes Engine (GKE) de tu organización mediante restricciones personalizadas en el Trusted Cloud by S3NS servicio Organization Policy. Puedes usar restricciones para ayudar a tu organización a cumplir los requisitos de cumplimiento, seguridad y políticas. Para ello, asegúrate de que los recursos del clúster cumplan requisitos específicos. En esta página se explica cómo crear restricciones personalizadas y aplicarlas a los recursos de tu clúster.
Esta página está dirigida a especialistas en seguridad que se aseguran de que su organización cumpla los requisitos de cumplimiento, seguridad y políticas limitando o exigiendo configuraciones específicas en los recursos del clúster. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Trusted Cloud by S3NS
Antes de leer esta página, asegúrate de que conoces las políticas de la organización.
Acerca de las políticas y las restricciones de organización
La Trusted Cloud política de organización te permite controlar los recursos de tu organización de forma centralizada y programática. 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 y a los elementos descendientes de esos recursos en la Trusted Cloud by S3NS jerarquía de recursos. Trusted Cloud Puedes aplicar políticas de organización a nivel de organización, carpeta o proyecto.
La política de organización proporciona restricciones predefinidas para varios servicios de Trusted Cloud . Sin embargo, si quieres tener un control más granular y personalizable sobre los campos específicos que están restringidos en las políticas de tu organización, también puedes crear restricciones personalizadas y usarlas en una política de organización personalizada.
Recursos admitidos en GKE
En GKE, puedes crear restricciones personalizadas para los métodos CREATE
o UPDATE
en cualquier campo del recurso Cluster
o NodePool
de la API de Google Kubernetes Engine v1, excepto en los campos de solo salida y en los siguientes campos:
projects.locations.clusters.masterAuth.clientKey
projects.locations.clusters.masterAuth.password
Herencia de políticas
De forma predeterminada, las políticas se heredan de los descendientes de los recursos en los que se aplican. Por ejemplo, si aplicas una política a una carpeta, se aplicará a todos los proyectos de la carpeta.Trusted Cloud Para obtener más información sobre este comportamiento y cómo cambiarlo, consulta las reglas de evaluación de la jerarquía.
Precios
Las políticas y las restricciones de organización se ofrecen sin coste económico.
Antes de empezar
Antes de empezar, asegúrate de que has realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
-
Para obtener los permisos que necesitas para crear restricciones y aplicar políticas de la organización, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de la organización (
roles/orgpolicy.policyAdmin
) en tu organización Trusted Cloud by S3NS . Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
- Asegúrate de que conoces el ID de tu organización.
Crear una restricción personalizada
Para crear una restricción personalizada, defínela en un archivo YAML y aplíquela en su organización con la CLI de Google Cloud.
Crea un archivo YAML para la restricción personalizada:
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME resourceTypes: - container.googleapis.com/RESOURCE_NAME methodTypes: - METHOD1 - METHOD2 condition: "resource.OBJECT_NAME.FIELD_NAME == VALUE" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
Haz los cambios siguientes:
ORGANIZATION_ID
: el ID de tu organización, como123456789
.CONSTRAINT_NAME
: el nombre que quieras asignar a 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.enableGkeAutopilot
. La longitud máxima de este campo es de 70 caracteres, sin contar el prefijo, por ejemplo,organizations/123456789/customConstraints/custom.
.RESOURCE_NAME
: el nombre (no el URI) del recurso REST de la API de GKE que contiene el objeto y el campo que quieres restringir. Por ejemplo,Cluster
oNodePool
.
METHOD1,METHOD2,...
: lista de métodos RESTful para los que se debe aplicar la restricción. Puede serCREATE
oCREATE
yUPDATE
.condition
: la condición para validar la solicitud, escrita en lenguaje de expresión común (CEL). Este campo tiene una longitud máxima de 1000 caracteres. La expresión debe contener los siguientes campos y admite operadores lógicos como&&
y||
:OBJECT_NAME
: el nombre del objeto de la API de GKE que quieres restringir, en formato pascalCase. Por ejemplo,privateClusterConfig
.FIELD_NAME
: el nombre del campo de la API de GKE que quieras restringir, en formato pascalCase. Por ejemplo,enablePrivateNodes
.VALUE
: el valor del campo. En los campos booleanos, usatrue
ofalse
. En el caso de los campos de cadena, usa"STRING"
.
ACTION
: la acción que se debe llevar a cabo si se cumple la condicióncondition
. Puede serALLOW
oDENY
.DISPLAY_NAME
: nombre descriptivo de 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. Este campo tiene una longitud máxima de 2000 caracteres.
Aplica la restricción personalizada:
gcloud org-policies set-custom-constraint PATH_TO_FILE
Sustituye
PATH_TO_FILE
por la ruta del archivo de tu definición de restricción personalizada.Verifica que la restricción personalizada exista:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
El resultado debería ser similar al siguiente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= ...
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 la medida. Usa la jerarquía de recursosTrusted 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 específica, 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 tu política.Comprueba que la política exista:
gcloud org-policies list \ --RESOURCE_FLAG=RESOURCE_ID
Haz los cambios siguientes:
RESOURCE_FLAG
: el Trusted Cloud recurso en el que has aplicado la política. Por ejemplo,project
ofolder
.RESOURCE_ID
: el ID del recurso en el que has aplicado la política. Por ejemplo, el ID de tu carpeta Trusted Cloud .
Para ver una lista de argumentos, consulta
gcloud org-policies list
.El resultado debería ser similar al siguiente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG iam.disableWorkloadIdentityClusterCreation - SET CO3UkJAGEOj1qsQB custom.enableGkeAutopilot - SET COCsm5QGENiXi2E= custom.enableBinAuth - SET CJfKiZUGEJju7LUD
Ejemplo: Crear una restricción personalizada y aplicar una política
En el siguiente ejemplo se crea una restricción y una política personalizadas que requieren que todos los clústeres nuevos de un proyecto específico sean clústeres Autopilot.
Antes de empezar, debes saber lo siguiente:
- ID de tu organización
- Un ID de proyecto
Crear la restricción
Guarda el siguiente archivo como
constraint-enable-autopilot.yaml
:name: organizations/ORGANIZATION_ID/customConstraints/custom.enableGkeAutopilot resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.autopilot.enabled == false" actionType: DENY displayName: Enable GKE Autopilot description: All new clusters must be Autopilot clusters.
Define una restricción por la que, en cada clúster nuevo, si el modo de clúster no es Autopilot, se deniega la operación.
Aplica la restricción:
gcloud org-policies set-custom-constraint ~/constraint-enable-autopilot.yaml
Verifica que la restricción exista:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
El resultado debería ser similar al siguiente:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.enableGkeAutopilot DENY CREATE container.googleapis.com/Cluster Enable GKE Autopilot ...
Crear la política
Guarda el siguiente archivo como
policy-enable-autopilot.yaml
:name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot spec: rules: - enforce: true
Sustituye
PROJECT_ID
por el ID del proyecto.Aplica la política:
gcloud org-policies set-policy ~/policy-enable-autopilot.yaml
Comprueba que la política exista:
gcloud org-policies list --project=PROJECT_ID
El resultado debería ser similar al siguiente:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.enableGkeAutopilot - SET COCsm5QGENiXi2E=
Después de aplicar la política, espera unos dos minutos para que Trusted Cloud empiece a aplicarla.
Probar la política
Intenta crear un clúster estándar de GKE en el proyecto:
gcloud container clusters create org-policy-test \
--project=PROJECT_ID \
--location=CONTROL_PLANE_LOCATION \
--num-nodes=1
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto de la política.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.
El resultado es el siguiente:
Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]
Consultar ejemplos de restricciones personalizadas para casos de uso habituales
En los siguientes ejemplos se muestra la sintaxis de algunas restricciones personalizadas que pueden resultarte útiles, como la de aplicar Workload Identity Federation para GKE en clústeres nuevos. Para usar estas muestras, modifique los ejemplos según sea necesario para adaptarlos a su caso práctico específico. A continuación, aplícalos a tu organización siguiendo las instrucciones de esta página.
Descripción | Sintaxis de las restricciones |
---|---|
Solo permite crear clústeres cuando la autorización binaria está habilitada |
name: organizations/ORGANIZATION_ID/customConstraints/custom.gkeBinaryAuthorization resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.binaryAuthorization.enabled == true || resource.binaryAuthorization.evaluationMode=='PROJECT_SINGLETON_POLICY_ENFORCE'" action: ALLOW displayName: Enable GKE Binary Authorization description: All new clusters must enable Binary Authorization. |
No inhabilite la actualización automática de nodos en los grupos de nodos nuevos |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE condition: "resource.management.autoUpgrade == true" actionType: ALLOW displayName: Enable node auto-upgrade description: All node pools must have node auto-upgrade enabled. |
Habilitar Workload Identity Federation para GKE en clústeres nuevos |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableWorkloadIdentity resourceTypes: - container.googleapis.com/Cluster methodTypes: - CREATE condition: "has(resource.workloadIdentityConfig.workloadPool) || resource.workloadIdentityConfig.workloadPool.size() > 0" actionType: ALLOW displayName: Enable Workload Identity on new clusters description: All new clusters must use Workload Identity. |
No inhabilitar Cloud Logging en clústeres disponibles |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableLogging resourceTypes: - container.googleapis.com/Cluster methodTypes: - UPDATE condition: "resource.loggingService == 'none'" actionType: DENY displayName: Do not disable Cloud Logging description: You cannot disable Cloud Logging on existing GKE cluster. |
Solo permitir la creación o actualización de grupos de nodos estándar cuando los endpoints de metadatos antiguos estén inhabilitados |
name: organizations/ORGANIZATION_ID/customConstraints/custom.nodeConfigMetadata resourceTypes: - container.googleapis.com/NodePool methodTypes: - CREATE - UPDATE condition: "'disable-legacy-endpoints' in resource.config.metadata && resource.config.metadata['disable-legacy-endpoints'] == 'true'" actionType: ALLOW displayName: Disable legacy metadata endpoints description: You can only create or update node pools if you disable legacy metadata endpoints. En este ejemplo de restricción se muestra cómo definir una restricción personalizada en un valor de mapa. El campo |
Siguientes pasos
- Consulta información detallada sobre las restricciones.
- Consulta las opciones adicionales que puedes usar para personalizar tus políticas.
- Consulta cómo reforzar la seguridad de tu clúster.
- Consulta cómo inhabilitar el puerto de solo lectura de kubelet en clústeres de GKE.
- Consulta cómo definir políticas de organización basadas en etiquetas.
- Consulta cómo requerir que VM Manager esté habilitado en todos los nodos de GKE.