Skip to main content

Configurar redes privadas para executores hospedados no GitHub

Saiba como usar executores hospedados pela GitHub com uma rede privada do Azure.

Observações:

  • O uso de executores hospedados pela GitHub com uma VNET do Azure está na versão beta e sujeito a alterações.
  • Apenas 4 executores de 64 CPU, Ubuntu e Windows têm suporte com o Azure VNET. Para obter mais informações sobre esses tipos de executores, consulte "Sobre executores maiores".
  • As regiões com suporte incluem East US, East US 2 e West US 2. Para solicitar suporte para uma região que não esteja nessa lista, preencha o formulário de solicitação de região.
  • A rede privada para executores hospedados pela GitHub não oferece suporte para endereços IP estáticos para executores avançados. Você deve usar endereços IP dinâmicos, que é a configuração padrão de executores avançados. Para saber mais sobre redes para executores maiores, confira "Sobre executores maiores".

Sobre a configuração de redes privadas com executores hospedados pela GitHub

To use GitHub-hosted runners with Azure VNET, you will need to configure your Azure resources then create an Azure private network configuration in GitHub.

Os procedimentos a seguir o guiarão por todo o processo de configuração.

Aviso: Ensure your Azure resources have been configured before adding a network configuration in GitHub. For more information, see "Configurar redes privadas para executores hospedados no GitHub."

Configurar seus recursos do Azure

Você usará um script para automatizar a configuração dos recursos do Azure.

Pré-requisitos

  • Use uma conta do Azure com a função Colaborador de Assinatura e a função Colaborador de Rede. Essas funções permitem registrar o provedor de recursos GitHub.Network e delegar a sub-rede. Para obter mais informações, consulte Funções internas do Azure no Microsoft Learn.

  • Para associar corretamente as sub-redes ao usuário certo, os recursos de NetworkSettings do Azure devem ser criados nas mesmas assinaturas onde as redes virtuais são criadas.

  • Para garantir a disponibilidade de recursos/residência de dados, os recursos devem ser criados na mesma região do Azure.

  • Salve o seguinte arquivo .bicep. Dê o nome actions-nsg-deployment.bicep para o arquivo.

    Observação: como alternativa, para permitir que o GitHub Actions se comuniquem com os executores, você pode permitir os mesmos domínios de firewall necessários para a comunicação entre executores auto-hospedados e GitHub Enterprise Cloud. Para obter mais informações, confira "Sobre executores auto-hospedados".

    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: 'DenyInternetOutBoundOverwrite'
            properties: {
              protocol: '*'
              sourcePortRange: '*'
              destinationPortRange: '*'
              sourceAddressPrefix: '*'
              destinationAddressPrefix: 'Internet'
              access: 'Deny'
              priority: 400
              direction: 'Outbound'
            }
          }
          {
            name: 'AllowVnetOutBoundOverwrite'
            properties: {
              protocol: 'TCP'
              sourcePortRange: '*'
              destinationPortRange: '443'
              sourceAddressPrefix: '*'
              destinationAddressPrefix: 'VirtualNetwork'
              access: 'Allow'
              priority: 200
              direction: 'Outbound'
              destinationAddressPrefixes: []
            }
          }
          {
            name: 'AllowAzureCloudOutBound'
            properties: {
              protocol: 'TCP'
              sourcePortRange: '*'
              destinationPortRange: '443'
              sourceAddressPrefix: '*'
              destinationAddressPrefix: 'AzureCloud'
              access: 'Allow'
              priority: 210
              direction: 'Outbound'
              destinationAddressPrefixes: []
            }
          }
          {
            name: 'AllowInternetOutBoundGitHub'
            properties: {
              protocol: 'TCP'
              sourcePortRange: '*'
              destinationPortRange: '443'
              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'
              ]
            }
          }        
        ]
      }
    }
    

1. Obtenha o databaseId da sua empresa.

Você pode usar a consulta GraphQL a seguir para recuperar seu databaseId corporativo. Você usará o databaseId da empresa para o valor da variável de ambiente DATABASE_ID na próxima etapa. Para saber mais sobre como trabalhar com GraphQL, confira "Realizar chamadas com o GraphQL".

Variável da consultaDescrição
slugO campo de dados dinâmico da conta empresarial, que você pode identificar examinando a URL da sua empresa, https://github.com/enterprises/SLUG.
query(
  $slug: String!
){
  enterprise (slug: $slug)
  {
    slug
    databaseId
  }
}
'
Variables
{
  "slug": "ENTERPRISE_SLUG"
}

Como alternativa, pode usar o seguinte comando curl para localizar seu databaseId.

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

2. Use um script para configurar os recursos do Azure

Use o script a seguir para configurar uma sub-rede para redes privadas do Azure. O script cria todos os recursos no mesmo grupo de recursos.

Para usar o script, preencha os valores das variáveis de ambiente do espaço reservado com os valores reais e execute o script em um shell bash ou no Windows Subsistema do Windows para Linux.

Observações:

  • Execute o script a seguir no mesmo diretório em que você salvou o arquivo actions-nsg-deployment.bicep.
  • Ao definir a variável de ambiente YOUR_AZURE_LOCATION, use o nome da sua região. Esse valor é diferente do nome de exibição da sua região. Para ver uma lista de nomes e nomes de exibição, use a az account list-locations -o table.
  • Quando você cria o recurso de configurações de rede, um link de associação de serviço é aplicado à sub-rede fornecida. Esse link evita a exclusão acidental da sub-rede durante seu uso pelo serviço GitHub Actions.
  • Se você personalizar esse script para usar recursos de rede em sub-redes existentes, deverá garantir que todas as interfaces de rede (NICs) existentes conectadas à sub-rede sejam excluídas antes que a sub-rede seja delegada ao serviço GitHub Actions. Caso contrário, o serviço não conseguirá aplicar o link de associação de serviço à sub-rede.
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 Enterprise 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

