Skip to main content

Configuration d'un réseau privé pour les exécuteurs hébergés sur GitHub dans votre organisation

Découvrez comment utiliser les exécuteurs hébergés par GitHub avec un réseau privé Azure dans votre organisation.

Qui peut utiliser cette fonctionnalité ?

Les propriétaires d’organisation disposant du plan GitHub Team peuvent configurer la mise en réseau privée Azure pour les exécuteurs hébergés par GitHub au niveau de l’organisation.

À propos du réseau privé Azure pour les exécuteurs hébergés par GitHub

Pour utiliser des exécuteurs hébergés par GitHubavec un VNet Azure, commencez par configurer vos ressources Azure. Créez ensuite une configuration réseau privée dans GitHub.

Les procédures suivantes vous guideront tout au long des étapes.

Pour plus d’informations sur la résolution des problèmes courants liés à l’utilisation des exécuteurs hébergés par GitHub avec un VNET Azure, consultez  »Dépannage des configurations réseau privé Azure pour les exécuteurs hébergés par GitHub dans votre organisation. ».

Configuration de vos ressources Azure

Vous allez utiliser un script pour automatiser la configuration de vos ressources Azure.

Prérequis

  • Utilisez un compte Azure avec le rôle Contributeur d’abonnement et le rôle Contributeur de réseau. Ces rôles vous permettent d’inscrire le fournisseur de ressources GitHub.Network et de déléguer le sous-réseau. Pour plus d’informations, consultez Rôles Azure intégrés sur Microsoft Learn.

  • Pour associer correctement les sous-réseaux à l’utilisateur approprié, les ressources Azure NetworkSettings doivent être créées dans les mêmes abonnements où les réseaux virtuels sont créés.

  • Pour garantir la disponibilité des ressources/résidence des données, les ressources doivent être créées dans la même région Azure.

  • Enregistrez le fichier suivant .bicep. Nommez le fichier actions-nsg-deployment.bicep.

    Le fichier .bicep que nous fournissons contient l’ensemble minimal de règles pour utiliser les exécuteurs GitHub hébergés avec le VNet Azure. Vous devrez peut-être ajouter des règles pour votre cas d’usage spécifique.

    Si vous utilisez GitHub Enterprise Cloud avec résidence des données, dans la AllowOutBoundGitHubsection, vous devez également inclure les plages IP de sortie pour GHE.com. Consultez « Détails du réseau pour GHE.com ».

    Note

    Au lieu d'utiliser le fichier suivant pour permettre à GitHub Actions de communiquer avec les agents d'exécution, vous pouvez autoriser les mêmes domaines de pare-feu que ceux requis pour la communication entre les agents d'exécution auto-hébergés et GitHub. Pour plus d’informations, consultez « À propos des exécuteurs auto-hébergés ». Pour déterminer la plage d’adresses IP de sous-réseau appropriée, nous vous recommandons d’ajouter une mémoire tampon de 30 % à la concurrence maximale des tâches que vous prévoyez. Par exemple, si les exécuteurs de votre configuration réseau sont définis sur une concurrence maximale des tâches de 300, il est recommandé d’utiliser une plage d’adresses IP de sous-réseau qui peut prendre en charge au moins 390 exécuteurs. Cette mémoire tampon permet de s’assurer que votre réseau peut gérer des augmentations inattendues de la concurrence des machines virtuelles pour répondre à la concurrence des tâches sans manquer d’adresses IP.

    Bicep
    @description('NSG for outbound rules')
    param location string
    param nsgName string = 'actions_NSG'
    
    resource actions_NSG 'Microsoft.Network/networkSecurityGroups@2017-06-01' = {
      name: nsgName
      location: location
      properties: {
        securityRules: [
          {
            name: 'AllowVnetOutBoundOverwrite'
            properties: {
              protocol: 'TCP'
              sourcePortRange: '*'
              destinationPortRange: '443'
              sourceAddressPrefix: '*'
              destinationAddressPrefix: 'VirtualNetwork'
              access: 'Allow'
              priority: 200
              direction: 'Outbound'
              destinationAddressPrefixes: []
            }
          }
          {
            name: 'AllowOutBoundActions'
            properties: {
              protocol: '*'
              sourcePortRange: '*'
              destinationPortRange: '*'
              sourceAddressPrefix: '*'
              access: 'Allow'
              priority: 210
              direction: 'Outbound'
              destinationAddressPrefixes: [
                '4.175.114.51/32'
                '20.102.35.120/32'
                '4.175.114.43/32'
                '20.72.125.48/32'
                '20.19.5.100/32'
                '20.7.92.46/32'
                '20.232.252.48/32'
                '52.186.44.51/32'
                '20.22.98.201/32'
                '20.246.184.240/32'
                '20.96.133.71/32'
                '20.253.2.203/32'
                '20.102.39.220/32'
                '20.81.127.181/32'
                '52.148.30.208/32'
                '20.14.42.190/32'
                '20.85.159.192/32'
                '52.224.205.173/32'
                '20.118.176.156/32'
                '20.236.207.188/32'
                '20.242.161.191/32'
                '20.166.216.139/32'
                '20.253.126.26/32'
                '52.152.245.137/32'
                '40.118.236.116/32'
                '20.185.75.138/32'
                '20.96.226.211/32'
                '52.167.78.33/32'
                '20.105.13.142/32'
                '20.253.95.3/32'
                '20.221.96.90/32'
                '51.138.235.85/32'
                '52.186.47.208/32'
                '20.7.220.66/32'
                '20.75.4.210/32'
                '20.120.75.171/32'
                '20.98.183.48/32'
                '20.84.200.15/32'
                '20.14.235.135/32'
                '20.10.226.54/32'
                '20.22.166.15/32'
                '20.65.21.88/32'
                '20.102.36.236/32'
                '20.124.56.57/32'
                '20.94.100.174/32'
                '20.102.166.33/32'
                '20.31.193.160/32'
                '20.232.77.7/32'
                '20.102.38.122/32'
                '20.102.39.57/32'
                '20.85.108.33/32'
                '40.88.240.168/32'
                '20.69.187.19/32'
                '20.246.192.124/32'
                '20.4.161.108/32'
                '20.22.22.84/32'
                '20.1.250.47/32'
                '20.237.33.78/32'
                '20.242.179.206/32'
                '40.88.239.133/32'
                '20.121.247.125/32'
                '20.106.107.180/32'
                '20.22.118.40/32'
                '20.15.240.48/32'
                '20.84.218.150/32'
              ]
            }
          }
          {
            name: 'AllowOutBoundGitHub'
            properties: {
              protocol: '*'
              sourcePortRange: '*'
              destinationPortRange: '*'
              sourceAddressPrefix: '*'
              access: 'Allow'
              priority: 220
              direction: 'Outbound'
              destinationAddressPrefixes: [
                '140.82.112.0/20'
                '143.55.64.0/20'
                '185.199.108.0/22'
                '192.30.252.0/22'
                '20.175.192.146/32'
                '20.175.192.147/32'
                '20.175.192.149/32'
                '20.175.192.150/32'
                '20.199.39.227/32'
                '20.199.39.228/32'
                '20.199.39.231/32'
                '20.199.39.232/32'
                '20.200.245.241/32'
                '20.200.245.245/32'
                '20.200.245.246/32'
                '20.200.245.247/32'
                '20.200.245.248/32'
                '20.201.28.144/32'
                '20.201.28.148/32'
                '20.201.28.149/32'
                '20.201.28.151/32'
                '20.201.28.152/32'
                '20.205.243.160/32'
                '20.205.243.164/32'
                '20.205.243.165/32'
                '20.205.243.166/32'
                '20.205.243.168/32'
                '20.207.73.82/32'
                '20.207.73.83/32'
                '20.207.73.85/32'
                '20.207.73.86/32'
                '20.207.73.88/32'
                '20.217.135.1/32'
                '20.233.83.145/32'
                '20.233.83.146/32'
                '20.233.83.147/32'
                '20.233.83.149/32'
                '20.233.83.150/32'
                '20.248.137.48/32'
                '20.248.137.49/32'
                '20.248.137.50/32'
                '20.248.137.52/32'
                '20.248.137.55/32'
                '20.26.156.215/32'
                '20.26.156.216/32'
                '20.26.156.211/32'
                '20.27.177.113/32'
                '20.27.177.114/32'
                '20.27.177.116/32'
                '20.27.177.117/32'
                '20.27.177.118/32'
                '20.29.134.17/32'
                '20.29.134.18/32'
                '20.29.134.19/32'
                '20.29.134.23/32'
                '20.29.134.24/32'
                '20.87.245.0/32'
                '20.87.245.1/32'
                '20.87.245.4/32'
                '20.87.245.6/32'
                '20.87.245.7/32'
                '4.208.26.196/32'
                '4.208.26.197/32'
                '4.208.26.198/32'
                '4.208.26.199/32'
                '4.208.26.200/32'
                '4.225.11.196/32'
                '4.237.22.32/32'
              ]
            }
          }
          {
            name: 'AllowStorageOutbound'
            properties: {
              protocol: '*'
              sourcePortRange: '*'
              destinationPortRange: '*'
              sourceAddressPrefix: '*'
              destinationAddressPrefix: 'Storage'
              access: 'Allow'
              priority: 230
              direction: 'Outbound'
              destinationAddressPrefixes: []
            }
          }
        ]
      }
    }
    

