Restringe repositorios remotos

En este documento, se muestra cómo usar el Servicio de políticas de la organización para restringir el grupo de repositorios de Git remotos de terceros a los que se pueden conectar los repositorios de Dataform.

Antes de comenzar

Antes de configurar o editar la política dataform.restrictGitRemotes, busca las URL completas de los repositorios de Git remotos que deseas incluir en la lista de entidades permitidas.

Para encontrar la URL completa de un repositorio de Git remoto que ya está conectado a un repositorio de Dataform, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Dataform.

    Ir a Dataform

  2. Selecciona un repositorio y haz clic en Configuración.

    Ten en cuenta que las URLs de los repositorios remotos que se muestran en la página Dataform son abreviadas y no se pueden usar en la política dataform.restrictGitRemotes.

  3. En la página Configuración, en Configuración de la conexión de Git, copia el valor Fuente del repositorio.

    El valor Fuente del repositorio es la URL completa del repositorio remoto. Puedes usar esta URL en la política dataform.restrictGitRemotes.

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.

Información sobre la restricción de repositorios de Git remotos

Puedes conectar un repositorio de Dataform a un repositorio de GitHub o GitLab.

Te recomendamos restringir el grupo de repositorios remotos al que se pueden conectar los repositorios de Dataform para evitar que actores maliciosos accedan a tu base de código de Dataform y a los tokens de acceso a través de copias desprotegidas de tu repositorio.

Puedes usar el Servicio de políticas de la organización para crear una política de la organización que restrinja las URLs de repositorio de Git a las que se puede conectar Dataform.

Esta es la restricción para restringir los repositorios de Git remotos en Dataform:

constraints/dataform.restrictGitRemotes

Para usar la restricción, debes crear una política de la organización con una lista allowedValues de URLs de repositorios de Git remotos que se pueden conectar a un repositorio de Dataform. Los repositorios de Git remotos se identifican por su dirección URL completa.

La política dataform.restrictGitRemotes tiene un efecto retroactivo, lo que significa que la restricción afecta a los repositorios de Dataform preexistentes.

Cuando se implementa la política de la organización, el repositorio de Dataform solo puede conectarse a los repositorios de Git remotos que se enumeran en la lista allowedValues. Los repositorios de Git remotos que no están definidos de forma explícita en la política de la organización tienen prohibido conectarse a un repositorio de Dataform.

Si no estableces la política dataform.restrictGitRemotes, la comunicación entre los repositorios de Dataform y los repositorios remotos de Git no estará restringida.

Puedes usar la política dataform.restrictGitRemotes de las siguientes maneras:

Allow all
Los repositorios de Dataform pueden conectarse a todas las URLs de los repositorios remotos. Selecciona esta opción si tu organización no quiere bloquear ninguna comunicación con los repositorios remotos. Como alternativa, para permitir todas las URLs de repositorios remotos, puedes no establecer la política de la organización.
allowedValues lista de URLs
Los repositorios de Dataform pueden conectarse solo a los repositorios remotos permitidos. Selecciona esta opción para evitar el robo de datos.
Deny all
Los repositorios de Dataform no pueden conectarse a ninguna URL remota. Selecciona esta opción si tu organización desea bloquear todas las comunicaciones y usar los repositorios de Dataform.

Especificaciones para incluir repositorios de Git remotos en la lista de permitidos

  • Puedes aplicar esta restricción de lista solo a los repositorios de GitHub y GitLab.

  • La política de la organización se aplica de forma retroactiva y afecta a los repositorios de Dataform existentes.

  • Esta restricción acepta allowedValues, lo que bloquea la conexión a todos los demás repositorios de Git remotos o Deny all. El valor predeterminado es Allow all, una política de la organización sin configurar que permite la comunicación con todos los repositorios remotos de Git. Te recomendamos establecer la política de la organización en allowedValues.

  • Depende de ti o de un administrador con los permisos necesarios para administrar y mantener la política. Asegúrate de que la comunicación sobre el administrador de políticas dentro de tu organización.

Establece la restricción de la política de la organización a nivel de la organización

Consola

  1. Ve a la página /Políticas de la organización/Políticas de la organización.

    Ir a Políticas de la organización

  2. Si es necesario, selecciona la organización requerida en el menú desplegable del proyecto.
  3. Haz clic en Restringir controles remotos de git para repositorios en Dataform.
  4. Haz clic en Administrar política. Si no puedes hacer clic en el botón Administrar política, significa que no tienes los permisos correctos.
  5. Selecciona Personalizar (Customize) para configurar la política de la organización de repositorios de Git remotos específicos.

    Opción de personalización en la página de edición de política de la organización.

  6. Selecciona el Tipo de política y la Aplicación de política obligatorios.

  7. En Valores de la política, selecciona Personalizado.

  8. Ingresa la URL completa de un repositorio de Git remoto.

  9. Haz clic en Valor de la política nuevo y, luego, ingresa las URL completas de los repositorios de Git remotos según sea necesario.

  10. Haz clic en Guardar para aplicar la restricción.

gcloud

Si quieres establecer una restricción para los repositorios de Git remotos, primero necesitas el ID de la organización. Puedes encontrar el ID de la organización si ejecutas el comando organizations list y buscas el ID numérico en la respuesta:

gcloud organizations list

La CLI de gcloud muestra una lista de organizaciones en el siguiente formato:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

Usa el comando gcloud resource-manager org-policies set-policy para establecer la política de la organización. Debes proporcionar tu política como un archivo JSON o YAML. Crea un archivo JSON en el siguiente formato:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Reemplaza ORGANIZATION_ID por el ID numérico de la organización.