# 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\", \"organizationId\": \"$DATABASE_ID\" }}" --is-full-object --output table --query "{GitHubId:tags.GitHubId, name:name}" --api-version 2023-11-01-preview

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

O script retornará a carga completa do recurso criado. O valor de hash GitHubId retornado na carga do recurso criado é a ID do recurso de configurações de rede que você usará nas próximas etapas ao definir uma configuração de rede na GitHub.

Definir uma configuração de rede na GitHub

Depois de configurar seus recursos do Azure, você pode usar uma Rede Virtual do Azure (VNET) para rede privada criando uma configuração de rede para sua empresa. Em seguida, você pode associar essa configuração de rede a grupos de executores. Para obter mais informações sobre os grupos de executores, confira "Como controlar o acesso a executores maiores".

Depois que a configuração de rede estiver associada a um grupo de executores, todos os executores desse grupo terão acesso à VNET do Azure que foi conectada à configuração subjacente.

Pré-requisitos

Ensure your Azure resources have been configured before adding a network configuration in GitHub. For more information, see "Configurar redes privadas para executores hospedados no GitHub."

1. Adicione uma nova conexão de rede

  1. No canto superior direito do GitHub.com, clique na foto do seu perfil e em Suas empresas.

  2. Na lista de empresas, clique na empresa que você deseja visualizar.

  3. Na barra lateral da conta corporativa, clique em Configurações.

  4. Na barra lateral esquerda, clique em Rede de computação hospedada.

  5. Clique na lista suspensa Nova configuração de rede. Em seguida, clique em Rede privada do Azure.

  6. Dê um nome para a configuração da rede.

  7. Clique em Adicionar Rede Virtual do Azure.

  8. Na janela pop-up, insira a ID do recurso de configurações de rede que você recuperou quando configurou seus recursos do Azure para rede privada.

  9. Clique em Adicionar Rede Virtual do Azure.

2. Crie um grupo de executores

Observação: para que o grupo de executores seja acessível pelos repositórios nas suas organizações corporativas, esses repositórios devem ter acesso a esse grupo de executores no nível da organização. Para obter mais informações, confira "Como controlar o acesso a executores maiores".

  1. Crie um novo grupo de executores para sua empresa. Para obter mais informações sobre como criar um grupo de proteção, confira "Como controlar o acesso a executores maiores."
  2. Para escolher uma política para o acesso da organização, selecione o menu suspenso Acesso à organização e clique em uma política. Você pode configurar um grupo de executor para que possa ser acessado por uma lista específica de organizações ou a todas as organizações da empresa.
  3. Ao configurar seu grupo de executores, em "Configurações de rede", use o menu suspenso para selecionar a configuração de rede criada para a VNET do Azure.
  4. Para criar o grupo e aplicar a política, clique em Criar grupo.

3. Adicione um executor hospedado pela GitHub

ao grupo de executores

Observação: ao adicionar o executor hospedado pela GitHub a um grupo de executores, selecione o grupo de executores que você criou nos procedimentos anteriores.

  1. Adicione um executor hospedado pela GitHub ao grupo de executores. Para obter mais informações, confira "Gerenciar executores maiores".

4. Opcionalmente, gerencie configurações de rede

  1. No canto superior direito do GitHub.com, clique na foto do seu perfil e em Suas empresas.

  2. Na lista de empresas, clique na empresa que você deseja visualizar.

  3. Na barra lateral da conta corporativa, clique em Configurações.

  4. Na barra lateral esquerda, clique em Rede de computação hospedada.

  5. Para editar uma configuração de rede, à direita da configuração de rede, clique em . Em seguida, clique em Editar configuração.

  6. Para desabilitar uma configuração de rede, à direita da configuração de rede, clique em . Em seguida, clique em Desabilitar.

  7. Para excluir uma configuração de rede, à direita da configuração de rede, clique em . Em seguida, clique em Excluir.

Como excluir uma sub-rede

Quando você cria o recurso de configurações de rede, um link de associação de serviço é aplicado à sub-rede fornecida. Esse link evita a exclusão acidental da sub-rede durante seu uso pelo serviço GitHub Actions.

Antes da exclusão da sub-rede, o link de associação desse serviço precisa ser removido. O link de associação de serviço é removido com segurança automaticamente depois que o recurso de configurações de rede é excluído.

  1. No canto superior direito do GitHub.com, clique na foto do seu perfil e em Suas empresas.

  2. Na lista de empresas, clique na empresa que você deseja visualizar.

  3. Na barra lateral da conta corporativa, clique em Configurações.

  4. Na barra lateral esquerda, clique em Rede de computação hospedada.

  5. Abra a configuração de rede que está usando a sub-rede que você deseja excluir.

  6. Revise a lista de grupos de executores usando a configuração de rede.

  7. No canto superior direito, clique no botão "". Em seguida, clique em Excluir configuração.

  8. Para excluir o recurso de configurações de rede e remover o link de associação de serviço, use suas próprias entradas com os seguintes comandos com a CLI do Azure. Para obter mais informações, confira a documentação da CLI (interface de linha de comando) do Azure.

    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 '2023-11-01-preview'
    
  9. Exclua a sub-rede no Azure. Para obter informações, confira Excluir uma sub-rede no Microsoft Learn.