Skip to content

Commit 4394050

Browse files
Merge pull request #50663 from v-thpra/azure-triage-fix-1057078
Fix for Customer Feedback 1057078: Inconsistent table headings
2 parents 70922be + b0512cf commit 4394050

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

learn-pr/github/manage-github-actions-enterprise/includes/manage-runners.md

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
In this section, you'll explore the different tools and strategies available to you in GitHub Enterprise Cloud and GitHub Enterprise Server to manage the use of GitHub Actions runners in your enterprise.
1+
In this section, you explore the different tools and strategies available to you in GitHub Enterprise Cloud and GitHub Enterprise Server to manage the use of GitHub Actions runners in your enterprise.
22

33
## Choose an appropriate runner for your workload
44

@@ -20,13 +20,13 @@ The following table compares GitHub-hosted runners versus self-hosted runners. U
2020

2121
## Manage runners for the enterprise
2222

23-
Managing runners for the enterprise involves configuring and securing both GitHub-hosted and self-hosted runners to ensure efficient and secure CI/CD workflows. This includes setting up IP allowlists to control access, enhancing security by restricting runner access to specific IP addresses, and ensuring compliance with organizational policies. Proper configuration of IP allowlists for both GitHub-hosted and self-hosted runners is crucial for maintaining secure and reliable interactions between internal applications and GitHub Actions runners. Regular updates and reviews of these configurations are necessary to adapt to changes in IP address ranges and maintain optimal security.
23+
Managing runners for the enterprise involves configuring and securing both GitHub-hosted and self-hosted runners to ensure efficient and secure CI/CD workflows. This management includes setting up IP allowlists to control access, enhancing security by restricting runner access to specific IP addresses, and ensuring compliance with organizational policies. Proper configuration of IP allowlists for both GitHub-hosted and self-hosted runners is crucial for maintaining secure and reliable interactions between internal applications and GitHub Actions runners. Regular updates and reviews of these configurations are necessary to adapt to changes in IP address ranges and maintain optimal security.
2424

2525
### Configuring IP allowlists on GitHub-hosted and self-hosted runners
2626

27-
Configuring IP allowlists helps control access to runners by restricting them to specific IP addresses. This enhances security by preventing unauthorized access but may require additional network configurations.
27+
Configuring IP allowlists helps control access to runners by restricting them to specific IP addresses. This configuration enhances security by preventing unauthorized access but might require further network configurations.
2828

29-
| **This guide provides a detailed explanation of how** | **Self-hosted runners** |
29+
| **GitHub-hosted runners** | **Self-hosted runners** |
3030
|-------------------------------------------------------|------------------------------------------------------------------------------------------|
3131
| GitHub-hosted runners use dynamic IP addresses, making it difficult to configure precise IP allowlists. | Use static or controlled IPs, allowing precise IP allowlisting or IP-based access control. |
3232
| Organizations must allow GitHub’s published IP ranges. | Can be placed behind firewalls or VPNs for added security. |
@@ -35,44 +35,49 @@ Configuring IP allowlists helps control access to runners by restricting them to
3535

3636
#### Allowed IP list
3737

38-
An **allowed IP list** is a security feature that restricts access to services or resources based on predefined IP addresses. By configuring an IP allowlist, organizations can:
38+
An **allowed IP list** is a security feature that restricts access to services or resources based on predefined IP addresses. When organizations configure an IP allowlist, they can:
3939

4040
- **Enhance security:** Prevent unauthorized access by allowing only trusted IP addresses.
4141
- **Control network Traffic:** Restrict inbound and outbound requests to known and verified IPs.
4242
- **Improve compliance:** Ensure regulatory compliance by limiting access to authorized networks.
4343

44-
| **This guide provides a detailed explanation of how** | **Self-hosted runners** |
44+
| **GitHub-hosted runners** | **Self-hosted runners** |
4545
|----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
4646
| Organizations must allow GitHub's published IP ranges, which change periodically. | Admins can define specific IP addresses that are allowed to access the runners. |
4747
| GitHub-hosted runners can be configured via GitHub’s security settings. | Self-hosted runners work well with firewalls, VPNs, or cloud security groups. |
4848

