You finally get an ASP.NET app running in a container, but now you want it to serve traffic from Google Cloud Run without breaking every config file you’ve ever written. Enter Cloud Run IIS, the unholy (and yet somehow perfect) marriage of Microsoft’s classic web server and Google’s modern serverless runtime. Sounds weird, but it works beautifully once you understand what’s happening under the hood.
IIS (Internet Information Services) expects a full Windows environment. Cloud Run lives in a container that scales to zero in seconds. At first glance, they look incompatible. But with Windows container support and custom container images, you can use IIS inside Cloud Run to host .NET Framework or legacy web apps with identity, logging, and lifecycle automation built right in.
The logic is simple. Your Docker image includes IIS on a Windows base, exposes port 8080, and runs your site through the ASP.NET pipeline. Cloud Run runs that container as a fully managed service, with autoscaling and HTTPS built-in. GCP handles load, security, and credentials. IIS handles the app itself. Together, they let enterprises modernize ancient code without living in VM purgatory.
Quick answer for the impatient reader:
To run IIS on Cloud Run, package it in a Windows container image, publish to Artifact Registry, deploy via Cloud Run (Windows), and set your service account permissions. Cloud Run provides autoscaling and HTTPS, IIS serves your app. It’s the fastest way to modernize existing .NET workloads without a rewrite.
How do identity and permissions work in Cloud Run IIS?
Cloud Run uses IAM service accounts for fine-grained access. You can map app-level auth in IIS using OpenID Connect (OIDC) or delegate it to your organization’s IdP like Okta, Azure AD, or Google Identity Platform. This isolates app logic from platform identity, which means fewer password leaks and faster audits.