Restringir repositorios remotos

En este documento se explica cómo usar el servicio Organization Policy para restringir el conjunto de repositorios de Git remotos de terceros a los que pueden conectarse los repositorios de Dataform.

Antes de empezar

Antes de definir o editar la política dataform.restrictGitRemotes, busca las URLs completas de los repositorios de Git remotos que quieras incluir en la lista de permitidos.

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 Google Cloud consola, ve a la página Dataform.

    Ir a Dataform

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

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

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

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

Roles obligatorios

Para obtener los permisos que necesitas para gestionar las 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 la organización. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para gestionar las políticas de la organización. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar las políticas de la organización, se necesitan los siguientes permisos:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Acerca de la restricción de repositorios de Git remotos

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

Puede que quieras restringir el conjunto de repositorios remotos a los que pueden conectarse los repositorios de Dataform para evitar que agentes maliciosos accedan a tu base de código de Dataform y a tus tokens de acceso a través de copias desprotegidas de tu repositorio.

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

La restricción para limitar los repositorios de Git remotos en Dataform es la siguiente:

constraints/dataform.restrictGitRemotes

Para usar la restricción, crea una política de organización con una allowedValues lista de URLs de repositorios de Git remotos que puedan conectarse 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 que ya existían.

Cuando se aplica la política de la organización, el repositorio de Dataform solo puede conectarse a los repositorios de Git remotos que se incluyan en la lista allowedValues. No se permite que los repositorios de Git remotos que no estén definidos explícitamente en la política de la organización se conecten a un repositorio de Dataform.

Si no defines la política dataform.restrictGitRemotes, no se restringirá la comunicación entre los repositorios de Dataform y los repositorios de Git remotos.

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

Allow all
Los repositorios de Dataform pueden conectarse a todas las URLs de repositorios remotos. Selecciona esta opción si tu organización no quiere bloquear ninguna comunicación con repositorios remotos. Como alternativa, para permitir todas las URLs de repositorios remotos, puedes dejar sin definir la política de la organización.
allowedValues lista de URLs
Los repositorios de Dataform solo pueden conectarse a los repositorios remotos incluidos en la lista de permitidos. Selecciona esta opción para evitar la filtración externa de datos.
Deny all
Los repositorios de Dataform no pueden conectarse a ninguna URL remota. Seleccione esta opción si su organización quiere bloquear todas las comunicaciones y usar repositorios de Dataform.

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

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

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

  • Esta restricción acepta allowedValues, que bloquea la conexión a todos los demás repositorios de Git remotos, o Deny all. El valor predeterminado es Allow all. Si no se define una política de organización, se permite la comunicación con todos los repositorios de Git remotos. Te recomendamos que definas la política de organización como allowedValues.

  • Tú o un administrador con los permisos necesarios podéis gestionar y mantener la política. Asegúrate de que se comunique información sobre el administrador de políticas en tu organización.

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

Consola

  1. Ve a la página /Organizational Policies/Organization Policies (Políticas de la organización).

    Ir a Políticas de organización

  2. Si es necesario, selecciona la organización que quieras en el menú desplegable del proyecto.
  3. Haz clic en Restringir remotos de Git para repositorios en Dataform.
  4. Haz clic en Gestionar política. Si no puedes hacer clic en el botón Gestionar política, significa que no tienes los permisos adecuados.
  5. Selecciona Personalizar para definir la política de la organización en repositorios de Git remotos específicos.

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

  6. Seleccione la implementación de la política y el tipo de política que necesite.

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

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

  9. Haz clic en Nuevo valor de política e introduce las URLs completas de los repositorios de Git remotos que necesites.

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

gcloud

Para definir una restricción en repositorios de Git remotos, primero necesitas el ID de tu organización. Para encontrar el ID de organización, ejecuta el comando organizations list y busca el ID numérico en la respuesta:

gcloud organizations list

La CLI de gcloud devuelve una lista de organizaciones con el siguiente formato:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

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

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

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

Si no quieres que los repositorios de Dataform puedan conectarse a ningún repositorio de Git remoto, puedes definir una política de organización con denyAll definido como true:

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

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

