Limiter les dépôts distants

Ce document explique comment utiliser le service de règles d'administration de l'organisation pour limiter le pool de dépôts Git distants tiers auxquels les dépôts Dataform peuvent se connecter.

Avant de commencer

Avant de définir ou de modifier la stratégie dataform.restrictGitRemotes, recherchez les URL complètes des dépôts Git distants que vous souhaitez ajouter à la liste d'autorisation.

Pour trouver l'URL complète d'un dépôt Git distant déjà connecté à un dépôt Dataform, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Dataform page.

    Accéder à Dataform

  2. Sélectionnez un dépôt, puis cliquez sur Paramètres.

    N'oubliez pas que les URL des dépôts distants affichées sur la page Dataform sont raccourcies et ne peuvent pas être utilisées dans le règlement dataform.restrictGitRemotes.

  3. Sur la page Settings (Paramètres), sous Git connection settings (Paramètres de connexion Git), copiez la valeur Repository source (Source du dépôt).

    La valeur Source du dépôt correspond à l'URL complète du dépôt distant. Vous pouvez utiliser cette URL dans la règle dataform.restrictGitRemotes.

Rôles requis

Pour obtenir les autorisations nécessaires pour gérer des règles d'administration, demandez à votre administrateur de vous accorder le rôle IAM Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) dans l'organisation. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour gérer les règles d'administration. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer les règles d'administration :

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

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

À propos de la restriction des dépôts Git distants

Vous pouvez associer un dépôt Dataform à un dépôt GitHub ou GitLab.

Vous pouvez limiter le pool de dépôts distants auxquels les dépôts Dataform peuvent se connecter afin d'empêcher les acteurs malveillants d'accéder à votre codebase Dataform et à vos jetons d'accès via des copies non protégées de votre dépôt.

Vous pouvez utiliser le service de règles d'administration pour créer une règle d'administration qui limite les URL de dépôt Git auxquelles Dataform peut se connecter.

La contrainte pour limiter les dépôts Git distants dans Dataform est la suivante:

constraints/dataform.restrictGitRemotes

Pour utiliser la contrainte, vous devez créer une règle d'organisation avec une liste allowedValues d'URL de dépôts Git distants pouvant se connecter à un dépôt Dataform. Les dépôts Git distants sont identifiés par leur adresse URL complète.

La règle dataform.restrictGitRemotes a un effet rétroactif, ce qui signifie que la contrainte affecte les dépôts Dataform préexistants.

Lorsque la règle d'administration de l'organisation est en place, le dépôt Dataform ne peut se connecter qu'aux dépôts Git distants listés dans la liste allowedValues. Les dépôts Git distants qui ne sont pas explicitement définis dans le règlement de l'organisation ne sont pas autorisés à se connecter à un dépôt Dataform.

Si vous ne définissez pas la règle dataform.restrictGitRemotes, la communication entre les dépôts Dataform et les dépôts Git distants n'est pas limitée.

Vous pouvez utiliser la règle dataform.restrictGitRemotes de plusieurs manières:

Allow all
Les dépôts Dataform sont autorisés à se connecter à toutes les URL de dépôts distants. Sélectionnez cette option si votre organisation ne souhaite pas bloquer toute communication avec des dépôts distants. Pour autoriser toutes les URL de dépôts distants, vous pouvez également laisser la stratégie de l'organisation non définie.
Liste d'URL allowedValues
Les dépôts Dataform ne sont autorisés à se connecter qu'aux dépôts distants de la liste d'autorisation. Sélectionnez cette option pour éviter l'exfiltration de données.
Deny all
Les dépôts Dataform ne sont pas autorisés à se connecter à des URL distantes. Sélectionnez cette option si votre organisation souhaite bloquer toutes les communications et utiliser des dépôts Dataform.

