Crear y gestionar restricciones personalizadas

Esta página le muestra cómo habilitar y usar restricciones personalizadas dentro de su entorno de clústeres conectados a GKE. Google CloudEl servicio de políticas de la organización le ayuda a administrar las configuraciones de recursos y a crear barreras de protección en su entorno de nube.

Descripción general

Con políticas de organización personalizadas, puede crear políticas de recursos granulares en entornos multicloud de GKE para satisfacer los requisitos específicos de seguridad y cumplimiento normativo de su organización. También puede crear políticas de organización en modo de prueba para probar nuevas políticas sin afectar sus cargas de trabajo de producción.

Para obtener más información sobre las políticas de la organización, consulte Introducción al Servicio de políticas de la organización .

Antes de empezar

Antes de comenzar, asegúrese de comprender los siguientes temas:

Herencia de políticas

De forma predeterminada, las políticas de la organización las heredan los descendientes de los recursos en los que se aplican. Por ejemplo, si se aplica una política en una organización, Google Cloud Aplica la política 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, tenga en cuenta las siguientes limitaciones:

  • Las restricciones personalizadas solo se pueden aplicar en los métodos CREATE o UPDATE para los recursos de clústeres adjuntos a GKE.
  • Las restricciones personalizadas recién implementadas no se aplican automáticamente a los recursos existentes. Debe actualizar los recursos existentes para que se apliquen. Para encontrar recursos existentes que deban actualizarse, puede implementar una política de organización de prueba .
  • Para crear restricciones y aplicar políticas de la organización, necesita el rol de IAM de Administrador de políticas de la organización ( roles/orgpolicy.policyAdmin ) en su Google Cloud Organización. Para obtener más información sobre los permisos necesarios para administrar políticas de la organización con restricciones personalizadas, consulte Roles requeridos .

Precios

Las políticas organizativas y las restricciones personalizadas se ofrecen sin cargo.

Crear restricciones personalizadas

Las restricciones personalizadas se deben especificar mediante los campos en la especificación de recursos de la API AttachedCluster, excluyendo los campos que se describen como "Solo salida".

Crear una restricción personalizada

Para crear una restricción personalizada, defínala en un archivo YAML y aplíquela en su organización mediante la CLI de Google Cloud. Esta restricción debe encapsular la política específica que desea aplicar en los recursos de los clústeres conectados a GKE.

  1. Cree un archivo YAML para la restricción personalizada:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - gkemulticloud.googleapis.com/AttachedCluster
    methodTypes: 
    - CREATE
    condition: \"CONDITION\"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    Reemplace lo siguiente:

    • ORGANIZATION_ID : el ID de su organización, como por ejemplo 123456789 .

    • CONSTRAINT_NAME : el nombre de la nueva restricción personalizada. Una restricción personalizada debe empezar por custom. " y solo puede incluir 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 : una condición que se escribe contra una representación de un recurso de clúster asociado. Las condiciones se escriben en lenguaje de expresión común (CEL) . Este campo tiene una longitud máxima de 1000 caracteres. Por ejemplo, condition: "key" in resource.annotations && resource.annotations.key == "created-by" .

    • ACTION : la acción a tomar si se cumple la condición. Puede ser ALLOW o DENY .

    • DISPLAY_NAME : nombre para mostrar 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; 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, consulte Definición de restricciones personalizadas .

Asocie la restricción con sus recursos

Después de haber creado el archivo YAML para una nueva restricción personalizada, debe configurarlo para que la restricción esté disponible para las políticas de la organización.

  1. Para configurar una restricción personalizada, utilice el comando gcloud org-policies set-custom-constraint :

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Reemplace PATH_TO_FILE con la ruta de su definición YAML de restricción personalizada.

  2. Para verificar que se haya creado la restricción personalizada, utilice el comando gcloud org-policies list-custom-constraints :

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    La salida enumera las políticas creadas:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AttachedCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

Aplicar la restricción personalizada

Para aplicar la nueva restricción personalizada, cree una política de organización que haga referencia a la restricción y luego aplique la política de organización.

  1. Cree un archivo YAML para la política de la organización:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    Reemplace lo siguiente:

    • RESOURCE_HIERARCHY : la ubicación de la nueva política, que afecta el alcance de la aplicación. Utilice Google Cloud Jerarquía de recursos como guía. Por ejemplo, si desea aplicar la política en un proyecto específico, utilice projects/ PROJECT_ID . Para aplicar la política en una organización específica, utilice organizations/ ORGANIZATION_ID .

    • POLICY_NAME : el nombre de la nueva política.

  2. Hacer cumplir la política:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Reemplace PATH_TO_POLICY con la ruta a su archivo de definición de política.

  3. Verifique que la política exista:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    Reemplace lo siguiente:

    • RESOURCE_FLAG : el Google Cloud Recurso donde se aplicó la política. Por ejemplo, un proyecto u organización.

    • RESOURCE_ID : el ID del recurso donde se aplicó la política. Por ejemplo, el ID del proyecto o el ID de la organización.

    La salida es similar a la siguiente:

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

Poner a prueba la política

Pruebe la política de la organización registrando un clúster EKS en un proyecto restringido.

  1. Registrar un clúster EKS en un proyecto restringido.

    gcloud container attached clusters register CLUSTER_NAME \
      --location=GOOGLE_CLOUD_REGION \
      --fleet-project=PROJECT_NUMBER \
      --platform-version=PLATFORM_VERSION \
      --distribution=eks \
      --issuer-url=ISSUER_URL \
      --context=KUBECONFIG_CONTEXT \
      --kubeconfig=KUBECONFIG_PATH
    
    
  2. La salida es similar a la siguiente:

    ERROR: (gcloud.container.attached.clusters.register) 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