Skip to content

Commit 4eb8dd2

Browse files
authored
Ele 5183 GitHub privatelink docs (#2075)
* update privatelink docs to include github + creation of vpc endpoint service * align the way github is written
1 parent c238ecc commit 4eb8dd2

File tree

1 file changed

+167
-1
lines changed

1 file changed

+167
-1
lines changed

docs/cloud/integrations/security-and-connectivity/aws-privatelink-integration.mdx

Lines changed: 167 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,170 @@ Then go to "Advanced Configurations", and under "Private Link", please attach th
131131

132132
### Github Enterprise Server
133133

134-
Coming soon!
134+
Github Enterprise Server can be connected to Elementary Cloud via AWS PrivateLink. This setup requires creating a VPC endpoint service in your AWS account that exposes your GitHub Enterprise Server instance.
135+
136+
**Prerequisites:**
137+
- Your Github Enterprise Server instance must be accessible from within your AWS VPC
138+
- You must have administrative access to your AWS account
139+
- Ensure you are working in the correct AWS region where your Github Enterprise Server is deployed
140+
141+
In order to set up a PrivateLink connection with Github Enterprise Server, please follow the steps below:
142+
143+
1. **Create a VPC Endpoint Service**
144+
- Follow the detailed instructions in the [Creating a VPC Endpoint Service](#creating-a-vpc-endpoint-service) section below to set up the endpoint service for your GitHub Enterprise Server instance.
145+
146+
2. **Add a Github integration in Elementary** - Once the VPC endpoint service setup is completed, please proceed to adding a [GitHub integration](https://docs.elementary-data.com/cloud/integrations/code-repo/github). Note:
147+
* OAuth is not currently supported for Github Enterprise Server, so you should generate a fine-grained token.
148+
* You should use the same Github hostname as you would internally (Elementary will resolve that host to the privatelink endpoint)
149+
150+
## Creating a VPC Endpoint Service
151+
152+
<Note>
153+
The setup below is only required for services that are hosted in your own VPC (e.g. Github Enterprise Server). It is not required for Snowflake or Databricks which manage themselves the server-side PrivateLink setup.
154+
155+
Each integration above explicitly states if it requires setting up a VPC endpoint service.
156+
</Note>
157+
158+
In order to expose services that are hosted within your own VPC, it is required to create a VPC endpoint service. This is essentially the server-side component of PrivateLink, and the destination Elementary's VPC endpoint will connect to.
159+
160+
> **Note:** You should create the VPC endpoint service in the same region your service is located in.
161+
162+
You can follow the steps below to create an endpoint service via the AWS console.
163+
164+
### Create a network load balancer to your service
165+
166+
Before setting up the VPC endpoint service, it is required to set up an internal network load balancer pointing to the service you are exposing.
167+
Setting up a load balancer consists of the following sub-steps:
168+
169+
**1. Create a target group**
170+
171+
Under the EC2 page in AWS, navigate to the Target Groups menu and click "Create target group". Please follow the wizard and fill the following details:
172+
173+
1. **Target type** - You should select this based on the method you used to deploy your service - e.g. based on Instance or IP address.
174+
2. **Target group name** - Choose a name for the target group
175+
3. **Protocol : Port** - Choose this based on the service you are exposing (normally should be HTTP / HTTPS)
176+
4. **IP address type** - IPv4.
177+
5. **VPC** - The VPC your service is deployed in.
178+
179+
<img
180+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765798825/endpointservice_create_target_group_bbgbcx.png"
181+
alt="Create target group"
182+
/>
183+
<img
184+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765799351/endpointservice_create_target_group_2_uybxlp.png"
185+
alt="Create target group"
186+
/>
187+
188+
**2. Create a Network Load Balancer (NLB)**
189+
190+
Under the EC2 page in AWS, navigate to "Load Balancers" and click on "Create load balancer". Choose **Network Load Balancer** and proceed with the creation. Please follow the wizard and fill the following details:
191+
1. **Load balancer name** - Choose a name for the load balanver (e.g. "github-lb")
192+
2. **Scheme** - Internal.
193+
3. **Load balancer IP address type** - IPv4.
194+
4. **VPC** - Choose same VPC as the one you used for the target group above.
195+
5. **Mappings** - Select one or more private subnets.
196+
6. **Security groups** - Select a security group with access to your service. Please grant access to the relevant ports for your service, to the following IP ranges (these are the internal IPs Elementary may connect to your service from):
197+
* 10.0.1.x
198+
* 10.0.2.x
199+
* 10.0.3.x
200+
7. **Listeners** - Select the target group, protocol, and port from Step 1.
201+
202+
<img
203+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765799861/endpointservice_nlb_1_ljo7te.png"
204+
alt="Create Network Load Balancer"
205+
/>
206+
<img
207+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765799861/endpointservice_nlb_2_t4yksc.png"
208+
alt="Create Network Load Balancer"
209+
/>
210+
<img
211+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765799861/endpointservice_nlb_3_akprjk.png"
212+
alt="Create Network Load Balancer"
213+
/>
214+
215+
**3. Verify the Target Group is Healthy**
216+
217+
Once the load balancer from the previous step is ready, please navigate to the target group you created above. It should be listed as "Healthy".
218+
219+
<img
220+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765799075/endpointservice_target_group_healthy_pvzqcn.png"
221+
alt="Ensure target group is healthy"
222+
/>
223+
224+
If it appears as "Unhealthy" for some reason, please ensure the security group provides access to the service, that the health check is configured correctly, and of course that the service itself is available.
225+
226+
**4. Enable Cross-Zone Load Balancing**
227+
228+
If you selected more than one subnet for the load balancer above:
229+
* Navigate back to the "Load Balancer" screen
230+
* Choose the load balancer you created.
231+
* Click on Actions -> Edit load balancer attributes.
232+
* Enable the setting "Enable cross-zone load balancing".
233+
234+
If you selected more than one subnet (availability zone) when creating the NLB in Step 2, navigate back to the Load Balancer, then select Actions → Edit load balancer attributes. From this page, select "Enable cross-zone load balancing" and save your changes.
235+
236+
### Create a VPC Endpoint Service and approve access for Elementary
237+
238+
**1. Create a VPC Endpoint Service**
239+
240+
Navigate to the VPC page in AWS, go to "Endpoint services," and select "Create endpoint service." Please follow the wizard and fill in the following details:
241+
242+
1. **Name** - Choose a name for your VPC endpoint service.
243+
2. **Load balancer type** - Network.
244+
3. **Available load balancers** - Select the network load balancer (NLB) created above.
245+
4. **Require acceptance for endpoint** - Yes (so new connections will require approval, see below)
246+
5. **Enable private DNS name** - No.
247+
6. **Supported IP address types** - IPv4.
248+
249+
<img
250+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765802107/endpointservice_create_endpoint_service_1_a7aqjs.png"
251+
alt="Create endpoint service"
252+
/>
253+
<img
254+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765802107/endpointservice_create_endpoint_service_2_hrefnp.png"
255+
alt="Create endpoint service"
256+
/>
257+
258+
Once the service is created, please go to the "Details" tab and save the "Service name" attribute, you will need later to provide it to the Elementary team.
259+
260+
**2. Allow the Elementary Principal**
261+
262+
Once the VPC endpoint service is successfully created, navigate to the "Allow principals tab" and click on "Allow Principals". Then add the following principal:
263+
```
264+
arn:aws:iam::743289191656:root
265+
```
266+
267+
After the endpoint service finishes creating, navigate to the "Allow principals" section and select "Allow principals." Add Elementary's AWS account ID: `743289191656`.
268+
269+
<img
270+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765802297/endpointservice_allow_principals_b4jtei.png"
271+
alt="Allow elementary principal"
272+
/>
273+
274+
**3. Contact the Elementary team to configure the PrivateLink connection**
275+
276+
Please provide the Elementary team with the following details:
277+
1. Your AWS account ID.
278+
2. Your AWS region.
279+
3. The VPC endpoint service name (from step 1).
280+
4. The relevant service / integration (e.g. Github).
281+
5. The hostname you use internally to connect to your service.
282+
283+
**4. Accept the endpoint connection request**
284+
285+
Once you got confirmation from the Elementary team that the private link connection is set up, you need to approve
286+
the VPC endpoint connection from Elementary. You can do so with the following steps:
287+
* In the VPC page in your AWS console, go to "Endpoint Services", and then choose the endpoint service that you created in step 1.
288+
* Under the "Endpoint Connections" tab, you should see a pending connection, select it.
289+
* Click on Actions->Accept endpoint connection request to accept the connection.
290+
291+
After a couple of minutes the connection should change from "Pending" to "Available".
292+
293+
<img
294+
src="https://res.cloudinary.com/dgpojk42n/image/upload/v1765798824/endpointservice_approve_endpoint_mmtvro.png"
295+
alt="Accept endpoint connection request"
296+
/>
297+
298+
**5. Notify the elementary team**
299+
300+
Once the endpoint connection is approved and shows as "Available", please reach out to the Elementary team, so we will ensure the connection is ready and working.

0 commit comments

Comments
 (0)