Azure Private Link

Public Preview | Advanced

Overview

The Posit Team Native App supports installation into a Snowflake account configured to use Azure Private Link. An Azure Private Link configuration is automatically detected and used by Posit Team.

Reach out to your Snowflake representative for more information about using Snowflake Native Apps and Snowpark Container Services with Google Cloud Private Service Connect.

Azure Private Link provides secure connectivity between the Snowflake containerized environment (SPCS) and your Azure VNet. This works well for inbound traffic to your VNet resources. Snowflake Native Apps have a limitation: they cannot send outbound traffic directly to Snowflake endpoints (e.g. OAuth and SQL APIs) through the standard Azure Private Link setup. This affects how the Posit Team Native App communicates back to Snowflake.

To avoid this limitation, Snowflake recommends and supports the use of an Azure Application Gateway with Private Link as documented in Snowflake’s outbound connectivity guide. This enables applications to proxy outbound traffic back to the Snowflake Azure Private Link interfaces.

All resources created in this setup — Application Gateway with Private Link configuration, Private Endpoints, and Snowflake external access configurations — are standard Azure networking primitives, deployed in accordance with both Snowflake’s validated Azure Private Link architecture and Azure Private Link best practices. No public-facing infrastructure is created, and all traffic remains confined within your Azure environment, maintaining strong security and network boundaries.

Network architecture

A high level overview of the required Azure resources is shown below.

This architecture uses:

  • A Private Endpoint to connect to Snowflake privately.
  • An Application Gateway with Private Link enabled that proxies SPCS outbound requests to Snowflake.
  • Snowflake creates a Private Endpoint connection to your Application Gateway.

Private Link Architecture

Private Link Architecture

Summary of steps

This guide assumes you have already followed the Posit Team Native App installation steps. Once you have completed this additional configuration, all Snowflake data and OAuth will travel through your configured VPC.

In order to use the Posit Team Native App with Azure Private Link you must:

  1. Configure Azure Private Link access for your Snowflake account.
  2. Create an Application Gateway with Private Link enabled.
  3. Provision the Application Gateway endpoint in Snowflake.
  4. Approve the Private Endpoint connection from Snowflake.
  5. Update the Native App network rules to use Private Link.

For more information see the Snowflake instructions describing how to configure Azure Private Link and setting up private endpoints.

Modify Snowflake app configuration

Snowflake does not currently provide support for the Posit Team Native App to present users with multiple configuration options for external access. Thus we have to give instructions for customers to modify the existing external access integration and network rule setup on initial install.

Create network rules

You will need to create one network rule. A private host port rule to route traffic through the Private Link Service you set up in Azure. Use DNS name <org-account>.privatelink.snowflakecomputing.com from DNS validation.

Substitute your application name in {POSIT_TEAM} below and your Snowflake account URL in the value list. Both host and port 443 need to be specified.

Snowsight UI
CREATE OR REPLACE NETWORK RULE
  {POSIT_TEAM}_APP_DATA.DATA.POSIT_TEAM_PRIVATE_EGRESS
  MODE = EGRESS
  TYPE = PRIVATE_HOST_PORT
  VALUE_LIST = ('<org-account>.privatelink.snowflakecomputing.com:443');

GRANT OWNERSHIP ON NETWORK RULE {POSIT_TEAM}_APP_DATA.DATA.POSIT_TEAM_PRIVATE_EGRESS TO ROLE NATIVE_APP_ADMIN;

Alter External Access Integration

Modify the existing external access integration to only allow private egress using your network rules. You can find the correct integration name by running SHOW EXTERNAL ACCESS INTEGRATIONS.

Snowsight UI
ALTER EXTERNAL ACCESS INTEGRATION {POSIT_TEAM}_EGRESS_EXTERNAL_ACCESS
  SET ALLOWED_NETWORK_RULES = (
    {POSIT_TEAM}_APP_DATA.DATA.WORKBENCH_PUBLIC_EGRESS
    {POSIT_TEAM}_APP_DATA.DATA.POSIT_TEAM_PRIVATE_EGRESS) ENABLED = TRUE;

ALTER EXTERNAL ACCESS INTEGRATION {POSIT_TEAM}_EGRESS_EXTERNAL_ACCESS
  SET ALLOWED_NETWORK_RULES = (
    {POSIT_TEAM}_APP_DATA.DATA.CONNECT_PUBLIC_EGRESS
    {POSIT_TEAM}_APP_DATA.DATA.POSIT_TEAM_PRIVATE_EGRESS) ENABLED = TRUE;

Test connection

Everything should just work at this point. In fact if your Posit Team Native App starts, it means that our checks for Private Link have already succeeded. Visit your Posit Team Native App.

  1. Complete the normal OAuth managed credential flow in Posit Workbench; you should see OAuth authentication go through .privatelink URLs and complete successfully
  2. Start a session in any Posit Workbench IDE
  • Open a terminal and run cat $SNOWFLAKE_HOME/connections.toml and you should see a .privatelink in the text
  1. Follow the Posit Workbench user guide for connecting with R in RStudio or Positron
  2. Follow the Posit Workbench user guide for connecting with Python in VS Code, Jupyter, or Positron

Troubleshooting

Setting up Private Link properly can go wrong in many ways. When troubleshooting, we suggest starting from the Private Endpoint to Snowflake and then moving towards the Posit Team Native App when debugging. All customers’ VNets can look entirely different. We have marked important checks throughout this guide on things to check.

  1. Check that the Application Gateway backend health is healthy. This step gives you high assurance that the Application Gateway is properly connected to your Private Endpoint for Snowflake (basically all Azure-specific components are configured properly). Note that Network Security Groups are a common way that health checks fail.

  2. Verify that Private Link is enabled on your Application Gateway and that the Private Link configuration is associated with the correct frontend IP.

  3. Check that you have approved the Private Endpoint connection from Snowflake on your Application Gateway. This step confirms that Snowflake is connected to your Application Gateway.

  4. Check that <org-account>.privatelink.snowflakecomputing.com matches in the provision Snowflake endpoint and the network rule that you created, and that the hostname is the one generated from validating DNS.

  5. Verify that the Application Gateway Resource ID used in SYSTEM$PROVISION_PRIVATELINK_ENDPOINT() is correct and includes the full path with subscription, resource group, and gateway name.

  6. Confirm that the frontend IP configuration name (typically appGwPrivateFrontendIpIPv4) matches what you provided to Snowflake.

  7. Confirm that Network Security Groups (NSGs) allow traffic on port 443 between:

    • Application Gateway subnet and Snowflake Private Endpoint
    • Private Link subnet and Application Gateway

If you are still running into issues, please contact support@posit.co and detail which step is currently failing.

Back to top