S3-Compatible Storage: Avoid Port Number Traps

Blog 14 min read

Snowflake's ability to connect to storage solutions beyond native AWS S3 proves a critical architectural shift: external stages successfully decouple compute from storage. This separation lets organizations sidestep vendor lock-in without sacrificing analytics performance. The engine driving this capability is an S3-compliant API that mimics Amazon Simple Storage Service REST operations, enabling direct CRUD actions on buckets and objects without ingesting data first.

Here, we dissect how external stages store API endpoints and credentials to secure data movement across hybrid environments. We will walk through executing the COPY FILES command for data transfer and querying Apache Iceberg tables via external volumes. These workflows allow direct reading of unstructured data from on-premises devices or third-party clouds like Google Cloud and Microsoft Azure.

The ecosystem now includes 21 distinct providers compared in recent analyses, ranging from AWS and Azure to specialized players like the provider and the provider (21 S3 Providers Compared). Snowflake documentation confirms support for this expanding list, but with a catch: the endpoint must pass compliance tests and avoid port numbers in its URL. Ignoring these constraints breaks private connectivity and jeopardizes high-availability for analytics workloads.

The Role of S3-Compatible APIs in Decoupled Cloud Storage

Decoupling the S3 REST API from AWS Infrastructure

S3-compatible storage works by stripping the S3 REST API protocol away from Amazon's physical hardware. The result? Identical HTTP and XML commands function across varied backends without code changes. This split enables four distinct CRUD operations on storage buckets whether the system runs on AWS or local on-premises devices. Vendors deploy this interface on their own platforms, often creating pricing structures for data egress that differ significantly from native cloud rates different pricing models. Snowflake connects to these external solutions through stages, but only if the target endpoint passes a rigorous public test suite.

Requirement Native Behavior Compatible Constraint
Request Style Virtual-hosted Must enforce virtual-hosted-style
Encryption Managed TLS Requires valid TLS certificate
Port Usage Standard 443 No custom ports allowed

Administrators define endpoints such as `mystorage.com` without appending port numbers because `mystorage.com:3000` triggers validation failures. Cloudflare addresses containing `r2.cloudflarestorage.com` activate automatically, yet other URLs demand manual verification by Snowflake Support teams. Passing API compatibility checks does not promise equal performance metrics. Network latency between the compute cluster and the separated storage tier frequently creates the primary bottleneck instead of the API translation layer itself.rabata.io suggests measuring throughput under heavy load prior to moving production workloads to confirm the decoupled path satisfies analytics SLAs.

Deploying Validated S3 Endpoints for Snowflake on Multi-Cloud

S3-compatible endpoints serve as external stages strictly when the target URL excludes port numbers and clears strict API validation hurdles. Snowflake accounts residing on Amazon Web Services, Google Cloud, and Microsoft Azure reach these storage layers if the third-party provider upholds required protocol standards. Companies including Akave, the provider, Cloudflare, and the provider have tested products for Snowflake interoperability, though success relies on precise configuration limits. The endpoint must remain reachable from the public cloud hosting the Snowflake account to maintain connectivity. Note that Cloudflare addresses with `r2.cloudflarestorage.com` work immediately, while custom URLs need manual checking via a support ticket. This procedure requires submitting the exact software vendor name plus region details before data traffic begins.

Private links become necessary once organizations shift from proof-of-concept trials to production datasets needing lower latency. Public internet routes add variable jitter that interrupts bulk loading tasks for large-scale analytics.

Requirement Status
Virtual-hosted requests Mandatory
Port numbers Forbidden
TLS Certificate Required

Rabata.io advises checking virtual-hosted-style settings early to prevent connection timeouts during peak ingestion periods. A limitation of this separated architecture involves the loss of automatic metadata updates, strong operators to handle directory tables by hand.

Mandatory Configuration for S3 API Compliance and TLS

An S3-compatible endpoint fails Snowflake integration instantly if behavior deviates from the native Amazon service. Successful integration demands the external storage pass Snowflake's specific public test suite hosted on GitHub, acting as a binary pass/fail gauge for compatibility. Administrators must set up virtual-hosted-style requests and guarantee HTTPS communication uses a valid TLS certificate without exception. Direct credentials are required for authentication, while endpoint URLs carrying port numbers like `mystorage.com:3000` remain strictly unsupported.

Requirement Supported Configuration Forbidden Configuration
Request Style Virtual-hosted buckets Path-style buckets
Encryption HTTPS with valid TLS HTTP or self-signed certs
Credentials Direct key/secret pairs IAM role assumption only
Endpoint Format Domain only (no port) Domain with `:3000`