1. Obtenir la valeur databaseId de votre organisation

Vous pouvez utiliser la requête GraphQL suivante pour récupérer la valeur databaseId de votre organisation. Vous allez utiliser l’organisation databaseId pour la valeur de la variable d’environnement DATABASE_ID à l’étape suivante. Pour plus d’informations sur l’utilisation de GraphQL, consultez Formation d’appels avec GraphQL.

Variable de requêteDescription
loginConnexion pour votre compte d’organisation, que vous pouvez identifier en examinant l’URL de votre organisation. https://github.com/organizations/ORGANIZATION_LOGIN
query(
  $login: String!
){
  organization (login: $login)
  {
    login
    databaseId
  }
}
'
Variables
{
  "login": "ORGANIZATION_LOGIN"
}

Vous pouvez également utiliser la commande curl suivante pour trouver votre databaseId.

Shell
curl -H "Authorization: Bearer BEARER_TOKEN" -X POST \
  -d '{ "query": "query($login: String!) { organization (login: $login) { login databaseId } }" ,
        "variables": {
          "login": "ORGANIZATION_LOGIN"
        }
      }' \
https://api.github.com/graphql

2. Utiliser un script pour configurer vos ressources Azure

Utilisez le script suivant pour configurer un sous-réseau pour le réseau privé Azure. Le script crée toutes les ressources dans le même groupe de ressources.