Spécifications pour ajouter des dépôts Git distants à la liste d'autorisation

  • Vous ne pouvez appliquer cette contrainte de liste qu'aux dépôts GitHub et GitLab.

  • La règle d'administration de l'organisation est appliquée rétroactivement et affecte les dépôts Dataform existants.

  • Cette contrainte accepte allowedValues, qui bloque la connexion à tous les autres dépôts Git distants, ou Deny all. La valeur par défaut est Allow all. Une stratégie d'organisation non définie autorise la communication avec tous les dépôts Git distants. Nous vous recommandons de définir la règle d'administration sur allowedValues.

  • C'est à vous ou à un administrateur disposant des autorisations nécessaires de gérer et d'administrer la règle. Assurez-vous de communiquer l'identité de l'administrateur des règles au sein de votre organisation.

Définir la contrainte de règle d'administration au niveau de l'organisation

Console

  1. Accédez à la page /Organizational Policies/Organization Policies (Règles d'administration/Règles d'administration).

    Accéder à la page "Règles d'administration"

  2. Si nécessaire, sélectionnez l'organisation requise dans le menu déroulant du projet.
  3. Cliquez sur Limiter les dépôts Git distants pour les dépôts dans Dataform.
  4. Cliquez sur Gérer la règle. Si vous ne pouvez pas cliquer sur le bouton Gérer la stratégie, cela signifie que vous ne disposez pas des autorisations appropriées.
  5. Sélectionnez Personnaliser pour définir la règle de l'organisation pour des dépôts Git distants spécifiques.

    Option de personnalisation sur la page de modification de la règle d'administration.

  6. Sélectionnez les valeurs appropriées dans Application des règles et Type de règle.

  7. Pour Valeurs de règles, sélectionnez Personnalisé.

  8. Saisissez l'URL complète d'un dépôt Git distant.

  9. Cliquez sur Nouvelle valeur de règle et saisissez les URL complètes des dépôts Git distants si nécessaire.

  10. Cliquez sur Enregistrer pour appliquer la contrainte.

gcloud

Pour définir une contrainte pour les dépôts Git distants, vous devez d'abord disposer de l'ID de votre organisation. Vous pouvez trouver l'ID de l'organisation en exécutant la commande organizations list et en recherchant l'ID numérique dans la réponse :

gcloud organizations list

gcloud CLI renvoie une liste d'organisations au format suivant :

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

Exécutez la commande gcloud resource-manager org-policies set-policy pour définir la règle de l'organisation. Vous devez fournir votre règle sous la forme d'un fichier JSON ou YAML. Créez un fichier JSON au format suivant :

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

Remplacez ORGANIZATION_ID par l'ID numérique de l'organisation.

Si vous ne souhaitez pas que les dépôts Dataform puissent se connecter à des dépôts Git distants, vous pouvez définir une règle d'organisation avec denyAll défini sur true:

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

Remplacez ORGANIZATION_ID par l'ID numérique de l'organisation.

API

Utilisez l'API setOrgPolicy() pour définir votre contrainte. Dataform est autorisé à se connecter aux URL des dépôts Git distants de la liste allowedValue que vous spécifiez.

Par exemple, voici une requête permettant d'appliquer la contrainte dataform.restrictGitRemotes à une organisation à laquelle les dépôts Dataform peuvent se connecter à certains dépôts Git distants:

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

ORGANIZATION_ID est l'ID numérique de l'organisation.

Dans le corps de votre requête, indiquez la règle d'administration souhaitée pour cette contrainte:

