# 組織内のGitHubホストランナーのプライベート ネットワークAzureについて

Azure Virtual Network (VNET) で GitHubホストランナーを使用するためのプライベート ネットワーク構成を作成できます。

## GitHubホストランナーの Azure プライベート ネットワークについて

Azure VNET での GitHub ホストランナーを使用できます。 これにより、ランナーのネットワーク ポリシーを完全に制御しながら、CI/CD の GitHub マネージド インフラストラクチャを利用することができます。 Azure VNET の詳細については、Azure ドキュメントの「[Azure Virtual Network とは](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview)」を参照してください。

複数の VNET サブネットを接続して GitHub し、ランナー グループを介してランナーのプライベート リソース アクセスを管理できます。 ランナー グループの詳細については、「[より大きなランナーへのアクセスの制御](/ja/actions/how-tos/manage-runners/larger-runners/control-access)」を参照してください。

Azure VNET 内でホストGitHubランナーを使用すると、次のアクションを実行できます。

* Azure VNET からアクセス可能なオンプレミス リソースなど、インターネット ポートを開かずにランナーを Azure VNET 内のリソースにプライベートに接続します。
* 送信ネットワーク ポリシーを完全に制御して、 GitHubホストランナーがアクセスまたは接続できる対象を制限します。
* GitHubホストランナーのネットワーク ログを監視し、ランナーとの間のすべての接続を表示します。

## Azure VNET での大規模ランナーの使用について