Pour utiliser le script, remplissez les valeurs de variable d’environnement d’espace réservé avec les valeurs réelles et exécutez le script à partir d’un interpréteur de commandes bash ou d’un Sous-système Windows pour Linux.

Note

  • Exécutez le script suivant dans le même référentiel où vous avez enregistré le fichier actions-nsg-deployment.bicep.
  • Lorsque vous définissez la variable d’environnement YOUR_AZURE_LOCATION, utilisez le nom de votre région. Cette valeur est différente du nom complet de votre région. Pour afficher la liste des noms et des noms complets, utilisez az account list-locations -o table.
  • Lorsque vous créez la ressource de paramètres réseau, un lien d’association de service est appliqué au sous-réseau que vous fournissez. Ce lien empêche toute suppression accidentelle du sous-réseau lors de son utilisation par le service GitHub Actions.
  • Si vous personnalisez ce script pour utiliser des ressources réseau dans des sous-réseaux existants, vous devez vous assurer que toutes les interfaces réseau (NIC) existantes connectées au sous-réseau sont supprimées avant que le sous-réseau soit délégué au service GitHub Actions. Dans le cas contraire, le service ne parviendra pas à appliquer le lien d’association de service au sous-réseau.
Bash
#!/bin/bash

# This script creates the following resources in the specified subscription:
# - Resource group
# - Network Security Group rules
# - Virtual network (vnet) and subnet
# - Network Settings with specified subnet and GitHub Organization database ID
#
# It also registers the `GitHub.Network` resource provider with the subscription,
# delegates the created subnet to the Actions service via the `GitHub.Network/NetworkSettings`
# resource type, and applies the NSG rules to the created subnet.

# stop on failure
set -e

#set environment
export AZURE_LOCATION=YOUR_AZURE_LOCATION
export SUBSCRIPTION_ID=YOUR_SUBSCRIPTION_ID
export RESOURCE_GROUP_NAME=YOUR_RESOURCE_GROUP_NAME
export VNET_NAME=YOUR_VNET_NAME
export SUBNET_NAME=YOUR_SUBNET_NAME
export NSG_NAME=YOUR_NSG_NAME
export NETWORK_SETTINGS_RESOURCE_NAME=YOUR_NETWORK_SETTINGS_RESOURCE_NAME
export DATABASE_ID=YOUR_DATABASE_ID
export API_VERSION=2024-04-02