49-
5049
### Configuring IP allowlists for internal applications to interact with GitHub-Hosted Runners
5150

5251
To configure IP allowlists for internal applications and systems to interact with GitHub-hosted runners, you can refer to the following official GitHub documentation:
5352

5453
#### 1. Understand GitHub's IP address ranges
55-
GitHub-hosted runners operate within specific IP address ranges. To ensure your internal applications can communicate with these runners, you need to allow these IP ranges through your firewall. GitHub provides a meta API endpoint https://api.github.com/meta that lists all current IP address ranges used by GitHub services, including those for Actions runners. Regularly updating your allowlists based on this information is essential, as IP ranges can change.
54+
55+
GitHub-hosted runners operate within specific IP address ranges. To ensure your internal applications can communicate with these runners, you need to allow these IP ranges through your firewall. GitHub provides a meta API endpoint https://api.github.com/meta that lists all current IP address ranges used by GitHub services, including IP ranges for Actions runners. Regularly updating your allowlists based on this information is essential, as IP ranges can change.
5656

5757
#### 2. Configure your firewall
5858

5959
##### a. Obtain GitHub's IP ranges:
60+
6061
- Use the meta API endpoint to retrieve the latest IP address ranges used by GitHub Actions runners.
6162

6263
##### b. Update firewall rules:
63-
- Add rules to your firewall to permit inbound and outbound traffic to and from these IP ranges. This ensures that your internal systems can interact with GitHub-hosted runners without connectivity issues.
64+
65+
- Add rules to your firewall to permit inbound and outbound traffic to and from these IP ranges. This configuration ensures that your internal systems can interact with GitHub-hosted runners without connectivity issues.
6466

6567
#### 3. Consider using self-hosted runners
66-
If maintaining an IP allowlist for GitHub-hosted runners is challenging due to frequent changes in IP ranges, consider setting up self-hosted runners within your network. This approach allows you to have more control over the runner environment and network configurations. However, be aware that using self-hosted runners requires additional maintenance and infrastructure management.
68+
69+
If maintaining an IP allowlist for GitHub-hosted runners is challenging due to frequent changes in IP ranges, consider setting up self-hosted runners within your network. This approach allows you to have more control over the runner environment and network configurations. However, using self-hosted runners requires more maintenance and infrastructure management.
6770

6871
:::image type="content" source="../media/github-self-hosted-runners.png" alt-text="Screenshot of an empty runners screen.":::
6972

7073
#### 4. Regularly review and update allowlists
74+
7175
Since GitHub's IP address ranges can change, it's crucial to periodically review and update your firewall's IP allowlists. Automating this process by scripting the retrieval of IP ranges from GitHub's meta API can help ensure your allowlists remain current without manual intervention.
7276

7377
### Effects and potential abuse vectors of enabling self-hosted runners on public repositories
7478

7579
#### Effects of enabling self-hosted runners
80+
7681
1. **Customization & performance optimization**
7782
- Self-hosted runners allow control over hardware, installed software, and environment settings.
7883
- Workflows can be optimized for performance by using dedicated, high-performance machines.
@@ -82,21 +87,22 @@ Since GitHub's IP address ranges can change, it's crucial to periodically review
8287

8388
3. **State persistence**
8489
- Self-hosted runners do **not** reset between jobs like GitHub-hosted runners.
85-
- This allows **caching dependencies**, reusing large datasets, and maintaining persistent states.
90+
- Allows **caching dependencies**, reusing large datasets, and maintaining persistent states.
8691

8792
4. **Security & maintenance responsibility**
8893
- **Security patches, dependency updates, and system monitoring** become the runner owner's responsibility.
8994
- Misconfigurations could expose the runner to external threats.
9095

