Azure プライベート ネットワークについて - GitHub
ホストランナー向け
Azure VNET で GitHub ホステッド ランナーを使用するには、まず、Azure リソースを構成します。 次に、GitHub にプライベート ネットワーク構成を作成します。
次の手順では、両方のステップを実行できます。
Azure VNET での GitHub ホスト ランナーの使用に関する一般的な issue のトラブルシューティングの詳細については、「GitHubホストランナー向けの企業内Azureプライベートネットワーク構成のトラブルシューティング」を参照してください。
Azure リソースの構成
スクリプトを使用して、Azure リソースの構成を自動化します。
前提条件
-
サブスクリプション投稿者ロールとネットワーク投稿者ロールを持つ Azure アカウントを使用します。 これらのロールを使用すると、
GitHub.Networkリソースプロバイダーを登録し、サブネットを委任できます。 詳細については、Microsoft Learn の「Azure 組み込みロール」を参照してください。 -
サブネットを適切なユーザーに正しく関連付けるには、仮想ネットワークが作成されるのと同じサブスクリプションに Azure
NetworkSettingsリソースを作成する必要があります。 -
リソースの可用性/データ所在地を確保するには、同じ Azure リージョンにリソースを作成する必要があります。
-
サブネットからの送信ネットワーク トラフィックは、TLS インターセプトの実行にネットワークが使用する中間証明書を信頼するように仮想マシンが構成されないため、TLS インターセプトの対象にすることはできません。 詳細については、Microsoft ドキュメントの 「Azure Firewall Premium で使用される証明書 」を参照してください。
TLS インターセプトを使用する必要がある場合は、カスタム イメージを使用して中間証明書をインストールできます。 「カスタム イメージの使用」を参照してください。
-
次
.bicepファイルを保存します。 そのファイルにactions-nsg-deployment.bicepという名前を付けます。提供する
.bicepファイルには、Azure VNET で GitHub がホストするランナーを使用するための最小限のルールセットが含まれています。 特定のユース ケースにルールを追加する必要がある場合があります。データ所在地付き GitHub Enterprise Cloud を使う場合は、[
AllowOutBoundGitHub] セクションに GHE.com のイングレス IP 範囲も含める必要があります。 「GHE.com のネットワークの詳細」を参照してください。メモ
次のファイルを使う代わりに、GitHub Actions がランナーと通信できるようにするために、セルフホステッド ランナーと GitHub の間の通信に必要な同じファイアウォール ドメインを許可することもできます。 詳しくは、「セルフホステッド ランナー リファレンス」をご覧ください。 適切なサブネット IP アドレスの範囲を決定するには、予想される最大ジョブコンカレンシーに 30% のバッファーを追加することをお勧めします。 たとえば、ネットワーク構成のランナーが最大ジョブコンカレンシー 300 に設定されている場合は、少なくとも 390 のランナーを収容できるサブネット IP アドレスの範囲を使用することをお勧めします。 このバッファーがあると、ジョブのコンカレンシーを満たすために VM のニーズが予期せず増加してもネットワークが対応できます。
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: '443' 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: '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' '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: '443' sourceAddressPrefix: '*' destinationAddressPrefix: 'Storage' access: 'Allow' priority: 230 direction: 'Outbound' destinationAddressPrefixes: [] } } ] } }@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: '443' 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: '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' '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: '443' sourceAddressPrefix: '*' destinationAddressPrefix: 'Storage' access: 'Allow' priority: 230 direction: 'Outbound' destinationAddressPrefixes: [] } } ] } }
1. 企業の databaseId を取得する
ヒント
クエリを正常に実行するには、トークンに少なくとも read:enterprise アクセス許可が必要です。
次の GraphQL クエリを使用して、Enterprise databaseId を取得できます。 次の手順では、databaseId 環境変数の値として enterprise DATABASE_ID を使用します。 GraphQL の使用について詳しくは、「GraphQLでの呼び出しの作成」をご覧ください。
| クエリ変数 | 説明 |
|---|---|
slug | Enterprise アカウントのスラッグ。エンタープライズの URL (https://github.com/enterprises/SLUG または https://SLUG.ghe.com) を調べることで識別できます。 |
query(
$slug: String!
){
enterprise (slug: $slug)
{
slug
databaseId
}
}
'
Variables
{
"slug": "ENTERPRISE_SLUG"
}
例: GitHub.com
次の cURL のコマンドを使用して databaseId を見つけられます。
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
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
例: GHE.com
次の GitHub CLI コマンドを使用して、 databaseIdを取得できます。 SUBDOMAIN を企業の GHE.com
のサブドメインに置き換えます。
gh auth login -s 'read:enterprise' -h SUBDOMAIN.ghe.com
gh api graphql --hostname SUBDOMAIN.ghe.com -f query='query($slug: String!) { enterprise (slug: $slug) { slug databaseId } }' -f slug='SUBDOMAIN'
gh auth login -s 'read:enterprise' -h SUBDOMAIN.ghe.com
gh api graphql --hostname SUBDOMAIN.ghe.com -f query='query($slug: String!) { enterprise (slug: $slug) { slug databaseId } }' -f slug='SUBDOMAIN'
2. スクリプトを使用して Azure リソースを構成する
次のスクリプトを使用して、Azure プライベート ネットワーク のサブネットを設定します。 このスクリプトでは、同じリソース グループ内にすべてのリソースが作成されます。
スクリプトを使用するには、プレースホルダー環境変数の値に実際の値を入力し、bash シェルまたはLinux 用 Windows サブシステムからスクリプトを実行します。
メモ
actions-nsg-deployment.bicepファイルを保存した同じディレクトリの次のスクリプトのを実行します。YOUR_AZURE_LOCATION環境変数を設定するときは、リージョンの名前を使用します。 この値は、リージョンの表示名とは異なります。 名前と表示名のリストを表示するには、az account list-locations -o tableを使用します。- ネットワーク設定リソースを作成すると、指定したサブネットにサービス関連付けリンクが適用されます。 このリンクにより、GitHub Actions サービスで使用中にサブネットが誤って削除されるのを防ぐことができます。
- このスクリプトをカスタマイズして、既存のサブネットのネットワークリソースを使用する場合、サブネットが GitHub Actions サービスに委任される前に、サブネットに接続されている既存のネットワーク インターフェイス (NIC) が削除されていることを確認する必要があります。 それ以外の場合は、サービスはサービスの関連付けリンクをサブネットに適用できません。
#!/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 Enterprisedatabase 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
#!/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 Enterprisedatabase 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
このスクリプトは、作成されたリソースの完全なペイロードを返します。 作成されたリソースのペイロードで返される GitHubId ハッシュ値は、GitHub でネットワーク構成を構成するときに、次の手順で使用するネットワーク設定リソース ID です。
で企業のネットワーク構成を作成する GitHub
Azure リソースを構成した後、Enterprise レベルまたは Organization レベルでネットワーク構成を作成することで、プライベート ネットワークに Azure Virtual Network (VNET) を使用できます。 その後、そのネットワーク構成をランナー グループに関連付けることができます。
Azure で構成されるネットワーク設定を作成する場合は、初期セットアップが Enterprise レベルである必要があることに注意してください。 このため、databaseId を取得するときに、この手順では Enterprise スラッグを構成する必要があります。 Organization が独自のネットワーク構成を作成できるのは、Enterprise が確立され、ホステッド コンピューティング ネットワークの Enterprise ポリシーを介して有効になっている場合のみです。 ランナー グループの詳細については、「より大きなランナーへのアクセスの制御」を参照してください。
ネットワーク構成がランナー グループに関連付けられると、そのグループ内のすべてのランナーが、基になる構成に接続されている Azure VNET にアクセスできるようになります。
前提条件
GitHub にネットワーク構成を追加する_前に_、Azure リソースが構成されていることを確認します。 詳しくは、「GitHubホストランナーのプライベートネットワークを企業で構成する方法」をご覧ください。
1. Enterprise 用の新しいネットワーク構成を追加する
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- 左側のサイドバーで、 [Hosted compute networking](ホストされたコンピューティング ネットワーク) をクリックします。
-
**[New network configuration]**(新しいネットワーク構成) ドロップダウンをクリックします。 次に、**Azureプライベート ネットワーク** をクリックします。 - ネットワーク構成に名前をつけます。
-
**「Azure Virtual Network」を追加**をクリックします。 - ポップアップ ウィンドウで、プライベート ネットワーク用にAzure リソースを構成したときに取得したネットワーク設定リソース ID を入力します。
-
**「Azure Virtual Network」を追加**をクリックします。
2. Enterprise 用のランナー グループを作成する
メモ
organization 内のリポジトリからランナー グループにアクセスできるようにするには、それらのリポジトリが organization レベルでそのランナー グループにアクセスできる必要があります。 詳しくは、「より大きなランナーへのアクセスの制御」をご覧ください。
- Enterprise 用の新しいランナー グループを作成します。 ランナー グループの作成方法について詳しくは、「より大きなランナーへのアクセスの制御」をご覧ください。
- Organization アクセスのポリシーを選ぶには、 [Organization のアクセス] ドロップダウン メニューを選び、[ポリシー] をクリックします。 組織の特定のリストまたはエンタープライズ内のすべての組織にアクセス可能なランナー グループを設定できます。
- ランナー グループを構成するときに、[ネットワーク構成] のドロップダウン メニューを使用して、Azure VNET 用に作成したネットワーク構成を選択します。
- グループを作成し、ポリシーを適用するには、[Create group](グループの作成) をクリックします。
3. GitHubホストランナーをエンタープライズ ランナー グループに追加する
メモ
GitHubホストランナーをランナー グループに追加するときは、前の手順で作成したランナー グループを選択します。
-
GitHubホストランナーをランナー グループに追加します。 詳しくは、「[AUTOTITLE](/enterprise-cloud@latest/actions/using-github-hosted-runners/managing-larger-runners#adding-a-larger-runner-to-an-enterprise)」をご覧ください。
4. 必要に応じて、ネットワーク構成を管理する
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- 左側のサイドバーで、 [Hosted compute networking](ホストされたコンピューティング ネットワーク) をクリックします。
- ネットワーク構成を編集するには、ネットワーク構成の右側にある [ ] をクリックします。 その後、[Edit configuration](構成の編集) をクリックします。
- ネットワーク構成を無効にするには、ネットワーク構成の右側にある [ ] をクリックします。 次に、[Disable](無効) をクリックします。
- ネットワーク構成を削除するには、ネットワーク構成の右側にある [ ] をクリックします。 その後、[削除] をクリックします。
5. 必要に応じて、フェールオーバー ネットワークをネットワーク構成に追加します
メモ
VNET フェールオーバーは パブリック プレビュー であり、変更される可能性があります。
ネットワーク構成用のフェールオーバー ネットワークを構成できます。 フェールオーバー ネットワークはセカンダリ Azure Virtual Network サブネットであり、プライマリ サブネットとは異なる Azure リージョンに存在する可能性があります。 リージョンの停止またはその他の中断によってプライマリ サブネットが使用できなくなった場合は、フェールオーバー ネットワークでランナー トラフィックをセカンダリ サブネット経由でルーティングし、 GitHub Actions ワークフローの継続性を維持できます。
VNET フェールオーバーに関する重要なポイント:
- フェールオーバー サブネットは、プライマリ サブネットとは異なる Azure リージョンに存在できます。
- プライマリ サブネットとフェールオーバー サブネットの切り替えは、手動で行います。 フェールオーバー ネットワークは、独自の判断で有効または無効にします。
- フェールオーバーを使用するには、プライマリ サブネットとフェールオーバー サブネットの両方に必要な Azure リソース (VNET/サブネット、ネットワーク設定など) を構成する必要があります。
- フェールオーバー サブネットは 、サポートされているリージョンに存在する必要があります。
フェールオーバー ネットワークを追加する前に、上記と同じ「Azure リソースの構成」手順に従って、セカンダリ サブネットの Azure リソース (VNET、サブネット、ネットワーク セキュリティ グループ、ネットワーク設定リソース) を構成していることを確認します。 フェールオーバー サブネットは、プライマリ サブネットとは異なる Azure リージョンに配置できます。
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- 左側のサイドバーで、 [Hosted compute networking](ホストされたコンピューティング ネットワーク) をクリックします。
- フェールオーバー ネットワークを追加するネットワーク構成の横にある編集アイコン () をクリックします。 その後、[Edit configuration](構成の編集) をクリックします。
- [ フェールオーバー ネットワークの追加] をクリックします。
- ポップアップ ウィンドウで、セカンダリ (フェールオーバー) Azure サブネットのネットワーク設定リソース ID を入力します。
-
**「Azure Virtual Network」を追加**をクリックします。 - ネットワーク構成に、プライマリとフェールオーバーの 2 つのサブネットが一覧表示され、それに応じてラベルが付けられます。
6. 必要に応じて、フェールオーバー ネットワークを有効または無効にする
フェールオーバー ネットワークを追加した後、セカンダリ サブネット経由でトラフィックをルーティングできるようにしたり、無効にしてプライマリ サブネットに戻ったりすることができます。
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- 左側のサイドバーで、 [Hosted compute networking](ホストされたコンピューティング ネットワーク) をクリックします。
- ネットワーク構成の横にある編集アイコン () をクリックします。 その後、[Edit configuration](構成の編集) をクリックします。
- フェールオーバー ネットワークに切り替えるには、[ フェールオーバー VNET を有効にする] をクリックします。 ランナー トラフィックは、フェールオーバー サブネット経由でルーティングされます。
- プライマリ ネットワークに戻すには、[ フェールオーバー VNET を無効にする] をクリックします。 ランナー トラフィックはプライマリ サブネットに戻ります。
組織のネットワーク構成を構築可能にする
Enterprise 内の Organization 所有者が独自の Organization レベルのネットワーク構成を作成できるようにすることができます。
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Policies] をクリックします。
-
**[ホストされたコンピューティング ネットワーク]** をクリックします。 - [ホストされたコンピューティング ネットワーク] で、[有効] をクリックします。
-
**[保存]** をクリックします。
サブネットの削除
ネットワーク設定リソースを作成すると、指定したサブネットにサービス関連付けリンクが適用されます。 このリンクにより、GitHub Actions サービスで使用中にサブネットが誤って削除されるのを防ぐことができます。
サブネットを削除するには、まずサービスのアソシエーション リンクを削除する必要があります。 ネットワーク設定リソースが削除されると、サービスのアソシエーション リンクは自動で安全に削除されます。
ネットワーク設定リソースを削除するには、それを使用するネットワーク構成を最初に削除する必要があります。
-
企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
-
ページの上部にある [ Settings] をクリックします。
-
左側のサイドバーで、 [Hosted compute networking](ホストされたコンピューティング ネットワーク) をクリックします。
-
削除するサブネットを使用しているネットワーク構成を開きます。
-
ネットワーク構成を使用してランナー グループの一覧を確認します。
-
右上隅にある "" ボタンをクリックします。 そして、[構成の削除] をクリックします。
-
ネットワーク設定リソースを削除し、サービスのアソシエーション リンクを削除するには、Azure CLI で次のコマンドを使用して自分で入力します。 詳細については、ドキュメント『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
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 -
Azure でサブネットを削除します。 詳細については、Microsoft Learn の「サブネットの削除」を参照してください。