To use this provider, add an entry to creds.json with TYPE set to AZURE_DNS, along with the necessary credentials. The provider supports three authentication methods:
- DefaultAzureCredential (Recommended): Simplifies authentication by leveraging Azure's credential chain (e.g., environment variables, managed identities, Azure CLI, etc.).
- Client ID and Secret: Provides backward compatibility for users who prefer this method.
- OIDC (InteractiveBrowserCredential): Allows interactive login via the browser for specific scenarios.
This method does not require explicit credentials in creds.json and leverages Azure's default authentication chain:
- Managed Identity (if running in Azure)
- Environment variables
- Azure CLI credentials
No additional setup is required in creds.json:
{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "AZURE_RESOURCE_GROUP"
}
}{% endcode %}
You can also use environment variables:
export AZURE_SUBSCRIPTION_ID=XXXXXXXXX
export AZURE_RESOURCE_GROUP=YYYYYYYYY{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "$AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "$AZURE_RESOURCE_GROUP"
}
}{% endcode %}
To use the client ID and secret-based authentication:
Example:
{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "AZURE_RESOURCE_GROUP",
"TenantID": "AZURE_TENANT_ID",
"ClientID": "AZURE_CLIENT_ID",
"ClientSecret": "AZURE_CLIENT_SECRET"
}
}{% endcode %}
You can also use environment variables:
export AZURE_SUBSCRIPTION_ID=XXXXXXXXX
export AZURE_RESOURCE_GROUP=YYYYYYYYY
export AZURE_TENANT_ID=ZZZZZZZZ
export AZURE_CLIENT_ID=AAAAAAAAA
export AZURE_CLIENT_SECRET=BBBBBBBBB{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "$AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "$AZURE_RESOURCE_GROUP",
"ClientID": "$AZURE_CLIENT_ID",
"TenantID": "$AZURE_TENANT_ID",
"ClientSecret": "$AZURE_CLIENT_SECRET"
}
}{% endcode %}
To enable OIDC for interactive login:
{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "AZURE_RESOURCE_GROUP",
"TenantID": "AZURE_TENANT_ID",
"UseOIDC": "true"
}
}{% endcode %}
+You can also use environment variables:
export AZURE_SUBSCRIPTION_ID=XXXXXXXXX
export AZURE_RESOURCE_GROUP=YYYYYYYYY
export AZURE_TENANT_ID=ZZZZZZZZ
export UseOIDC=true{% code title="creds.json" %}
{
"azuredns_main": {
"TYPE": "AZURE_DNS",
"SubscriptionID": "$AZURE_SUBSCRIPTION_ID",
"ResourceGroup": "$AZURE_RESOURCE_GROUP",
"TenantID": "$AZURE_TENANT_ID",
"UseOIDC": "$UseOIDC"
}
}{% endcode %}
This provider does not recognize any special metadata fields unique to Azure DNS.
An example configuration:
{% code title="dnsconfig.js" %}
var REG_NONE = NewRegistrar("none");
var DSP_AZURE_MAIN = NewDnsProvider("azuredns_main");
D("example.com", REG_NONE, DnsProvider(DSP_AZURE_MAIN),
A("test", "1.2.3.4"),
);{% endcode %}
DNSControl depends on a standard Client credentials Authentication with permission to list, create and update hosted zones.
If a domain does not exist in your Azure account, DNSControl will not automatically add it with the push command. You can do that either manually via the control panel, or via the command dnscontrol create-domains command.
The ResourceGroup is case sensitive.
- Provider Type
- Official Support: ✅
- DNS Provider: ✅
- Registrar: ❌
- Provider API
- Concurrency Verified: ✅
- dual host: ✅
- create-domains: ✅
- get-zones: ✅
- DNS extensions
- Service discovery
- Security
- DNSSEC
AUTODNSSEC: ❔DNSKEY: ❔DS: ❔