dns_scripts for Azure CLIpull/710/head
| @ -0,0 +1,26 @@ | |||||
| Using Azure for LetsEncrypt domain verification | |||||
| Guide for using Azure for LetsEncrypt domain verification. | |||||
| Prerequisites: | |||||
| - Azure CLI tools installed - see https://docs.microsoft.com/en-us/cli/azure/install-azure-cli | |||||
| - Logged in with azure-cli - i.e. azure login | |||||
| Ensure dns_add_azure and dns_del_azure scripts are called when the DNS is validated by modifying the .getssl.cfg: | |||||
| VALIDATE_VIA_DNS=true | |||||
| DNS_ADD_COMMAND=dns_scripts/dns_add_azure # n.b use valid path | |||||
| DNS_DEL_COMMAND=dns_scripts/dns_del_azure | |||||
| The dns_add_azure and dns_del_azure scripts assume that the following environment variables are added to the configuration file: | |||||
| - AZURE_RESOURCE_GROUP - the name of the resource group that contains the DNS zone | |||||
| - AZURE_ZONE_ID - a comma-separated list of valid DNS zones. this allows the same certificate to be used across multiple top-level domains | |||||
| - AZURE_SUBSCRIPTION_ID - the name or ID of the subscription that AZURE_RESOURCE_GROUP is part of | |||||
| Each of these variables can be included in the .getssl.cfg, e.g: | |||||
| export AZURE_RESOURCE_GROUP=my-resource-group | |||||
| export AZURE_ZONE_ID=example.com,anotherdomain.com | |||||
| export AZURE_SUBSCRIPTION_ID=my-azure-subscriptin | |||||
| @ -0,0 +1,40 @@ | |||||
| #!/usr/bin/env bash | |||||
| # Set the TXT DNS record with azure-cli | |||||
| fulldomain="${1}" | |||||
| token="${2}" | |||||
| if [[ -z "$AZURE_RESOURCE_GROUP" ]]; then | |||||
| echo "AZURE_RESOURCE_GROUP is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| if [[ -z "$AZURE_ZONE_ID" ]]; then | |||||
| echo "AZURE_ZONE_ID is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| if [[ -z "$AZURE_SUBSCRIPTION_ID" ]]; then | |||||
| echo "AZURE_SUBSCRIPTION_ID is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| # Determine which zone ID to use from AZURE_ZONE_IDs | |||||
| # Convert the comma-separated list of AZURE_ZONE_IDs into an array and loop | |||||
| IFS=',' read -ra zone_ids <<< "$AZURE_ZONE_ID" | |||||
| for item in "${zone_ids[@]}"; do | |||||
| # If the full domain ends with the current zone ID | |||||
| [[ "$fulldomain" =~ .*"${item}"$ ]] && zone_id="$item" | |||||
| done | |||||
| if [ -z "$zone_id" ]; then | |||||
| echo "${fulldomain} does not match any of the zone IDs specified by ${AZURE_ZONE_ID[@]}" | |||||
| exit 2 | |||||
| fi | |||||
| az account set --subscription "$AZURE_SUBSCRIPTION_ID" | |||||
| # Determine the recordset by removing the zone_id from the full domain and prefixing | |||||
| # with _acme-challenge. | |||||
| recordset="_acme-challenge.${fulldomain/.$zone_id/}" | |||||
| # The fulldomain should not be included in the recordset. It is used for subdomains. | |||||
| # E.g. domain = *.sub.example.com the recordset is _acme-challenge.sub | |||||
| # domain = example.com the record set is _acme-challenge | |||||
| [[ "$recordset" == "_acme-challenge.$fulldomain" ]] && recordset="_acme-challenge" | |||||
| az network dns record-set txt add-record -g "$AZURE_RESOURCE_GROUP" -z "$zone_id" -n "$recordset" -v "$token" | |||||
| @ -0,0 +1,38 @@ | |||||
| #!/usr/bin/env bash | |||||
| # Remove the TXT DNS record with azure-cli | |||||
| fulldomain="${1}" | |||||
| if [[ -z "$AZURE_RESOURCE_GROUP" ]]; then | |||||
| echo "AZURE_RESOURCE_GROUP is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| if [[ -z "$AZURE_ZONE_ID" ]]; then | |||||
| echo "AZURE_ZONE_ID is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| if [[ -z "$AZURE_SUBSCRIPTION_ID" ]]; then | |||||
| echo "AZURE_SUBSCRIPTION_ID is not set. Unable to set TXT records." | |||||
| exit 2 | |||||
| fi | |||||
| # Determine which zone ID to use from AZURE_ZONE_IDs | |||||
| # Convert the comma-separated list of AZURE_ZONE_IDs into an array and loop | |||||
| IFS=',' read -ra zone_ids <<< "$AZURE_ZONE_ID" | |||||
| for item in "${zone_ids[@]}"; do | |||||
| # If the full domain ends with the current zone ID | |||||
| [[ "$fulldomain" =~ .*"${item}"$ ]] && zone_id="$item" | |||||
| done | |||||
| if [ -z "$zone_id" ]; then | |||||
| echo "${fulldomain} does not match any of the zone IDs specified by ${AZURE_ZONE_ID[@]}" | |||||
| exit 2 | |||||
| fi | |||||
| az account set --subscription "$AZURE_SUBSCRIPTION_ID" | |||||
| # Determine the recordset by removing the zone_id from the full domain and prefixing | |||||
| # with _acme-challenge. | |||||
| recordset="_acme-challenge.${fulldomain/.$zone_id/}" | |||||
| # The fulldomain should not be included in the recordset. It is used for subdomains. | |||||
| # E.g. domain = *.sub.example.com the recordset is _acme-challenge.sub | |||||
| # domain = example.com the record set is _acme-challenge | |||||
| [[ "$recordset" == "_acme-challenge.$fulldomain" ]] && recordset="_acme-challenge" | |||||
| az network dns record-set txt delete --yes -g "$AZURE_RESOURCE_GROUP" -z "$zone_id" -n "$recordset" | |||||