Flexible on-premises setups often clash with rigid cloud validation rules. Enterprises with on-premises hardware often face difficulties when local load balancers attach non-standard ports that break strict URL parsing logic.rabata.io suggests testing your endpoint URL against the public repository before filing support tickets to enable non-default providers. Although `r2.cloudflarestorage.com` functions by default, custom domains need explicit verification to stop silent data loading failures during critical ETL windows. Disregarding the port constraint forces architects to re-engineer network topology rather than simply adjusting application configuration strings. This strict adherence to protocol specifics guarantees that decoupled storage keeps the same reliability expectations as native cloud buckets.

Architecture of Snowflake Integration with External Stages

Virtual-Hosted-Style Requests and HTTPS Requirements

Snowflake connectivity mandates virtual-hosted-style requests, forcing the bucket name into the DNS subdomain rather than the URL path. This architectural constraint requires the storage endpoint to resolve `bucket.endpoint.com` directly, rejecting any path-style variation where the bucket appears after the domain. Operators must also enforce HTTPS communication backed by a valid TLS certificate. The external stage mechanism allows Snowflake accounts hosted on AWS, Google Cloud, or Azure to connect to any S3-compatible endpoint, provided the endpoint is accessible from the public cloud where the Snowflake account is hosted.

Configuration Parameter Required Value Forbidden Value
Request Style Virtual-hosted Path-style
Protocol HTTPS HTTP
Port Number None (Implicit 443) Explicit (e.g. :3000)
Certificate Valid TLS Invalid/Missing

Organizations attempting to bypass public internet exposure must ensure their internal Certificate Authority chains are trusted by the Snowflake service, or the connection will terminate. Failure to meet this single requirement stops traffic cold.

Applying Direct Credentials for Public Cloud Access

Operators must embed AWS_KEY_ID and AWS_SECRET_KEY pairs within the external stage definition to authenticate requests against the target endpoint. This approach differs fundamentally from native integrations where a Storage Integration Object delegates trust to a cloud entity. The mechanism requires the storage backend to accept standard S3 authentication headers over HTTPS communication without relying on instance profiles.

The endpoint URL must not contain a port number; configurations like `mystorage.com:3000` are explicitly unsupported. If the virtual-hosted-style request structure is not preserved during the handshake, the connection fails. The endpoint must be highly compliant with the S3 API and able to pass the public test suite available on GitHub; if the endpoint does not behave like S3, it cannot work with Snowflake.

Configuration Element Required Value Failure Symptom
Authentication Direct Keys Access Denied
URL Format No Port Number Unsupported Configuration
Protocol HTTPS Only Connection Failure

Verify your vendor supports this specific auth mode before purchasing hardware. Before sending a request to enable an endpoint, users must verify the endpoints by using the public test suite. Skipping this step invites immediate rejection.

Failure Modes: Port Numbers and API Non-Compliance

Endpoints containing a port number like `mystorage.com:3000` trigger immediate connection rejection by the Snowflake loader. This hard constraint eliminates non-standard ports entirely, forcing operators to route traffic through standard HTTPS gateways or reverse proxies. A more subtle failure mode emerges when the storage backend fails to replicate the exact behavior of the native Amazon S3 REST API. If the endpoint does not behave like S3, it cannot work with Snowflake regardless of credential validity. This strict requirement means that the endpoint must be able to pass the public test suite to ensure compatibility.

Failure Mode Symptom Resolution
Port in URL Connection timeout Remove port; use standard 443
API Deviation Incompatibility Pass public test suite
Path-Style Requests 307 Redirect loops Enable virtual-hosted mode

Operators must verify compatibility using the public test suite before attempting production loads. Unlike native integrations, S3-compatible stages do not support automatic metadata updates; when adding a directory table, the AUTO_REFRESH parameter must be set to FALSE. The limitation is clear: while decoupling storage reduces costs, it increases the operational burden of maintaining strict API compliance. Validating every custom endpoint against these rigid standards is necessary to avoid data loading failures.

Implementing Data Workflows via External Stages and Tables

Defining External Stages for S3-Compatible Storage

