Configura políticas de la organización

Las políticas de la organización te brindan un control centralizado y programático de los recursos de tu organización. Como administrador de políticas de la organización, puedes configurar políticas en toda la organización para obtener los siguientes beneficios:

  • Centralizar el control para configurar restricciones sobre cómo usar los recursos de tu organización
  • Definir y establecer barreras de seguridad para que los equipos de desarrollo se mantengan dentro de los límites de cumplimiento.
  • Ayudar a los propietarios de proyectos y a sus equipos a avanzar con rapidez sin infringir el cumplimiento

Google Distributed Cloud (GDC) aislado no proporciona una IU de consola ni una CLI dedicada para crear y administrar políticas de la organización. Debes usar la API de Kubernetes o la CLI de kubectl.

Diferencias con la administración de identidades y accesos

La administración de identidades y accesos (IAM) y las políticas de la organización cumplen funciones complementarias de acceso y administración:

  • IAM se enfoca en otorgar permisos. Define quién (miembros, como usuarios, grupos o cuentas de servicio) puede realizar qué acciones (roles) en qué recursos (alcance del recurso). Los permisos otorgados a través de los roles de IAM son aditivos y no tienen reglas de denegación.
  • Las políticas de la organización se enfocan en establecer barreras de seguridad. Permiten que los administradores configuren restricciones programáticas en los recursos de toda la organización, como inhabilitar servicios específicos o restringir las modificaciones de recursos según los atributos del sujeto con el control de acceso basado en atributos (ABAC). Las políticas de la organización tienen prioridad para bloquear operaciones, incluso si un miembro tiene un rol de IAM.

Antes de comenzar

Antes de configurar las políticas de la organización, debes solicitar los permisos necesarios y preparar tu entorno.

Solicita roles de IAM

Comunícate con el administrador de la organización de IAM para solicitar los siguientes roles de IAM según las tareas que debas realizar:

  • Administrador de políticas de servicio restringido (gdchrestrictedservice-policy-admin): Crea, actualiza y borra políticas de servicio restringido.
  • Administrador de políticas de restricción por atributos (gdchrestrictbyattributes-policy-admin): Crea, actualiza y borra políticas de control de acceso basado en atributos.

Prepara el entorno

Configura una política

Puedes configurar dos tipos de políticas de la organización en GDC:

  • Política de servicio restringido (GDCHRestrictedService): Restringe los servicios que puedes usar o modificar en un clúster.
  • Política de control de acceso basado en atributos (GDCHRestrictByAttributes): restringe de forma condicional el acceso a los recursos de un clúster según los atributos del sujeto asignados desde tu proveedor de identidad.

Configura una política de servicio restringido

El tipo de política GDCHRestrictedService te permite restringir los servicios que puedes usar o modificar en un clúster bloqueando APIs específicas, como restringir un servicio a determinados proyectos o bloquear el acceso a un servicio nuevo mientras lo pruebas. Crea esta política en el mismo clúster que los recursos del servicio. Puedes crear varias instancias de política en un clúster para diferentes servicios o proyectos.

GDCHRestrictedService admite las operaciones CREATE, UPDATE y DELETE. Para restringir las operaciones de lectura de GET y LIST, usa vinculaciones de roles de IAM para otorgar y revocar el acceso.