API

Usa la API setOrgPolicy() para definir la restricción. Dataform puede conectarse a las URLs de repositorios de Git remotos de 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 se pueden conectar repositorios de datos de Dataform de repositorios de Git remotos seleccionados:

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

donde ORGANIZATION_ID es el ID numérico de la organización.

Ahora, en el cuerpo de la solicitud, proporciona la política de organización que quieras 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 puedan conectarse a ningún repositorio de Git remoto, puedes definir una política de organización con el valor denyAll 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á definida, 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

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

Si se define una política de organización a nivel de proyecto, se anula o se combina con la política de organización a nivel de organización. En caso de fusión, denyAll tiene prioridad sobre allowedValues. Por ejemplo, si la política de organización a nivel de organización se define como denyAll y la política combinada a nivel de proyecto incluye una URL de repositorio remoto en la lista allowedValues, Dataform no podrá conectarse al repositorio remoto. En ese caso, la política de la organización a nivel de proyecto debe anular la política a nivel de organización para que Dataform pueda conectarse al repositorio remoto. Para obtener más información sobre la jerarquía de la política de organización, consulta Información sobre la evaluación de la jerarquía.

Consola

Sigue el mismo proceso que se describe en Definir la restricción de la política de la organización a nivel de organización, pero elige el proyecto que quieras en el selector de proyectos en lugar de la organización.

Selector de proyectos.

gcloud

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

Crea un archivo JSON con el siguiente formato:

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

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

A continuación, envía el archivo con tu solicitud:

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

API

Usa la API setOrgPolicy() para definir la restricción. Dataform puede conectarse a las URLs de repositorios de Git remotos de 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 solo pueden conectarse a los repositorios de Git remotos seleccionados y la política constraints/dataform.restrictGitRemotes aún no se ha definido:

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 que quieres aplicar a esta restricción:

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

Sustituye PROJECT_ID_OR_NUMBER por el ID o el número del proyecto de esta solicitud.

A continuación, se muestra una solicitud para aplicar la restricción dataform.restrictGitRemotes a una organización en la que los repositorios de Dataform solo pueden conectarse a los repositorios de Git remotos seleccionados y en la que ya se ha definido la política constraints/dataform.restrictGitRemotes:

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 que quieres aplicar a esta restricción:

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

Sustituye PROJECT_ID_OR_NUMBER por el ID o el número del proyecto de esta solicitud.

Prácticas recomendadas para incluir en una lista de permitidos los repositorios remotos de Git

  • Para mitigar el riesgo de exfiltración de datos, define explícitamente la restricción dataform.restrictGitRemotes para incluir en una lista de permitidos una selección de repositorios Git remotos de confianza.

  • Si solo usas repositorios de Dataform que no están conectados a repositorios de Git remotos, define 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 se restringe la conexión a los repositorios de Git remotos que se incluyan en la lista deniedValues. Esto podría suponer un problema de seguridad si quieres controlar exactamente a qué repositorios Git remotos puede conectarse Dataform. Si quieres quitar determinados repositorios Git remotos de la lista allowedValues, actualiza la política de organización para eliminarlos de la lista allowedValues en lugar de colocar el elemento remoto en la lista deniedValues en una jerarquía inferior.

  • Si quieres definir una política de organización en una gran parte de la jerarquía de recursos, pero quieres excluir determinados proyectos, restaura la política de organización predeterminada mediante el método setOrgPolicy especificando el objeto restoreDefault para permitir que todos los repositorios de Dataform de los proyectos se conecten a repositorios de Git remotos. La configuración predeterminada no afecta a las políticas que ya se hayan aplicado a los proyectos.

  • Usa Organization Policy junto con roles de gestión de identidades y accesos para controlar mejor el acceso a tu base de código de Dataform.

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

  • Antes de definir la política dataform.restrictGitRemotes, asegúrate de que se haya comunicado a tu organización la política y el administrador correspondiente. Tú o un administrador con los permisos necesarios podéis gestionar y mantener la política.

Siguientes pasos