Si no quieres que los repositorios de Dataform se puedan conectar a ningún repositorio de Git remoto, puedes establecer una política de la organización con denyAll establecido en true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

Reemplaza ORGANIZATION_ID por el ID numérico de la organización.

API

Usa la API de setOrgPolicy() para definir la restricción. Dataform puede conectarse a las URLs del repositorio de Git remoto en la lista allowedValue que especifiques.

Por ejemplo, la siguiente es una solicitud para aplicar la restricción dataform.restrictGitRemotes a una organización a la que se pueden conectar los repositorios de Git remotos seleccionados de Dataform:

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

En el ejemplo anterior, ORGANIZATION_ID es el ID numérico de la organización.

Ahora, en el cuerpo de la solicitud, proporciona la política de la organización deseada para esta restricción:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

Si no quieres que los repositorios de Dataform se puedan conectar a ningún repositorio de Git remoto, puedes configurar una política de la organización con denyAll establecido en true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

Si la política de la organización ya está configurada, debes ejecutar la siguiente solicitud con la definición de la política de la organización como cuerpo de la solicitud:

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

Establece la política de la organización a nivel de proyecto

Establecer una política de la organización a nivel de proyecto anula o combina con la política de la organización a nivel de la organización. En el caso de una combinación, denyAll tiene prioridad sobre allowedValues. Por ejemplo, si la política de la organización a nivel de la organización se configura como denyAll y la política combinada a nivel de proyecto enumera una URL de repositorio remoto en la lista allowedValues, Dataform no puede conectarse al repositorio remoto. En ese caso, la política de la organización a nivel de proyecto debe anularla a nivel de la organización para que Dataform pueda conectarse al repositorio remoto. Para obtener más información sobre la jerarquía de las políticas de la organización, consulta Comprende la evaluación de la jerarquía.

Consola

Sigue el mismo proceso documentado en Configura la restricción de la política de la organización a nivel de la organización, pero elige el proyecto deseado del selector de proyectos en lugar de la organización.

Selector de proyectos.

gcloud

Usa el comando gcloud resource-manager org-policies set-policy para establecer la política de la organización. Debes proporcionar tu política como un archivo JSON o YAML.

Crea un archivo JSON en el siguiente formato:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Reemplaza PROJECT_ID_OR_NUMBER por el ID o el número del proyecto para esta política de la organización.

Luego, debes pasar el archivo con la solicitud:

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

Usa la API de setOrgPolicy() para definir la restricción. Dataform puede conectarse a las URLs del repositorio de Git remoto en la lista allowedValue que especifiques.

Por ejemplo, la siguiente es una solicitud para aplicar la restricción dataform.restrictGitRemotes a una organización en la que los repositorios de Dataform pueden conectarse solo a los repositorios de Git remotos seleccionados y la política constraints/dataform.restrictGitRemotes aún no está configurada:

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

El cuerpo de la solicitud contiene la política de la organización deseada para esta restricción:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Reemplaza PROJECT_ID_OR_NUMBER por el ID o número del proyecto para esta solicitud.

La siguiente es una solicitud para aplicar la restricción dataform.restrictGitRemotes a una organización en la que los repositorios de Dataform pueden conectarse solo a los repositorios de Git remotos seleccionados y la política constraints/dataform.restrictGitRemotes ya está configurada:

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

El cuerpo de la solicitud contiene la política de la organización deseada para esta restricción:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Reemplaza PROJECT_ID_OR_NUMBER por el ID o número del proyecto para esta solicitud.

Prácticas recomendadas para incluir controles remotos de Git en la lista de permisos

  • A fin de mitigar el riesgo de robo de datos, establece de forma explícita la restricción dataform.restrictGitRemotes para incluir en la lista de entidades permitidas una selección de repositorios de Git remotos de confianza.

  • Si solo usas repositorios de Dataform que no están conectados a repositorios de Git remotos, establece la restricción dataform.restrictGitRemotes en Deny All.

  • Evita usar la lista deniedValues con esta restricción. Si defines valores en la lista deniedValues, significa que solo los repositorios de Git remotos de la lista deniedValues tienen restricción de conexión. Esto podría ser un problema de seguridad si quieres controlar exactamente a qué repositorios remotos de Git se pueden conectar Dataform. Si deseas quitar ciertos repositorios de Git remotos de la lista allowedValues, actualiza la política de la organización existente para quitarlos de la lista allowedValues, en lugar de colocar el control remoto en la lista deniedValues en una jerarquía inferior.

  • Si deseas establecer una política de la organización en una gran parte de la jerarquía de recursos, pero eximir ciertos proyectos, restablece la política de la organización predeterminada con el método setOrgPolicy mediante la especificación del objeto restoreDefault para permitir que todos los repositorios de Dataform de los proyectos se conecten a repositorios de Git remotos. Las políticas vigentes en la actualidad para los proyectos no se ven afectadas por la configuración predeterminada.

  • Usa la Política de la organización junto con las funciones de IAM para controlar mejor el acceso a tu base de código de Dataform.

  • Todos los repositorios de Dataform dentro de la organización o el proyecto que tengan habilitada la política de la organización están sujetos a esta política. Si esto genera un problema, te recomendamos que configures otros servicios y productos en un proyecto diferente que no tenga aplicada la política de la organización y que uses una VPC compartida si es necesario.

  • Antes de establecer la política dataform.restrictGitRemotes, asegúrate de que la comunicación sobre la política de la organización y su administrador dentro de la organización. Depende de ti o de un administrador con los permisos necesarios para administrar y mantener la política.

¿Qué sigue?