Configura una política de servicio restringido:

  1. Define el manifiesto de la política:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GDCHRestrictedService
    metadata:
      name: POLICY_NAME
    spec:
      match:
        kinds:
          - apiGroups:
              - "API_GROUP"
            kinds:
              - "KIND"
      parameters:
        disabledOperations:
          - DISABLED_OPERATION
    

    Reemplaza lo siguiente:

    • POLICY_NAME: Es el nombre de la política de la organización.

    • API_GROUP: Es el grupo de APIs del servicio que se restringirá, como se indica en la siguiente tabla de servicios compatibles.

    • KIND: Es el tipo de recurso que se restringirá, como se indica en la siguiente tabla de servicios compatibles.

    • DISABLED_OPERATION: son los grupos de operaciones que bloquea esta política. Los valores permitidos son CREATE, UPDATE y DELETE. El valor predeterminado para el campo disabledOperations es *. Para inhabilitar por completo un servicio, enumera CREATE, UPDATE y DELETE (y especifica todos sus tipos).

    De forma predeterminada, la política se aplica a todos los espacios de nombres del clúster. Para definir el alcance de la política en espacios de nombres o proyectos específicos, consulta Define el alcance de una política de la organización dentro de un clúster.

    La política GDCHRestrictedService admite el siguiente subconjunto de servicios en GDC:

    Servicio Grupo de APIs kinds
    Marketplace marketplace.gdc.goog MarketplaceService
    Vertex AI Workbench aiplatform.gdc.goog Notebook
    Servicio de base de datos: Postgres postgresql.dbadmin.gdc.goog
    • DBCluster
    • BackupPlan
    • Import
    • Restore
    Transfer Appliance system.gpc.gke.io TransferApplianceRequest
    Copia de seguridad backup.gdc.goog BackupRepositoryManager
    Contenedor de Dataproc para Spark (servicio de Marketplace) sparkoperator.k8s.io SparkApplication

    Si un servicio enumera varios tipos en la tabla (como Servicio de base de datos), puedes especificar solo los tipos individuales que deseas restringir. Por ejemplo, puedes bloquear las operaciones Restore y, al mismo tiempo, permitir las operaciones DBCluster.

    En el siguiente ejemplo, se restringen las actualizaciones de los servicios de Marketplace:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: GDCHRestrictedService
    metadata:
      name: no-update-to-marketplace-service
    spec:
      match:
        kinds:
        - apiGroups:
          - "marketplace.gdc.goog"
          kinds:
          - MarketplaceService
      parameters:
        disabledOperations:
          - "UPDATE"
    
  2. Aplica la política con la CLI de kubectl:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Reemplaza lo siguiente:

    • CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que deseas aplicar la política.
    • POLICY_NAME: Es el nombre del archivo de la política de la organización.

Configura una política de control de acceso basado en atributos

El tipo de política GDCHRestrictByAttributes te permite crear políticas de ABAC para restringir de forma condicional el acceso a los recursos según los atributos del sujeto. Por ejemplo, puedes usar este tipo de política para restringir las operaciones de escritura o modificación en los buckets de almacenamiento, de modo que solo los usuarios o las cuentas de servicio con atributos de identidad específicos (como citizenship=USA o citizenship=UK) puedan realizarlas.

Crea esta política en el mismo clúster que los recursos. Puedes crear varias instancias de política en un clúster para diferentes recursos o proyectos.

Configura una política de control de acceso basado en atributos:

  1. Crea un archivo JSON de parche para asignar atributos de identidad personalizados a tu recurso IdentityProviderConfig:

    cat <<EOF > attributeMapping-patch.json
    {
      "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]"
    }
    EOF
    

    Reemplaza CUSTOM_ATTRIBUTE por el nombre del atributo de identidad que se asignará, como citizenship.

  2. Aplica un parche al recurso IdentityProviderConfig en el espacio de nombres platform:

    kubectl --kubeconfig CLUSTER_KUBECONFIG patch \
        IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \
        -n platform --type=json \
        -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'
    

    Reemplaza lo siguiente:

    • CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que reside el proveedor de identidad.
    • IDENTITY_PROVIDER_CONFIG_NAME: Es el nombre del recurso IdentityProviderConfig.
  3. Define el manifiesto de la política:

    apiVersion: constraints.global.gatekeeper.sh/v1beta1
    kind: GDCHRestrictByAttributes
    metadata:
      name: POLICY_NAME
    spec:
      match:
        kinds:
          - apiGroups:
              - "API_GROUP"
            kinds:
              - "KIND"
      parameters:
        attributes:
          - CUSTOM_ATTRIBUTE
        attributeValues:
          - ALLOWED_ATTRIBUTE_VALUE
    

    Reemplaza lo siguiente:

    • POLICY_NAME: Es el nombre de la política de la organización.

    • API_GROUP: Es el grupo de API de los recursos que se restringirán, como object.gdc.goog.

    • KIND: Es el tipo de recurso que se restringirá, como Bucket.

    • CUSTOM_ATTRIBUTE: Es el atributo de asunto personalizado asignado desde el proveedor de identidad, como citizenship.

    • ALLOWED_ATTRIBUTE_VALUE: Es el valor permitido para el atributo personalizado, como USA. Se rechazan las solicitudes de sujetos cuyo atributo no coincide con uno de los valores permitidos.

    De forma predeterminada, la política se aplica a todos los espacios de nombres del clúster. Para definir el alcance de la política en espacios de nombres o proyectos específicos, consulta Define el alcance de una política de la organización dentro de un clúster.

    En el siguiente ejemplo, se restringe la modificación de los recursos Bucket en el espacio de nombres project-foo a los sujetos con el atributo citizenship=USA o citizenship=UK:

    apiVersion: constraints.global.gatekeeper.sh/v1beta1
    kind: GDCHRestrictByAttributes
    metadata:
      name: restrict-by-citizenship
    spec:
      match:
        scope: Namespaced
        kinds:
          - apiGroups:
              - "object.gdc.goog"
            kinds:
              - Bucket
        namespaces:
          - project-foo
      parameters:
        attributes:
          - "citizenship"
        attributeValues:
          - "USA"
          - "UK"
    
  4. Aplica la política con la CLI de kubectl:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Reemplaza lo siguiente:

    • CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que deseas aplicar la política.
    • POLICY_NAME: Es el nombre del archivo de la política de la organización.

