05 Secure with HTTPS - Azure
To enable HTTPS access with a custom domain mapping to the static website published on an Azure storage account you need to use Azure CDN as a service. This will create an HTTPS frontend on the Azure CDN service that you can use to access your website.
Terraform¶
The following Terraform IaC will:
- CDN Profile
- Name:
${lower(random_string.this.result)}-${lower(var.environment)}-cdn-profile - SKU: Standard Microsoft
- Name:
- CDN Endpoint
- Name:
${lower(random_string.this.result)}-${lower(var.environment)}-cdn-endpoint - HTTP is not allowed
- HTTPS is allowed
- Origin:
azurerm_storage_account.this.primary_web_endpoint - Rule: EnforceHTTPS
- Name:
- Azure DNS CNAME record
- Name:
azure-resume - Zone:
grinntec.net - Target resource:
azurerm_cdn_endpoint.this.id
- Name:
Azure Portal¶
In Azure portal browse to the storage account, then under security and networking select Azure CDN. Create a New Endpoint CDN profile and choose your options based on below.
OBS! Make sure you select the correct
Origin Hostnamefrom the list. it defaults toBlobbut you needStatic Website.
| Setting | Value |
|---|---|
| CDN Profile Name | Give your profile a name, you could use the storage acount name and append {NAME}-cdn-profile |
| CDN Endpoint name | Enter a name for the endpoint. It must be globally unique. So choosing the same method as the profile name could be a good idea. For example {NAME}-cdn-endpoint |
| Origin Hostname | From the list make sure you select the static website and not blob |
| Pricing tier | Select any pricing tier that suits you. More details can be found here. For testing choose Microsoft CDN Classic (Standard Microsoft) |
| Query string caching behavior | Choose the caching behavior best suited, for this work I choose to ignore query strings to keep it simple. |
Endpoints
The endpoint will have a different URL to the blob static website. A storage account static website will have a URL of https://{NAME}.web.core.windows.net. An Azure CDN endpoint will have a URL of https://{NAME}.azureedge.net.
The new CDN endpoint URL may return a blank page for the first few minutes as the edge location first needs to recieve a copy of the website before it can serve it.
Origin
The CDN endpoint hosts a local cache of the origin which in this case is the storage account website.
Make sure you are pointing to the
Storage Static Websiteorigin and not the justStorage
Add HTTP > HTTPS rule¶
To ensure that only HTTPS is supported you can add a rule to the endpoint that performs a simple redirect. This ensure that only HTTPS is served via the endpoint. It can also be useful for a situation whereby you have moved from HTTP to HTTPS and have a system with lots of HTTP URI hardcoded. This rule would allow you to keep those URI as-is and simply change the protocol in transit saving a lot of re-work.
In the endpoint go to the Rule engine section and choose add rule.
Condition
If Request Protocol
- Operator = [Equals]
- Value = [HTTP]
Action
Then URL redirect
- Type - [Found (302)]
- Protocol - [HTTPS]
{{% alert title="Status" %}} At this stage, you have an Azure Storage static website being used as an origin for an Azure CDN profile which is accessible over the default URL of
https://{NAME}.azureedge.net
{{% /alert %}}
References¶
Configure HTTPS on an Azure CDN custom domain
