Skip to main content

Configuring PrivateLink for self-hosted cloud version control systems (VCS)

Limited to certain Enterprise tiers

The PrivateLink feature is available on the following dbt Cloud Enterprise tiers:

  • Business Critical
  • Virtual Private

To learn more about these tiers, contact us at sales@getdbt.com.

AWS PrivateLink provides private connectivity from dbt Cloud to your self-hosted cloud version control system (VCS) service by routing requests through your virtual private cloud (VPC). This type of connection does not require you to publicly expose an endpoint to your VCS repositories or for requests to the service to traverse the public internet, ensuring the most secure connection possible. AWS recommends PrivateLink connectivity as part of its Well-Architected Framework and details this particular pattern in the Shared Services section of the AWS PrivateLink whitepaper.

You will learn, at a high level, the resources necessary to implement this solution. Cloud environments and provisioning processes vary greatly, so information from this guide may need to be adapted to fit your requirements.

High level overview of the dbt Cloud and AWS PrivateLink for VCS architectureHigh level overview of the dbt Cloud and AWS PrivateLink for VCS architecture

Required resources for creating a connection

Creating an Interface VPC PrivateLink connection requires creating multiple AWS resources in your AWS account(s) and private network containing the self-hosted VCS instance. You are responsible for provisioning and maintaining these resources. Once provisioned, connection information and permissions are shared with dbt Labs to complete the connection, allowing for direct VPC to VPC private connectivity.

This approach is distinct from and does not require you to implement VPC peering between your AWS account(s) and dbt Cloud.

1. Provision AWS resources

Creating an Interface VPC PrivateLink connection requires creating multiple AWS resources in the account containing, or connected to, your self-hosted cloud VCS. These resources can be created via the AWS Console, AWS CLI, or Infrastructure-as-Code such as Terraform or AWS CloudFormation.

  • Security Group (AWS hosted only) — If you are connecting to an existing VCS install, this likely already exists, however, you may need to add or modify Security Group rules to accept traffic from the Network Load Balancer (NLB) created for this Endpoint Service.
  • Target Group(s) - A Target Group is attached to a Listener on the NLB and is responsible for routing incoming requests to healthy targets in the group. If connecting to the VCS system over both SSH and HTTPS, two Target Groups will need to be created.
    • Target Type (choose most applicable):
      • Instance/ASG: Select existing EC2 instance(s) where the VCS system is running, or an autoscaling group (ASG) to automatically attach any instances launched from that ASG.
      • Application Load Balancer (ALB): Select an ALB that already has VCS EC2 instances attached (HTTP/S traffic only).
      • IP Addresses: Select the IP address(es) of the EC2 instances where the VCS system is installed. Keep in mind that the IP of the EC2 instance can change if the instance is relaunched for any reason.
    • Protocol/Port: Choose one protocol and port pair per Target Group, for example:
      • TG1 - SSH: TCP/22
      • TG2 - HTTPS: TCP/443 or TLS if you want to attach a certificate to decrypt TLS connections (details).
    • VPC: Choose the VPC in which the VPC Endpoint Service and NLB will be created.
    • Health checks: Targets must register as healthy in order for the NLB to forward requests. Configure a health check that’s appropriate for your service and the protocol of the Target Group (details).
    • Register targets: Register the targets (see above) for the VCS service (details). It's critical to be sure targets are healthy before attempting connection from dbt Cloud.
  • Network Load Balancer (NLB) - Requires creating a Listener that attaches to the newly created Target Group(s) for port 443 and/or 22, as applicable.
    • Scheme: Internal
    • IP address type: IPv4
    • Network mapping: Choose the VPC that the VPC Endpoint Service and NLB are being deployed in, and choose subnets from at least two Availability Zones.
    • Listeners: Create one Listener per Target Group that maps the appropriate incoming port to the corresponding Target Group (details).
  • Endpoint Service - The VPC Endpoint Service is what allows for the VPC to VPC connection, routing incoming requests to the configured load balancer.
    • Load balancer type: Network.
    • Load balancer: Attach the NLB created in the previous step.
    • Acceptance required (recommended): When enabled, requires a new connection request to the VPC Endpoint Service to be accepted by the customer before connectivity is allowed (details).

2. Grant dbt AWS account access to the VPC Endpoint Service

Once these resources have been provisioned, access needs to be granted for the dbt Labs AWS account to create a VPC Endpoint in our VPC. On the provisioned VPC endpoint service, click the Allow principals tab. Click Allow principals to grant access. Enter the ARN of the following IAM role in the appropriate production AWS account and save your changes (details).

  • Principal: arn:aws:iam::346425330055:role/MTPL_Admin
Enter ARNEnter ARN

3. Obtain VPC Endpoint Service Name

Once the VPC Endpoint Service is provisioned and configured find the service name in the AWS console by navigating to VPCEndpoint Services and selecting the appropriate endpoint service. Copy the service name field value and include it in your communication to dbt Cloud support.

Get service name field valueGet service name field value
Custom DNS configuration

If the connection to the VCS service requires a custom domain and/or URL for TLS, a private hosted zone can be configured by the dbt Labs Infrastructure team in the dbt Cloud private network. For example:

  • Private hosted zone: examplecorp.com
  • DNS record: github.examplecorp.com

4. Add the required information to the template below, and submit your request to dbt Support:

Subject: New Multi-Tenant PrivateLink Request
- Type: VCS Interface-type
- VPC Endpoint Service Name:
- Custom DNS (optional)
- Private hosted zone:
- DNS record:
- VCS install AWS Region (e.g., us-east-1, eu-west-2):
- dbt Cloud multi-tenant environment (US, EMEA, AU):

dbt Labs will work on your behalf to complete the PrivateLink setup. Please allow 3-5 business days for this process to complete. Support will contact you when the endpoint is available.

5. Accepting the connection request

When you have been notified that the resources are provisioned within the dbt Cloud environment, you must accept the endpoint connection (unless the VPC Endpoint Service is set to auto-accept connection requests). Requests can be accepted through the AWS console, as seen below, or through the AWS CLI.

Accept the connection requestAccept the connection request

Once you accept the endpoint connection request, you can use the PrivateLink endpoint in dbt Cloud.

Configure in dbt Cloud

Once dbt confirms that the PrivateLink integration is complete, you can use it in a new or existing git configuration.

  1. Select PrivateLink Endpoint as the connection type, and your configured integrations will appear in the dropdown menu.
  2. Select the configured endpoint from the drop down list.
  3. Click Save.
Configuring a new git integration with PrivateLinkConfiguring a new git integration with PrivateLink
Editing an existing git integration with PrivateLinkEditing an existing git integration with PrivateLink

Troubleshooting

If the PrivateLink endpoint has been provisioned and configured in dbt Cloud, but connectivity is still failing, check the following in your networking setup to ensure requests and responses can be successfully routed between dbt Cloud and the backing service.

Configuration

Start with the configuration:

 1. NLB Security Group
 2. NLB Listener and Target Group
 3. Cross-zone Load Balancing
 4. Routing tables and ACLs

Monitoring

To help isolate connection issues over a PrivateLink connection from dbt Cloud, there are a few monitoring sources that can be used to verify request activity. Requests must first be sent to the endpoint to see anything in the monitoring. Contact dbt Support to understand when connection testing occurred or request new connection attempts. Use these times to correlate with activity in the following monitoring sources.

 VPC Endpoint Service Monitoring
 NLB Monitoring
 VPC Flow Logs
0