Operators initiate connectivity by executing the CREATE STAGE command to define a named object that encapsulates the remote path and credentials. This definition enables core actions like listing files, loading batches, and unloading results without moving the underlying data physically. Organizations with on-premises devices apply this mechanism to bypass lift-and-shift migration while accessing local S3-compatible endpoints directly.

  1. Specify the `URL` using the `s3compat` protocol scheme and the target bucket path.
  2. Define the `ENDPOINT` hostname without appending any port numbers.
  3. Inject `AWS_KEY_ID` and `AWS_SECRET_KEY` pairs within the `CREDENTIALS` block.
  4. Set AUTO_REFRESH to FALSE if adding a directory table to the stage.

Setting AUTO_REFRESH to FALSE creates a specific operational tension between metadata freshness and system stability. Metadata for S3-compatible external stages cannot refresh automatically. Architects must explicitly trigger metadata updates after file arrivals. Directory listings accurately reflect the current state of the storage location before queries run only after this manual step occurs.

Executing COPY INTO for Data Loading and Unloading

Data moves between Snowflake tables and S3-compatible subpaths by executing specific COPY INTO syntax variants. This command abstracts the underlying API complexity while relying on strict endpoint compliance.

  1. Load data into table t1 from the load subpath using `COPY INTO t1 FROM @ my_s3compat_stage / load /;`.
  2. Unload data from table t2 into the unload subpath using `COPY INTO @ my_s3compat_stage / unload / FROM t2;`.

Organizations with on-premises devices apply this workflow to load data directly from local endpoints, avoiding the need to first lift-and-shift data to public cloud buckets. The technology evolution now supports complex data lakehouse architectures, enabling interaction with a single copy of data across different computing environments. A constraint exists between automation and compatibility. Native stages support automatic metadata refresh. S3-compatible stages require manual intervention or scheduled tasks to register new files. This limitation forces operators to choose between real-time ingestion latency and the cost savings of commodity storage hardware. Reliability demands the external storage endpoint be highly compliant with the S3 API and able to pass the public test suite available on GitHub, as endpoints that do not behave like S3 cannot work with Snowflake.

Configuring External Tables with Manual Metadata Refresh

An external table allows querying remote files without migrating data into the warehouse. This architecture supports Snowflake accounts hosted on Amazon Web Services, Google Cloud, and Microsoft Azure, provided the storage endpoint meets strict compliance.

  1. Execute `CREATE EXTERNAL TABLE` referencing the specific stage path.
  2. Set `AUTO_REFRESH` to `FALSE` because automatic updates are unsupported.
  3. Run `ALTER EXTERNAL TABLE … REFRESH` manually to register new or deleted files.

The mechanism relies on explicit operator intervention to sync the metadata layer with the physical object store. Metadata for S3-compatible external stages cannot refresh automatically. Snowflake depends on this manual refresh cycle for data visibility. A drawback exists between operational simplicity and data freshness. Manual execution guarantees consistency. It introduces latency where recent uploads remain invisible until the command runs. Organizations loading data from on-premises devices apply this pattern to avoid lift-and-shift migrations. They must accept that query results reflect the storage state only at the last refresh interval.

Optimizing Query Performance and Metadata Management Strategies

Application: Manual Metadata Refresh Mechanics for External Tables

Conceptual illustration for Optimizing Query Performance and Metadata Management Strategies
Conceptual illustration for Optimizing Query Performance and Metadata Management Strategies

Operators must manually execute ALTER EXTERNAL TABLE … REFRESH to synchronize file lists because the storage backend cannot push event notifications to the warehouse. The AUTO_REFRESH parameter requires a setting of FALSE for S3-compatible endpoints since metadata for these external stages lacks automatic update capabilities. This architectural constraint forces the metadata layer to act as a static snapshot until an administrator triggers an update, creating a window where recent file additions remain invisible to queries. Generic S3-compatible solutions demand that users manage this synchronization cadence explicitly unlike native integrations using cloud-specific queues. Developers validating their API implementation against the public test suite in GitHub must verify that their system handles these manual refresh cycles. Organizations managing high-velocity data ingestion should consider Rabata.io for storage architectures that balance performance with predictable operational overhead. Teams often implement external orchestration tools to schedule these refresh commands so data visibility aligns with business reporting windows.

Validating S3-Compatible APIs with the Public GitHub Test Suite