9196
#### Potential abuse vectors of self-hosted runners
97+
9298
Enabling self-hosted runners on public repositories introduces significant security risks. Since **anyone** can trigger workflows by submitting a pull request, attackers can exploit this feature in various ways:
9399

94100
1. **Arbitrary Code Execution (RCE) by malicious actors**
95101
- Attackers can submit pull requests containing **malicious scripts**, which the self-hosted runner executes automatically.
96102
- If the runner has **elevated privileges**, the attacker gains **full system access**.
97103

98104
2. **Cryptocurrency mining & resource exploitation**
99-
- Attackers may abuse self-hosted runners to mine cryptocurrency, causing **unexpected high CPU and GPU usage**.
105+
- Attackers can abuse self-hosted runners to mine cryptocurrency, causing **unexpected high CPU and GPU usage**.
100106
- This increases **operational costs** and **reduces availability** for legitimate workflows.
101107

102108
3. **Data exfiltration & credential theft**
@@ -105,25 +111,27 @@ Enabling self-hosted runners on public repositories introduces significant secur
105111

106112
4. **Denial of Service (DoS) attacks**
107113
- Attackers can flood the repository with numerous pull requests to overload self-hosted runners.
108-
- If runners are on shared infrastructure, other critical workflows may be disrupted.
114+
- If runners are on shared infrastructure, other critical workflows might be disrupted.
109115

110116
5. **Lateral movement & network exploitation**
111117
- If the self-hosted runner is inside a **corporate network**, an attacker could **pivot** into internal systems.
112-
- This could lead to **data breaches**, **ransomware attacks**, or **persistent access** to private resources.
118+
- Could lead to **data breaches**, **ransomware attacks**, or **persistent access** to private resources.
113119

114120
#### Mitigation strategies
121+
115122
To reduce security risks, follow these best practices:
116123

117124
- Restrict self-hosted runners to **private repositories only**
118125
- Require **workflow approval** for pull requests from external contributors
119-
- Run self-hosted runners in a **secure, isolated environment** (e.g., containers, virtual machines)
126+
- Run self-hosted runners in a **secure, isolated environment** (for example, containers, virtual machines)
120127
- Use **firewalls and network rules** to block unauthorized access
121128
- Limit access to **sensitive secrets** and store credentials securely
122129
- **Monitor and log** runner activity to detect anomalies
123130

124131
### Selecting appropriate runners to support workloads
125132

126133
#### Understanding GitHub runners
134+
127135
GitHub Actions supports two types of runners:
128136

129137
1. **GitHub-hosted runners**
@@ -159,23 +167,28 @@ The following table compares GitHub-hosted runners versus self-hosted runners. U
159167

160168

161169
#### Choosing the right operating system for runners
170+
162171
##### 1. Linux runners (default)
172+
163173
- Best for most workloads
164174
- Fast, cost-effective, and widely supported
165175
- Used in **CI/CD, scripting, Docker, and automation**
166176
Example: `ubuntu-latest`, `ubuntu-22.04`
167177

168178
##### 2. Windows runners
179+
169180
- Needed for **.NET, Windows-based software, and GUI apps**
170181
- Supports **PowerShell, Windows-specific dependencies**
171182
Example: `windows-latest`, `windows-2022`
172183

173184
##### 3. macOS runners
174-
- Required for **iOS, macOS, Xcode, and Apple-specific builds**
185+
186+
- macOS runners are required for **iOS, macOS, Xcode, and Apple-specific builds**
175187
- Supports **Swift, Objective-C, and macOS applications**
176188
Example: `macos-latest`, `macos-13`
177189

178190
#### Best practices for Selecting Runners
191+
179192
- Use **GitHub-hosted runners** for general workflows and automation.
180193
- Use **self-hosted runners** for **custom environments, large workloads, or security-sensitive applications**.
181194
- Choose **Linux runners** for most workloads due to performance and cost efficiency.
@@ -186,7 +199,7 @@ Example: `macos-latest`, `macos-13`
186199