{
  "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 vous ne souhaitez pas que les dépôts Dataform puissent se connecter à des dépôts Git distants, vous pouvez définir une règle d'organisation avec denyAll défini sur 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 règle d'administration est déjà définie, vous devez exécuter la requête suivante avec la définition de la règle d'administration en tant que corps de la requête:

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

Définir la règle d'administration au niveau du projet

Définir une règle d'administration au niveau du projet remplace ou fusionne avec la règle d'administration au niveau de l'organisation. En cas de fusion, denyAll est prioritaire sur allowedValues. Par exemple, si la stratégie de l'organisation au niveau de l'organisation est définie sur denyAll et que la stratégie fusionnée au niveau du projet liste une URL de dépôt distant dans la liste allowedValues, Dataform n'est pas autorisé à se connecter au dépôt distant. Dans ce cas, la règle d'administration de l'organisation au niveau du projet doit remplacer la règle au niveau de l'organisation afin que Dataform puisse se connecter au dépôt distant. Pour en savoir plus sur la hiérarchie des règles d'administration, consultez la page Comprendre le processus d'évaluation hiérarchique.

Console

Suivez la même procédure que celle décrite à la section Définir la contrainte de règle d'administration au niveau de l'organisation en choisissant le projet souhaité dans le sélecteur de projet plutôt que via le sélecteur d'organisation.

Sélecteur de projet

gcloud

Exécutez la commande gcloud resource-manager org-policies set-policy pour définir la règle de l'organisation. Vous devez fournir votre règle sous la forme d'un fichier JSON ou YAML.

Créez un fichier JSON au format suivant :

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

Remplacez PROJECT_ID_OR_NUMBER par l'ID ou le numéro du projet pour cette règle d'organisation.

Ensuite, transmettez le fichier avec votre requête :

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

API

Utilisez l'API setOrgPolicy() pour définir votre contrainte. Dataform est autorisé à se connecter aux URL des dépôts Git distants de la liste allowedValue que vous spécifiez.

Par exemple, voici une requête visant à appliquer la contrainte dataform.restrictGitRemotes à une organisation où les dépôts Dataform ne peuvent se connecter qu'aux dépôts Git distants sélectionnés, et la règle constraints/dataform.restrictGitRemotes n'est pas encore définie:

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

Le corps de la requête contient la règle d'administration souhaitée pour cette contrainte:

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

Remplacez PROJECT_ID_OR_NUMBER par l'ID ou le numéro du projet pour cette requête.

Voici une requête visant à appliquer la contrainte dataform.restrictGitRemotes à une organisation où les dépôts Dataform ne peuvent se connecter qu'aux dépôts Git distants sélectionnés, et où la règle constraints/dataform.restrictGitRemotes est déjà définie:

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

Le corps de la requête contient la règle d'administration souhaitée pour cette contrainte:

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

Remplacez PROJECT_ID_OR_NUMBER par l'ID ou le numéro du projet pour cette requête.

Bonnes pratiques pour ajouter des dépôts distants à la liste d'autorisation

  • Pour limiter le risque d'exfiltration des données, définissez explicitement la contrainte dataform.restrictGitRemotes pour ajouter à la liste d'autorisation une sélection de dépôts Git distants approuvés.

  • Si vous n'utilisez que des dépôts Dataform qui ne sont pas connectés à des dépôts Git distants, définissez la contrainte dataform.restrictGitRemotes sur Deny All.

  • Évitez d'utiliser la liste deniedValues avec cette contrainte. Si vous définissez des valeurs dans la liste deniedValues, cela signifie que seules les connexions aux dépôts Git distants de la liste deniedValues sont limitées. Cela peut poser un problème de sécurité si vous souhaitez contrôler exactement à quels dépôts Git distants Dataform peut se connecter. Si vous souhaitez supprimer certains dépôts Git distants de la liste allowedValues, mettez à jour la règle d'administration existante pour les supprimer de la liste allowedValues plutôt que de les ajouter à la liste deniedValues à un niveau hiérarchique inférieur.

  • Si vous souhaitez définir une règle d'administration sur une grande partie de la hiérarchie des ressources, mais exclure certains projets, restaurez la règle d'administration par défaut à l'aide de la méthode setOrgPolicy. Pour ce faire, spécifiez l'objet restoreDefault pour que tous les dépôts Dataform des projets puissent être connectés à des dépôts Git distants. Les règles actuellement en place pour les projets ne sont pas affectées par le paramètre par défaut.

  • Utilisez la règle d'administration avec les rôles IAM pour mieux contrôler l'accès à votre codebase Dataform.

  • Tous les dépôts Dataform au sein de l'organisation ou du projet avec la règle d'administration activée sont soumis à cette règle. Si cela pose problème, nous vous recommandons de configurer d'autres services et produits dans un projet différent auquel la règle d'administration n'est pas appliquée, et d'utiliser si nécessaire un VPC partagé.

  • Avant de définir la règle dataform.restrictGitRemotes, assurez-vous de communiquer la règle de l'organisation et son administrateur au sein de votre organisation. C'est à vous ou à un administrateur disposant des autorisations nécessaires de gérer et d'administrer la stratégie.

Étape suivante