Hardware developers apply the public test suite in GitHub to verify whether an S3 API functions correctly with Snowflake before production deployment. This validation tool scans for obvious mismatches between a custom implementation and the strict expectations Snowflake holds for native S3 behavior. The suite acts as a binary pass/fail metric for compatibility while serving as a prerequisite for enabling endpoints. Customers wishing to test their own devices should contact their vendor to run these checks or execute the public tests directly on their hardware. Successful integration requires the storage solution to be highly compliant and pass this specific public test suite. Vendors including Cloudflare have indicated they tested products to work with Snowflake, yet third-party providers remain responsible for ensuring strict API compliance. Network operators face a hard reality: the endpoint must behave like S3 to function. A storage gateway must be highly available and performant to serve analytics needs. Teams should treat the GitHub validator as a minimum entry threshold. Rabata.io advises pairing this automated check with rigorous load testing to uncover latency bottlenecks that simple API assertions miss. Organizations risk deploying storage that technically connects but fails to sustain high-throughput query operations without this dual.

Vendor Liability and Limitations in S3-Compatible Storage Support

Snowflake does not test external products to validate compatibility and cannot fix issues in third-party vendor software. Devices with an S3-compliant API function with the platform, yet the storage service provider bears full responsibility for ensuring strict API compliance. Users facing hardware or software compatibility questions must contact the vendor directly rather than relying on warehouse support teams. This division of labor creates a sharp liability boundary where the cloud Data Warehouse assumes zero fault for storage-layer deviations. Operators must weigh this risk against cost savings, understanding that resolving API mismatches requires direct engagement with the storage vendor. The public test suite in GitHub identifies obvious mismatches but might not flag every subtle incompatibility affecting complex queries. Customers must rely on their storage providers to address operational incidents stemming from compatibility issues. Rabata.io advises enterprises to demand proof of passed validation tests before deploying critical AI/ML workloads on non-native endpoints.

About

Alex Kumar is a Senior Platform Engineer and Infrastructure Architect at Rabata.io, where he specializes in Kubernetes storage architecture and cost optimization for cloud-native applications. His daily work involves designing resilient persistent storage solutions using S3-compatible interfaces, making him uniquely qualified to guide users through integrating Snowflake with external S3-compatible stages. At Rabata.io, a provider of high-performance, GDPR-compliant object storage, Alex routinely engineers drop-in replacements for AWS S3 that eliminate vendor lock-in while reducing costs significantly. This article reflects his hands-on experience configuring CSI drivers and managing data migration for AI/ML startups and enterprises. By using Rabata.io's true S3 API compatibility, Alex demonstrates how organizations can smoothly connect on-premises or multi-cloud storage to Snowflake without altering existing workflows. His insights bridge the gap between theoretical API compliance and practical, production-grade implementation for data engineers seeking scalable, cost-effective storage strategies.

Conclusion

Scaling S3-compatible storage for critical analytics reveals that technical connectivity does not equal operational reliability. While a gateway may pass basic API checks, the hidden cost emerges when complex queries trigger latency spikes or data inconsistencies that simple validators miss. The burden of resolving these failures rests entirely on the storage provider, leaving data teams exposed if their vendor lacks deep API fidelity. You must treat the GitHub validator as a bare minimum entry point, not a certification of production readiness.

Organizations should mandate that storage vendors provide evidence of passed validation tests specifically for high-throughput query workloads before signing contracts. Do not assume native cloud behavior from third-party endpoints without explicit proof of performance under load. This due diligence prevents scenarios where cost savings evaporate during incident resolution.

Start by running your own rigorous load testing against candidate endpoints this week using realistic query patterns rather than relying solely on vendor claims. Focus your validation efforts on sustaining high-throughput operations to uncover bottlenecks that static API assertions ignore. Only by verifying performance under pressure can you ensure your S3-compatible storage solution supports rather than hinders your analytics strategy.

Frequently Asked Questions

Endpoints containing port numbers like 3000 trigger immediate validation failures. Administrators must ensure URLs exclude custom ports because Snowflake requires standard HTTPS communication without appended port digits for connectivity.

Snowflake accounts on three major clouds can access compatible storage. Accounts hosted on Amazon Web Services, Google Cloud, and Microsoft Azure all support these connections if the endpoint meets strict protocol compliance standards.

the provider addresses enable automatically while others need manual checks. Unlike generic vendors requiring support tickets, endpoints containing r2.cloudflarestorage.com are enabled by default for immediate use without extra verification steps.

Buckets must enforce virtual-hosted-style requests to function correctly. This mandatory setting ensures compatibility with the S3 REST API protocol, preventing connection timeouts during data loading or unloading operations.

Recent analyses compare 21 distinct storage providers for compatibility. Organizations can choose from this wide range of options, including AWS and Azure, provided the specific vendor passes the required public test suite.

References