# These are the default values. You can adjust your address and subnet prefixes.
export ADDRESS_PREFIX=10.0.0.0/16
export SUBNET_PREFIX=10.0.0.0/24

echo
echo login to Azure
. az login --output none

echo
echo set account context $SUBSCRIPTION_ID
. az account set --subscription $SUBSCRIPTION_ID

echo
echo Register resource provider GitHub.Network
. az provider register --namespace GitHub.Network

echo
echo Create resource group $RESOURCE_GROUP_NAME at $AZURE_LOCATION
. az group create --name $RESOURCE_GROUP_NAME --location $AZURE_LOCATION

echo
echo Create NSG rules deployed with 'actions-nsg-deployment.bicep' file
. az deployment group create --resource-group $RESOURCE_GROUP_NAME --template-file ./actions-nsg-deployment.bicep --parameters location=$AZURE_LOCATION nsgName=$NSG_NAME

echo
echo Create vnet $VNET_NAME and subnet $SUBNET_NAME
. az network vnet create --resource-group $RESOURCE_GROUP_NAME --name $VNET_NAME --address-prefix $ADDRESS_PREFIX --subnet-name $SUBNET_NAME --subnet-prefixes $SUBNET_PREFIX

echo
echo Delegate subnet to GitHub.Network/networkSettings and apply NSG rules
. az network vnet subnet update --resource-group $RESOURCE_GROUP_NAME --name $SUBNET_NAME --vnet-name $VNET_NAME --delegations GitHub.Network/networkSettings --network-security-group $NSG_NAME

echo
echo Create network settings resource $NETWORK_SETTINGS_RESOURCE_NAME
. az resource create --resource-group $RESOURCE_GROUP_NAME --name $NETWORK_SETTINGS_RESOURCE_NAME --resource-type GitHub.Network/networkSettings --properties "{ \"location\": \"$AZURE_LOCATION\", \"properties\" : { \"subnetId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME\", \"businessId\": \"$DATABASE_ID\" }}" --is-full-object --output table --query "{GitHubId:tags.GitHubId, name:name}" --api-version $API_VERSION

echo
echo To clean up and delete resources run the following command:
echo az group delete --resource-group $RESOURCE_GROUP_NAME

Le script retournera la charge utile complète de la ressource créée. La valeur de hachage GitHubId renvoyée dans la charge utile de la ressource créée est l’ID de la ressource des paramètres du réseau que vous utiliserez dans les étapes suivantes lors de la configuration réseau dans GitHub.

Création d’une configuration réseau pour votre organization dans GitHub

Après avoir configuré vos ressources Azure, vous pouvez utiliser un réseau virtuel Azure (VNET) pour un réseau privé en créant une configuration réseau au niveau de l'organisation. Ensuite, vous pouvez associer cette configuration réseau aux groupes d’exécuteurs. Pour plus d’informations sur les groupes d’exécuteurs, consultez « Contrôle de l’accès aux exécuteurs plus grands ».

Une fois la configuration réseau associée à un groupe d’exécuteurs, tous les exécuteurs de ce groupe auront accès au réseau virtuel Azure connecté à la configuration sous-jacente.

Prérequis

Vérifiez que vos ressources Azure ont été configurées avant d’ajouter une configuration réseau dans GitHub. Pour plus d’informations, consultez Pour plus d’informations, consultez « Configuration d'un réseau privé pour les exécuteurs hébergés sur GitHub dans votre organisation ».

1. Ajouter une nouvelle configuration réseau pour votre organisation

  1. Dans le coin supérieur droit de GitHub, sélectionnez votre photo de profil, puis cliquez sur Vos organisations.
  2. En regard de l’organisation, cliquez sur Paramètres.
  3. Dans la barre latérale gauche, cliquez sur Réseau informatique hébergé.
  4. Cliquez sur la liste déroulante Nouvelle configuration réseau. Cliquez ensuite sur Réseau privé Azure.
  5. Donnez un nom à votre configuration réseau.
  6. Cliquez sur Ajouter le réseau virtuel Azure.
  7. Dans la fenêtre contextuelle, entrez l’ID de ressource des paramètres réseau que vous avez récupérés lorsque vous avez configuré vos ressources Azure pour la mise en réseau privée.
  8. Cliquez sur Ajouter le réseau virtuel Azure.