Definir el alcance de una política de la organización dentro de un clúster

Cuando definas una política de la organización, decide si debe afectar a todos los espacios de nombres, solo a algunos específicos o a todos, excepto a una lista determinada. Para lograrlo, usa una combinación de los parámetros .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces y .spec.match.scope de la definición de la política.

Lee la sección de coincidencia de la política de la organización para obtener más información sobre estos parámetros. Por ejemplo, para permitir la creación de bases de datos solo en espacios de nombres que tengan la etiqueta owner: dba-team, crea la siguiente política:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: db-restricted-to-dbas
spec:
  match:
    scope: Namespaced
    namespaceSelector:
      matchExpressions:
      # We are restricting the use of the service in namespaces that
      # don't have the owner: dba-team label
      - key: owner
        operator: NotIn
        values:
        - dba-team
    kinds:
    - apiGroups:
      - "postgresql.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
      - Restore
  parameters:
    disabledOperations:
      - "UPDATE"
      - "CREATE"
      - "DELETE"

Revierte una política existente

Para dejar de aplicar una política existente, bórrala con la CLI de kubectl. Usa un archivo kubeconfig que te otorgue acceso al clúster en el que se define la política y el rol de IAM correspondiente al tipo de política (como gdchrestrictedservice-policy-admin o gdchrestrictbyattributes-policy-admin).

Borra una política de la organización:

kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
    POLICY_TYPE/POLICY_NAME

Reemplaza lo siguiente:

  • CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster en el que reside la política de la organización.

  • POLICY_TYPE: el tipo de política de la organización que se borrará, como GDCHRestrictedService o GDCHRestrictByAttributes

  • POLICY_NAME: Es el nombre de la política de la organización que se borrará.

Prueba una política en un modo de auditoría

Puedes probar una política sin aplicarla. Prueba una política para asegurarte de que no interrumpa los sistemas existentes antes de implementarla o para obtener una estimación de qué tan extendido está un comportamiento. Para agregar una prueba, agrega un enforcementAction a la definición de tu política. Hay tres valores posibles para este parámetro:

  • deny: Se aplica la política. Esta es la configuración predeterminada.
  • dryrun: Se permite la acción, pero puedes ver que hay un incumplimiento de política tanto en los registros de auditoría como en el estado de la política. Examina el incumplimiento con kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.
  • warn: Es equivalente a dryrun, excepto que la prueba también muestra una advertencia en respuesta a la solicitud que activó un incumplimiento de política.

Por ejemplo, para probar una política que inhabilita Marketplace, crea la siguiente política:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: disable-marketplace-service-project-alice
spec:
  enforcementAction: warn
  match:
    kinds:
      - apiGroups: ["marketplace.gdc.goog"]
        kinds: ["MarketplaceService"]