Azure VNET プライベート ネットワークは、大規模なランナー (2 \~ 64 vCPU Ubuntu および Windows) でのみ使用できます。 標準 GitHubホストランナーはサポートされていません。 より大きなランナーの種類の詳細については、「 [ラージャー ランナー リファレンス](/ja/actions/reference/runners/larger-runners#specifications-for-general-larger-runners)」を参照してください。

GitHub でホストされたランナーのプライベート ネットワークでは、larger runner の静的 IP アドレスはサポートされていません。 大規模なランナーの既定の構成である動的 IP アドレスを使用する必要があります。 大規模ランナー向けのネットワークの詳細については、「[ラージャー ランナー リファレンス](/ja/actions/reference/runners/larger-runners#networking-for-larger-runners)」を参照してください。

## ネットワーク通信について

GitHub ネットワークと VNET 間の通信を容易にするために、GitHubホストランナーのネットワーク インターフェイス カード (NIC) が Azure VNET にデプロイされます。 ランナーは、常にサブネットと同じAzureリージョンにデプロイされます。

NIC は VNET 内に存在するため、 GitHub は受信接続をブロックできません。 既定では、Azure 仮想マシンは同じ VNET からの受信接続を受け入れます。 詳細については、Microsoft Learn の「[`AllowVNetInBound`](https://learn.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview#allowvnetinbound)」を参照してください。 ランナーへのすべての受信接続を明示的にブロックすることをお勧めします。
GitHub がこれらのマシンへの受信接続を必要とすることはありません。

NIC により、Azure 仮想マシン (VM) でインターネット、Azure、オンプレミスのリソースと通信できます。 このように、すべての通信はネットワーク境界内でプライベートに保たれ、VNet に適用されるネットワーク ポリシーもランナーに適用されます。 ネットワーク インターフェイスを管理する方法の詳細については、Microsoft Learn の「[ネットワーク インターフェイス設定を変更する](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface?tabs=azure-portal#change-network-interface-settings)」を参照してください。

> \[!NOTE] 間もなく、GitHub Actions サービスによって作成された NIC は、Azure サブスクリプションに表示されなくなります。 今後、NIC はサービス サブスクリプションにプロビジョニングされ、サブネットから IP アドレスが割り当てられます。

![GitHub とプライベート ネットワークの間のネットワーク通信の図。 各ステップには番号が付いており、図の下の一覧に表示されているステップに対応します。](/assets/images/help/actions/actions-vnet-injected-larger-runners-architecture.png)

1. GitHub Actions ワークフローがトリガーされます。
2. GitHub Actions サービスがランナーを作成します。
3. ランナー サービスは、GitHubホストランナーのネットワーク インターフェイス カード (NIC) を Azure VNET にデプロイします。
4. ランナー エージェントがワークフロー ジョブを取得します。
   GitHub Actions サービスはジョブをキューに追加します。
5. ランナーは、 GitHub Actions サービスにログを送り返します。
6. NIC はオンプレミスのリソースにアクセスします。

## サポートされている地域について

GitHubは、ランナーを接続先のサブネットと同じAzure リージョンにデプロイします。 このため、サブネットはサポートされているリージョンのいずれかに存在する必要があります。
GitHub Actions サービスは、Azureが提供するすべてのリージョンのサブセットをサポートしているため、GitHub Actions サービスとサブネット間の通信が容易になります。

> \[!NOTE]
> データ所在地でGHE.comを使用する場合、サポートされているリージョンは異なります。 「[GHE.com のネットワークの詳細](/ja/enterprise-cloud@latest/admin/data-residency/network-details-for-ghecom#supported-regions-for-azure-private-networking)」を参照してください。

GitHub.comでは、次のリージョンがサポートされています。

<ul style="-webkit-column-count: 2; -moz-column-count: 2; column-count: 2;">
<li><code>AustraliaEast</code></li>
<li><code>BrazilSouth</code></li>
<li><code>CanadaCentral</code></li>
<li><code>CanadaEast</code></li>
<li><code>CentralUs</code></li>
<li><code>EastAsia</code></li>
<li><code>EastUs</code></li>
<li><code>EastUs2</code></li>
<li><code>FranceCentral</code></li>
<li><code>JapanWest</code></li>
<li><code>KoreaCentral</code></li>
<li><code>NorthCentralUs</code></li>
<li><code>NorwayEast</code></li>
<li><code>SouthCentralUs</code></li>
<li><code>SoutheastAsia</code></li>
<li><code>SouthIndia</code></li>
<li><code>SwedenCentral</code></li>
<li><code>SwitzerlandNorth</code></li>
<li><code>UkSouth</code></li>
<li><code>UkWest</code></li>
<li><code>WestUs</code></li>
<li><code>WestUs2</code></li>
<li><code>WestUs3</code></li>
</ul>

Azure プライベート ネットワークは、次のリージョンの GPU ランナーをサポートしています。

* `EastUs`
* `NorthCentralUs`
* `SouthCentralUs`
* `WestUs`

Azure プライベート ネットワークは、次のリージョンで arm64 ランナーをサポートしています。

* `CentralUs`
* `EastUs`
* `EastUs2`
* `NorthCentralUs`
* `SouthCentralUs`
* `WestUs`
* `WestUs2`
* `WestUs3`

近日中に新しいリージョンのサポートを要求するプロセスを開始する予定です。 また、Azure リージョン間で仮想ネットワークを接続するのに、グローバル仮想ネットワーク ピアリングを使用します。 詳細情報については、Azure ドキュメントの「[仮想ネットワーク ピアリング](https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview)」を参照してください。

## GitHub Actions サービスのアクセス許可について

NIC を正常にデプロイし、NIC をサブネットに参加させるために、GitHub Actions サービスは Azure サブスクリプションで次の Azure ロールベースのアクセス制御 (RBAC) アクセス許可を維持します。 Azure リソースのきめ細かなアクセス管理の詳細については、Azure ドキュメントの「[Azure RBAC](https://learn.microsoft.com/en-us/azure/role-based-access-control/)」を参照してください。

* `GitHub.Network/operations/read`
* `GitHub.Network/networkSettings/read`
* `GitHub.Network/networkSettings/write`
* `GitHub.Network/networkSettings/delete`
* `GitHub.Network/RegisteredSubscriptions/read`
* `Microsoft.Network/locations/operations/read`
* `Microsoft.Network/locations/operationResults/read`
* `Microsoft.Network/locations/usages/read`
* `Microsoft.Network/networkInterfaces/read`
* `Microsoft.Network/networkInterfaces/write`
* `Microsoft.Network/networkInterfaces/delete`
* `Microsoft.Network/networkInterfaces/join/action`
* `Microsoft.Network/networkSecurityGroups/join/action`
* `Microsoft.Network/networkSecurityGroups/read`
* `Microsoft.Network/publicIpAddresses/read`
* `Microsoft.Network/publicIpAddresses/write`
* `Microsoft.Network/publicIPAddresses/join/action`
* `Microsoft.Network/routeTables/join/action`
* `Microsoft.Network/virtualNetworks/read`
* `Microsoft.Network/virtualNetworks/subnets/join/action`
* `Microsoft.Network/virtualNetworks/subnets/read`
* `Microsoft.Network/virtualNetworks/subnets/write`
* `Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/delete`
* `Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/read`
* `Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/write`
* `Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/details/read`
* `Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/validate/action`
* `Microsoft.Resources/subscriptions/resourceGroups/read`
* `Microsoft.Resources/subscriptions/resourcegroups/deployments/read`
* `Microsoft.Resources/subscriptions/resourcegroups/deployments/write`
* `Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read`
* `Microsoft.Resources/deployments/read`
* `Microsoft.Resources/deployments/write`
* `Microsoft.Resources/deployments/operationStatuses/read`

次のアクセス許可は、Azure テナント内の 2 つのエンタープライズ アプリケーションに存在します。 Azure プライベート ネットワークを構成すると、Azure テナントのエンタープライズ アプリケーションが表示されます。

* `GitHub CPS Network Service` id: `85c49807-809d-4249-86e7-192762525474`
* `GitHub Actions API` id: `4435c199-c3da-46b9-a61d-76de3f2c9f82`

## VNET のネットワーク ポリシーの使用

GitHub ホストランナーの NIC が Azure VNET にデプロイされるため、VNET に適用されるネットワーク ポリシーもランナーに適用されます。

たとえば、VNet がオンプレミスのリソース (例:Artifactory) へのアクセスを提供するように Azure ExpressRoute で構成されている場合、または他のクラウドベースのリソースへのアクセスを提供するために VPN トンネルに接続されている場合、これらのアクセス ポリシーはランナーにも適用されます。 さらに、VNET のネットワーク セキュリティ グループ (NSG) に適用される送信規則も適用され、ランナーの送信アクセスを制御できます。

VNET のネットワーク ログ監視を有効にしている場合は、ランナーのネットワーク トラフィックを監視することもできます。

GitHub ホストランナーは、ネットワークで使用されている送信制御を使用します。 ネットワークが Azure の既定の送信アクセスに依存している場合、IP は予測できず、GitHub IP 許可リストに追加できません。 安定した送信 IP の使用に関する推奨事項については、Azure ドキュメントの「[既定の送信アクセス](https://learn.microsoft.com/en-us/azure/virtual-network/ip-services/default-outbound-access)」を参照してください。

## VNET フェールオーバーについて

> \[!NOTE]
> VNET フェールオーバーは パブリック プレビュー であり、変更される可能性があります。

ネットワーク構成用のフェールオーバー ネットワークを構成できます。 フェールオーバー ネットワークはセカンダリ Azure Virtual Network サブネットであり、プライマリ サブネットとは異なる Azure リージョンに存在する可能性があります。 リージョンの停止またはその他の中断によってプライマリ サブネットが使用できなくなった場合は、フェールオーバー ネットワークでランナー トラフィックをセカンダリ サブネット経由でルーティングし、 GitHub Actions ワークフローの継続性を維持できます。

VNET フェールオーバーに関する重要なポイント:

* フェールオーバー サブネットは、プライマリ サブネットとは異なる Azure リージョンに存在できます。
* プライマリ サブネットとフェールオーバー サブネットの切り替えは、手動で行います。 フェールオーバー ネットワークは、独自の判断で有効または無効にします。
* フェールオーバーを使用するには、プライマリ サブネットとフェールオーバー サブネットの両方に必要な Azure リソース (VNET/サブネット、ネットワーク設定など) を構成する必要があります。
* フェールオーバー サブネットは [、サポートされているリージョン](/ja/enterprise-cloud@latest/admin/configuring-settings/configuring-private-networking-for-hosted-compute-products/about-azure-private-networking-for-github-hosted-runners-in-your-enterprise#about-supported-regions)に存在する必要があります。

フェールオーバー ネットワークの構成の詳細については、「 [組織内のGitHubホストランナーのプライベート ネットワークの構成](/ja/organizations/managing-organization-settings/configuring-private-networking-for-github-hosted-runners-in-your-organization#5-optionally-add-a-failover-network-to-a-network-configuration)」を参照してください。

## Azure VNET での GitHubホストランナーの使用

Azure VNET でGitHubホストランナーを使用するには、Azure リソースを構成し、GitHubでネットワーク構成を作成する必要があります。

Organization レベルで Azure プライベート ネットワークを構成する手順については、「[組織内のGitHubホストランナーのプライベート ネットワークの構成](/ja/organizations/managing-organization-settings/configuring-private-networking-for-github-hosted-runners-in-your-organization)」を参照してください。