2. Créer un groupe d’exécuteurs pour votre organisation

Note

Pour que les référentiels au sein des organisations puissent accéder au groupe d’exécuteurs, ces référentiels doivent avoir accès à ce groupe d’exécuteurs au niveau de l’organisation. Pour plus d’informations, consultez « Contrôle de l’accès aux exécuteurs plus grands ».

  1. Créez un nouveau groupe d’exécuteurs pour votre organisation. Pour plus d'informations sur la création d'un groupe d’exécuteurs, consultez Contrôle de l’accès aux exécuteurs plus grands.
  2. Pour choisir une stratégie pour l’accès des référentiels, sélectionnez le menu déroulant Accès des référentiels et cliquez sur une stratégie. Vous pouvez configurer un groupe d’exécuteurs pour qu’il soit accessible à une liste spécifique de référentiels ou l’ensemble des référentiels de l’organisation.
  3. Lors de la configuration de votre groupe d’exécuteurs, sous « Configurations réseau », utilisez le menu déroulant pour sélectionner la configuration réseau que vous avez créée pour le réseau virtuel Azure.
  4. Cliquez sur Créer un groupe pour créer le groupe et appliquer la stratégie.

3. Ajouter l’exécuteur hébergé par GitHub

au groupe d’exécuteurs de l’organisation

Note

Lors de l’ajout de l’exécuteur hébergé par GitHub à un groupe d’exécuteurs, sélectionnez le groupe d’exécuteurs que vous avez créé dans les procédures précédentes.

  1. Ajoutez l’exécuteur hébergé par GitHub au groupe d’exécuteurs. Pour plus d’informations, consultez « Gestion des exécuteurs de plus grande taille ».

4. Optionnellement, gérer les configurations du réseau

  1. Dans le coin supérieur droit de GitHub, sélectionnez votre photo de profil, puis cliquez sur Vos organisations.
  2. En regard de l’organisation, cliquez sur Paramètres.
  3. Dans la barre latérale gauche, cliquez sur Réseau informatique hébergé.
  4. Pour modifier une configuration réseau, à droite de la configuration réseau, cliquez sur . Cliquez sur Modifier la configuration.
  5. Pour désactiver une configuration réseau, à droite de la configuration réseau, cliquez sur . Cliquez ensuite sur Désactiver.
  6. Pour supprimer une configuration réseau, à droite de la configuration réseau, cliquez sur . Cliquez ensuite sur Supprimer.

Suppression d’un sous-réseau

Lorsque vous créez la ressource de paramètres réseau, un lien d’association de service est appliqué au sous-réseau que vous fournissez. Ce lien empêche toute suppression accidentelle du sous-réseau lors de son utilisation par le service GitHub Actions.

Pour supprimer le sous-réseau, le lien d'association de service doit d'abord être supprimé. Le lien d'association de service est supprimé en toute sécurité dès lors que la ressource de paramètres réseau est supprimée.

Pour supprimer la ressource des paramètres réseau, la configuration réseau qui l’utilise doit d’abord être supprimée.

  1. Dans le coin supérieur droit de GitHub, sélectionnez votre photo de profil, puis cliquez sur Vos organisations.

  2. En regard de l’organisation, cliquez sur Paramètres.

  3. Dans la barre latérale gauche, cliquez sur Réseau informatique hébergé.

  4. Ouvrez la configuration réseau qui utilise le sous-réseau que vous souhaitez supprimer.

  5. Passez en revue la liste des groupes d'exécuteurs à l'aide de la configuration réseau.

  6. Dans l'angle supérieur droit, cliquez sur le bouton «  ». Cliquez ensuite sur Supprimer la configuration.

  7. Pour supprimer la ressource des paramètres réseau et supprimer le lien d'association de service, utilisez vos propres entrées avec les commandes suivantes d'Azure CLI. Pour plus d'informations, consultez la Documentation sur l'interface de ligne de commande Azure (CLI)

    Bash
    az account set --subscription $SUBSCRIPTION_ID
    az resource delete -g $RESOURCE_GROUP_NAME --name $NETWORK_SETTINGS_RESOURCE_NAME --resource-type 'GitHub.Network/networkSettings' --api-version $API_VERSION
    
  8. Supprimez le sous-réseau dans Azure. Pour plus d’informations, consultez Supprimer un sous-réseau sur Microsoft Learn.