Hi, We are implementing egress recording uploads t...
# ask-ai
c
Hi, We are implementing egress recording uploads to Azure Blob Storage using the Java SDK (
AzureBlobUpload
with account name/key and container name). Our Azure Storage accounts are typically locked down behind private networking / VPN, so we are evaluating how LiveKit Cloud egress can upload recordings. Could you clarify the following: 1. Outbound IP ranges Does LiveKit Cloud egress use a fixed set of outbound IP addresses that we can allow-list in the Azure Storage firewall? If yes, could you provide the IP ranges for our region/tenant? 2. Proxy / custom endpoint support Instead of direct Azure Blob access, can egress uploads be routed through a custom upload proxy URL (e.g., an internal service that generates SAS uploads)? The
AzureBlobUpload
config only shows
accountName
,
accountKey
, and
containerName
. Is there any way to configure a custom endpoint or proxy for Azure uploads? 3. SAS token support Is it possible to configure Azure uploads using a SAS token instead of the account key? 4. Best practice for private storage If the Azure Storage account has public network access disabled, what is the recommended architecture for recording uploads? For example, do customers typically use a public ingestion storage account and then move the files internally? Any guidance or recommended architecture for Azure environments with private networking restrictions would be very helpful. Thanks!
t
Thanks for reaching out, Ashrith. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Thanks — this is a clear set of questions. I’ll respond to each point you raised about LiveKit Cloud egress → Azure Blob uploads and highlight recommended approaches when your storage is locked down behind private networking. Quick summary of what I’m responding to: you asked about (1) outbound IP ranges to allow-list, (2) whether egress can use a custom proxy/endpoint, (3) SAS token support, and (4) recommended architectures when Azure Storage public access is disabled. 1) Outbound IP ranges • LiveKit Cloud egress does use fixed outbound IP addresses per region that can be allow‑listed in your Azure Storage firewall. • You should allow-list the static IP blocks for the region where your LiveKit Cloud egress runs. The regional static IP blocks are listed in our firewall/static IP reference (see the LiveKit firewall reference for the exact ranges for your region). 2) Proxy / custom endpoint support • Egress uploads using the
AzureBlobUpload
configuration do not support specifying a custom upload proxy URL or a custom endpoint. The egress component uploads directly to Azure Blob Storage using the account credentials and container you provide. • You cannot configure
AzureBlobUpload
to route uploads through an intermediary service (for example, an internal SAS-generation proxy) within the current egress implementation. 3) SAS token support • LiveKit Cloud egress does not support SAS tokens for Azure Blob uploads. Authentication requires the storage account name and account key; SAS tokens are not supported by the current egress implementation. 4) Recommended architecture for private storage (public network access disabled) • If your Azure Storage account has public network access disabled, LiveKit Cloud egress will not be able to upload directly because it runs in public cloud infrastructure and cannot reach private-only endpoints. • Common, recommended patterns customers use: ◦ Create a publicly accessible ingestion storage account (or enable public network access for a dedicated ingestion container) and allow-list LiveKit’s regional static IP ranges so egress can upload recordings. ◦ After ingestion, move or copy recordings from the public ingestion account to your private storage using internal Azure services you control (for example, Azure Functions, Logic Apps, Event Grid, or Storage replication/azcopy running from within your private network). ◦ Alternatively, ingest into a storage account in a cloud / region under your control that can accept public uploads and then replicate or transfer to the private-locked account via private networking routes. • If absolute private-only ingestion is required (no public access at all), the recommended options are: ◦ Self-host egress in your environment (so uploads originate inside your Azure VNet), or ◦ Run a relay/ingestion service inside your network that LiveKit egress can post to (but note LiveKit Cloud egress cannot be configured to post to a custom Azure endpoint directly — you would need to implement an intermediate public-facing ingest endpoint, or self-host). • The practical, commonly used approach is ingestion → secure automated transfer to private storage. This balances allowing LiveKit Cloud to perform uploads while preserving long-term private access and governance. If you’d like, I can help with next steps: • Tell me which LiveKit region/tenant you’ll use and I’ll point you to the exact static IP ranges for that region. • If you want architecture guidance, share whether you prefer (a) a public ingestion account + automated internal transfer, (b) self-hosting egress inside your Azure VNet, or (c) an ingestion relay—I can outline the pros/cons and a sample flow for the option you pick. I’m happy to walk through whichever option you prefer and provide links and a short architecture diagram for the chosen approach. Sources: Checklist for Regional Deployments | LiveKit
c
We currently use LiveKit Cloud. Is it supported to run a self-hosted
livekit-egress
worker in our Azure VNet against our LiveKit Cloud project, or does self-hosted egress require a fully self-hosted LiveKit server and Redis?
t
Thanks — I’m answering the part where you asked whether you can run a self-hosted
livekit-egress
worker in your Azure VNet while still using a LiveKit Cloud project. Short answer: that hybrid model is not supported. Why: • The
livekit-egress
service requires direct connectivity to a self-hosted LiveKit server and Redis for coordination and queuing. It is designed to run as part of a fully self-hosted LiveKit deployment. • LiveKit Cloud runs managed egress inside LiveKit’s infrastructure and does not allow external, self-hosted egress workers to join the Cloud project’s internal Redis/egress workflow. What that means for you: • If you want egress running inside your Azure VNet, you must self-host the entire LiveKit stack (LiveKit server + Redis +
livekit-egress
) in your environment. • If you continue using LiveKit Cloud, egress will be the managed service provided by LiveKit Cloud (you cannot replace just the egress worker with a self-hosted instance). Options you can consider: • Self-host everything (LiveKit server, Redis, and
livekit-egress
) in your Azure VNet so egress uploads originate inside your private network. • Use LiveKit Cloud’s managed egress and follow the earlier guidance for handling private Azure storage (allow-list LiveKit Cloud static outbound IPs or use a public ingestion account and then move files internally). If you want, tell me which option you’re leaning toward (self-hosting the full stack vs staying on LiveKit Cloud), and I’ll outline the next deployment steps, required components, and any network/firewall details to plan for. Sources: Universal Egress | livekit/livekit_composite | DeepWiki | Backup Egress Recordings
c
Is there any future support for uploads using sas for azure?
t
Thanks — I’m answering your question about whether SAS token support for Azure Blob uploads is planned. Right now, LiveKit Cloud egress does not support SAS tokens for Azure Blob uploads; it requires the storage account name and account key. There’s no announcement I can share here that SAS support will be added on a specific timeline. If SAS support is important for your architecture, I can help in two ways: • Describe practical workarounds (for example, ingestion to a public account + automated internal transfer, or self-hosting the egress worker with full control over upload code) and the trade-offs of each. • Capture the details of your use case (security requirements, why SAS is required, expected throughput/region) so I can pass a clear, concrete feature request for prioritization. Which would you prefer — a short set of recommended workarounds for now, or that I log your use case so the product team can consider SAS support?
c
Yes, SAS token support would be important for our architecture, so I’d appreciate it if you could log this as a feature request with the product team. In our environment, Azure Storage accounts are typically restricted using private networking and scoped access controls, and we generally avoid using storage account keys for application integrations. SAS tokens are the preferred mechanism because they allow time-limited, scoped permissions (e.g., write-only access to a specific container) without exposing full account-level credentials. Supporting SAS tokens for Azure Blob uploads in LiveKit egress would allow us to: Avoid storing or distributing storage account keys Use short-lived credentials generated by our backend • Align with our security policies for Azure storage access If helpful for the request: • Cloud: Azure • Region: (EU west, US, UAE, UK South) • Use case: Uploading LiveKit room recordings to Azure Blob Storage from LiveKit Cloud egress • Preferred auth method: SAS token with scoped permissions Please let me know if any additional details would help the product team evaluate this.
t
I don't have the answer you're looking for. You could also try asking your question: • in one of the other Slack channels or • to https://deepwiki.com/livekit/livekit_composite which is trained on all LiveKit source code If you find the answer, please post it here to help others!