Build1 distinct publisher3 min readPublished
A Logic Apps Standard walkthrough swaps the Kudu push for a blob URL the app reads with its own identity. Six failures later, no SAS token exists, and the widest grant is the one nobody reads twice.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The direction of travel is what makes this work. Both usual deployment routes for Logic Apps Standard depend on the SCM endpoint, and on an internal-load-balancer ASE v3 that endpoint is not published [1]. Run-From-Package inverts the last hop: the pipeline writes a zip to blob storage, then uses ARM to set one app setting and restart, and the app reads the package itself from inside the VNet using its own managed identity [3]. The network requirement moves off the build agent and onto the thing that already lives in the network.
The credential story follows from that. Both hops authenticate as an identity rather than with a shared string, so the package URL carries no SAS token and there is no deployment secret to rotate or leak [3][9].
The bill is three role assignments [5]. Two sit on the pipeline identity: Storage Blob Data Contributor scoped to one storage account, and Website Contributor scoped to the Logic App's resource group [5]. Read the second one twice. It is not scoped to the Logic App, so it reaches every site in that group, while the deployment itself needs one app setting and one restart on one app [10]. If that resource group holds anything else with a hostname, the pipeline can reconfigure and bounce it too.
The failure that costs the most time is not in the YAML. According to the author, an MI-type service connection had existed for months and had never worked, because the agent VM's system-assigned identity was switched off [8]. The diagnostic is a throwaway pipeline that calls the instance metadata service at 169.254.169.254, decodes the token payload, and prints `oid` and `xms_mirid`, which tells you both who the pipeline is and which VM it is running on [7]. An `Identity not found` response is the tell [8].
The pilot workflow is deliberately dull: a stateful hourly recurrence trigger feeding a Compose action, no connectors, nothing that can fail for reasons unrelated to the pipe [11]. That discipline pays for itself immediately, because the first run failed with `Cannot find path ...\apps\` when the pipeline's `sourceFolder` and trigger paths omitted the repo subfolder prefix [6]. That error is legible against an empty `connections.json`. It is much less legible when the zip also contains connection references and per-environment parameters.
One qualifier the framing deserves. The who-am-I sample runs on a pool named `SelfHosted-Windows-Pool` and reads a VM's system-assigned identity [7], so an agent you own is still in the picture. What has been removed is the requirement that it sit inside the ASE VNet with SCM reach, which is the part that usually needs a platform team and a change window. The author is candid that the in-VNet agent remains the right long-term answer [2].
Ranked by verification strength, evidence, and original report placement.
The author states the usual answer is a self-hosted agent inside the VNet and calls it the right long-term answer, but says you can ship today using Run-From-Package with a managed-identity-authenticated blob URL.
The pipeline uploads a zip to blob storage, then uses ARM to set one app setting and restart the app; the app pulls the package itself from inside the VNet using its own managed identity, SCM is never touched, and no SAS token ever exists.
The author reports hitting six real-world failures while wiring the Azure DevOps pipeline to a Logic App Standard on an internal ASE.
Logic Apps Standard on an ILB App Service Environment (ASE v3) has no public SCM (Kudu) endpoint, which rules out the two normal deployment routes.
The pipeline only ever talks to two public planes: Azure Storage to upload the package, and ARM at management.azure.com to set the app setting and restart the app.
Three role grants in total: two for the pipeline identity, being Storage Blob Data Contributor scoped to the storage account and Website Contributor scoped to the Logic App's resource group, plus one for the Logic App's own identity.
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
First-hand and reproducible, but single-source
The mechanism is documented with primary artifacts a reader can execute: repo tree, host.json/connections.json/workflow.json contents, three az role assignment commands with explicit scopes, an instance-metadata PowerShell snippet, and a pipeline YAML with a prereq comment block. That is unusually checkable for a blog post. It is still one practitioner account with no independent confirmation, no vendor documentation cited, and a body that truncates mid-YAML so the complete pipeline is not visible.
One self-reported team deployment
The only observable adoption is the author's own pipeline against a single Logic App Standard resource, proven with a deliberately trivial heartbeat workflow rather than migrated production workflows. No other users, organisations, download counts, or vendor endorsements appear in the supplied material, and the author explicitly defers real workflow migration to a later step.
Security framing slightly outruns the RBAC reality
The technical claims are modest, scoped, and mostly self-evidencing, and the author concedes the self-hosted VNet agent is the better long-term answer, so this is not a hyped story. The mild overstatement is in the secretless framing: 'no SAS token ever exists' is true, yet the same pattern grants the pipeline identity Website Contributor across an entire resource group to perform one app setting write and one restart, and that trade-off is never named. The headline count of six failures is also asserted more prominently than it is enumerated.
Practitioner write-up, no disclosed commercial stake
The post is a community-platform walkthrough written in the first person about the author's own deployment, using only vendor-neutral CLI and YAML with no product being sold, no sponsorship, and no affiliation disclosed in the supplied material. The residual incentive is ordinary practitioner visibility, plus a natural bias toward presenting one's own workaround as ship-ready.
Mechanism credible, generality unproven
Confidence is moderate: the artifacts are specific enough that the pattern almost certainly worked as described for this team, and the failure modes reported (subfolder path prefix, disabled VM identity, RBAC propagation delay) are the kind of detail invention rarely produces. It is held down by a single publisher, a truncated body, no independent verification, and validation limited to a connector-free pilot workflow.
invest
Nvidia's Perplexity talks move its money one layer further from its own chips1 distinct publisher
build
OpenAI's confirmed NVIDIA footprint is a rack, not a chip; Rubin is still a roadmap1 distinct publisher
invest
H100 rentals are back to $2.35 an hour, and your AI cost model is stale1 distinct publisher
product
Microsoft never announced a China exit. Five years of filings did it instead1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 25, 2026