187200
GitHub Actions supports two types of runners for executing workflows:
188201

189-
1. **GitHub-hosted runners** – Managed by GitHub, automatically provisioned, and pre-configured with common development tools.
202+
1. **GitHub-hosted runners** – Managed by GitHub, automatically provisioned, and preconfigured with common development tools.
190203
2. **Self-hosted runners** – Managed by the user, allowing complete control over the environment, resources, and configurations.
191204

192205
This section highlights the key differences between GitHub-hosted and self-hosted runners.
@@ -196,9 +209,9 @@ This section highlights the key differences between GitHub-hosted and self-hoste
196209
| Feature | GitHub-hosted runner | Self-hosted runner |
197210
|---------|----------------------|--------------------|
198211
| **Setup & maintenance** | No setup required; GitHub manages everything | User must install, configure, and maintain |
199-
| **Scalability** | Auto-scales dynamically | Must manually provision additional runners |
212+
| **Scalability** | Autoscales dynamically | Must manually provision added runners |
200213
| **Security** | High security; fresh virtual environment for each job | Requires manual security hardening |
201-
| **Customization** | Limited; pre-installed tools only | Fully customizable; user can install any dependencies |
214+
| **Customization** | Limited; preinstalled tools only | Fully customizable; user can install any dependencies |
202215
| **Performance** | Standardized compute resources | Can use high-performance hardware |
203216
| **State persistence** | Resets after every job | Can persist data between jobs |
204217
| **Cost** | Free for public repos; limited free usage for private repos | No GitHub costs, but requires infrastructure investment |
@@ -208,30 +221,36 @@ This section highlights the key differences between GitHub-hosted and self-hoste
208221
#### Key differences & considerations
209222

210223
##### 1. Setup & maintenance
224+
211225
- **GitHub-hosted runners** require **zero setup**; users can start running workflows immediately.
212226
- **Self-hosted runners** need **manual installation, configuration, updates, and security management**.
213227

214228
##### 2. Security risks
229+
215230
- GitHub-hosted runners **run in isolated virtual machines** that reset after each job, minimizing attack surfaces.
216231
- Self-hosted runners **persist across jobs**, meaning a compromised runner can be exploited across multiple workflow runs.
217232

218233
##### 3. Performance & cost considerations
219-
- GitHub-hosted runners **provide a standard environment** but have **usage limits** (e.g., free minutes per month for private repositories).
220-
- Self-hosted runners **allow better performance tuning** (e.g., running on high-end servers) but require **infrastructure and maintenance costs**.
234+
235+
- GitHub-hosted runners **provide a standard environment** but have **usage limits** (for example, free minutes per month for private repositories).
236+
- Self-hosted runners **allow better performance tuning** (for example, running on high-end servers) but require **infrastructure and maintenance costs**.
221237

222238
##### 4. Networking & access
223-
- GitHub-hosted runners **cannot access private/internal resources** without additional configurations.
239+
240+
- GitHub-hosted runners **cannot access private/internal resources** without further configurations.
224241
- Self-hosted runners **can access internal systems**, making them ideal for **private repositories, internal tools, and on-premises deployments**.
225242

226243
#### When to use each runner?
227244

228245
**Use GitHub-hosted runners if:**
246+
229247
- You need a **quick and easy setup** without infrastructure management.
230-
- Your workflow **doesn’t require custom dependencies** beyond the pre-installed tools.
248+
- Your workflow **doesn’t require custom dependencies** beyond the preinstalled tools.
231249
- You're working on an **open-source or public repository** with **free hosted runner minutes**.
232250

233251
**Use Self-hosted runners if:**
252+
234253
- Your workflow requires **specific dependencies, configurations, or persistent states**.
235-
- You need to **access private network resources** (e.g., on-premises databases, internal services).
254+
- You need to **access private network resources** (for example, on-premises databases, internal services).
236255
- You require **higher performance machines** for **large-scale CI/CD pipelines**.
237256

0 commit comments

Comments
 (0)