Assegnare nomi di dominio personalizzati ai nomi host MQTT e HTTP dello spazio dei nomi Griglia di eventi

Allo spazio dei nomi di Griglia di eventi viene assegnato automaticamente un nome host HTTP al momento della creazione. Se il protocollo MQTT è abilitato nello spazio dei nomi, allo spazio dei nomi viene assegnato anche un nome host MQTT. I client usano questi nomi host per comunicare con lo spazio dei nomi di Griglia di eventi.

È possibile assegnare nomi di dominio personalizzati ai nomi host MQTT e HTTP dello spazio dei nomi di Griglia di eventi insieme ai nomi host predefiniti. Le configurazioni di dominio personalizzate non solo consentono di soddisfare i requisiti di sicurezza e conformità, ma eliminano anche la necessità di modificare client già collegati al dominio.

Prerequisiti

Per usare domini personalizzati per gli spazi dei nomi, è necessario disporre dei prerequisiti seguenti:

  • Dominio personalizzato di cui si è proprietari con possibilità di modificare i record DNS (Domain Name System). Per modificare i record DNS, è necessario accedere al registro DNS per il provider del dominio, ad esempio GoDaddy.
  • Certificato SSL (Secure Sockets Layer) per il dominio personalizzato ottenuto da una CA pubblica o privata.
  • Account di Azure Key Vault per ospitare il certificato SSL per il dominio personalizzato.

Procedura generale

Per usare domini personalizzati per gli spazi dei nomi, attenersi alla procedura seguente:

  1. Aggiungere voci DNS per fare in modo che il dominio personalizzato punti all'endpoint dello spazio dei nomi di Griglia di eventi.
  2. Abilitare l'identità gestita nello spazio dei nomi di Griglia di eventi.
  3. Creare un account di Azure Key Vault che ospiti il certificato del server per il dominio personalizzato.
  4. Aggiungere in Azure Key Vault l'assegnazione di ruolo per l'identità gestita dello spazio dei nomi.
  5. Associare lo spazio dei nomi di Griglia di eventi al dominio personalizzato specificando il nome del dominio personalizzato, il nome del certificato e il riferimento all'istanza dell'insieme di credenziali delle chiavi.
  6. Lo spazio dei nomi di Griglia di eventi genera un record TXT che viene usato per dimostrare di essere proprietari del dominio personalizzato.
  7. Dimostrare la proprietà del dominio creando un record TXT in base al valore generato da Griglia di eventi nel passaggio precedente.
  8. Griglia di eventi convalida i record TXT del dominio personalizzato prima di attivare il dominio personalizzato per l'utilizzo da parte dei client.
  9. I client possono connettersi allo spazio dei nomi di Griglia di eventi tramite il dominio personalizzato.

Limiti

  • La configurazione del dominio personalizzato è univoca in ogni area tra i nomi host MQTT e HTTP.
  • La configurazione del dominio personalizzato non può essere identica per i nomi host MQTT e HTTP nello stesso spazio dei nomi.
  • La configurazione del dominio personalizzato non può essere in conflitto con un nome host MQTT o HTTP di uno spazio dei nomi della stessa area.

Aggiungere voci DNS

Creare record DNS nel dominio in modo che puntino al nome host dello spazio dei nomi di Griglia di eventi a cui associare il dominio. Per i servizi cloud, vedere Configurazione di un nome di dominio personalizzato per un servizio cloud di Azure.

Il nome host HTTP per lo spazio dei nomi è nel formato seguente: <namespace name>.centraluseuap-1.eventgrid.azure.net

Il nome host MQTT per lo spazio dei nomi è nel formato seguente: <namespace name>.centraluseuap-1.ts.eventgrid.azure.net

Abilitare l'identità gestita nello spazio dei nomi di Griglia di eventi

Lo spazio dei nomi usa l'identità gestita per accedere all'istanza di Azure Key Vault per ottenere il certificato del server per il dominio personalizzato. Usare il comando seguente per abilitare l'identità gestita assegnata dal sistema nello spazio dei nomi di Griglia di eventi:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

Per informazioni sulla configurazione delle identità assegnate dal sistema e dall'utente tramite il portale di Azure, vedere Abilitare l'identità gestita per uno spazio dei nomi di Griglia di eventi.

Creare un account Azure Key Vault e caricare il certificato del server

  1. Usare il comando seguente per creare un account Azure Key Vault:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. Usare il comando seguente per importare un certificato in Azure Key Vault

    az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> " 
    

    Nota

    Il certificato deve includere il nome di dominio nel nome alternativo del soggetto per DNS. Per ulteriori informazioni, vedere Esercitazione: Importare un certificato in Azure Key Vault.

Aggiungere l'assegnazione di ruolo in Azure Key Vault per l'identità gestita dello spazio dei nomi

È necessario fornire l'accesso allo spazio dei nomi per accedere all'account Azure Key Vault attenendosi alla procedura seguente:

  1. Ottenere l'ID dell'entità di sicurezza dell'identità gestita del sistema dello spazio dei nomi Griglia di eventi usando il comando seguente

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Ottenere l'ID della risorsa di Azure Key Vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Aggiungere l'assegnazione di ruolo in Key Vault per l'identità gestita dello spazio dei nomi.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    Per ulteriori informazioni sull’accesso a Key Vault e sull’esperienza con il portale, vedere Fornire l'accesso a chiavi, certificati e segreti di Key Vault con il controllo degli accessi in base al ruolo di Azure.

Associare lo spazio dei nomi di Griglia di eventi al dominio personalizzato

In questo passaggio si associa il dominio personalizzato non verificato allo spazio dei nomi, ma non è possibile usarlo fino a quando non si dimostra la proprietà del dominio personalizzato nel passaggio successivo.

Usare il portale di Azure

Usare la procedura seguente per aggiungere i domini personalizzati:

  1. Passare allo spazio dei nomi di Griglia di eventi nel portale di Azure

  2. Nella pagina Spazio dei nomi di Griglia di eventi, selezionare Domini personalizzati nel menu di navigazione a sinistra.

  3. Nella pagina Domini personalizzati, selezionare + Dominio personalizzato.

    Screenshot che mostra la pagina Domini personalizzati per uno spazio dei nomi di Griglia di eventi di Azure con il pulsante + Dominio personalizzato selezionato.

  4. Nella pagina Aggiungi dominio personalizzato, specificare i valori per le proprietà seguenti:

    1. Nome di dominio: nome di dominio completo da assegnare a uno dei nomi host dello spazio dei nomi di Griglia di eventi.

    2. Tipo di nome host associato: tipo di nome host predefinito da associare al nome di dominio personalizzato.

    3. URL certificato: identificatore del certificato del server in Azure Key Vault. Includere solo l'identificatore di base del certificato escludendo l'ultimo segmento dell'identificatore del certificato. È possibile scegliere Seleziona un certificato usando un insieme di credenziali delle chiavi per selezionare il certificato e l'insieme di credenziali delle chiavi dalle sottoscrizioni.

    4. Identità gestita: l'identità gestita usata per l'autenticazione con l'insieme di credenziali delle chiavi per accedere al certificato del server creato.

    5. Seleziona Aggiungi

      Screenshot che mostra la pagina Aggiungi dominio personalizzato.

  5. Salvare i record TXT perché è necessario usare questi valori per dimostrare la proprietà del dominio personalizzato.

Esempio di interfaccia della riga di comando di Azure

Usare il comando seguente per aggiornare lo spazio dei nomi con la configurazione del dominio personalizzato. L'oggetto seguente include due diverse configurazioni di customDomains: la configurazione in topicSpacesConfiguration viene assegnata all'endpoint MQTT, la configurazione in topicsConfiguration viene assegnata all'endpoint HTTP.

Nota

Ogni configurazione del dominio personalizzato deve essere univoca all'interno della stessa area.

az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --properties @./resources/NS.json 

NS.json

{
    "properties": {
        "topicsConfiguration": {
            "hostname": "HOSTNAME",
            "customDomains": [
                {
                    "fullyQualifiedDomainName": "www.HTTPDOMAINNAME.com",
                    "identity": {
                        "type": "SystemAssigned"
                    },
                    "certificateInfo": {
                        "keyVaultArmId": " /subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                        "certificateName": "CERTIFICATENAME"
                    }
                }
            ]
        },
        "topicSpacesConfiguration": {
            "state": " Enabled",
            "routeTopicResourceId": " /subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.EventGrid/namespaces/NAMESPACENAME/topics/TOPICNAME",
            "hostname": "NAMESPACENAME.westus2-1.ts.eventgrid.azure.net",
            "routingIdentityInfo": {
                "type": "None"
            },
            "customDomains": [
                {
                    "fullyQualifiedDomainName": " www.MQTTDOMAINNAME.com ",
                    "identity": {
                        "type": "SystemAssigned"
                    },
                    "certificateInfo": {
                        "keyVaultArmId": "/subscriptions/SUBSCRIPTIONNAME/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                        "certificateName": "CERTIFICATENAME"
                    }
                }
            ]
        }
    }
}

Sostituire i segnaposto seguenti con i valori appropriati, salvare in un file denominato NS.json ed eseguire il comando dell'interfaccia della riga di comando.

Segnaposto Descrizione
HOSTNAME È possibile ottenere il nome host dalla pagina Panoramica dello spazio dei nomi di Griglia di eventi nel portale di Azure.
NAMESPACENAME Nome dello spazio dei nomi di Griglia di eventi.
TOPICNAME Nome dell’argomento nello spazio dei nomi.
HTTPDOMAINNAME Nome del dominio HTTP.
MQTTDOMAINNAME Nome del dominio MQTT.
SUBSCRIPTIONID ID sottoscrizione di Azure.
RESOURCEGROUPNAME Nome del gruppo di risorse di Azure.
KEYVAULTNAME Nome dell'insieme di credenziali delle chiavi.
CERTIFICATENAME Nome del certificato.

Il tipo di identità (type) può essere SystemAssigned o UserAssigned. Se è selezionata l’opzione UserAssigned, specificare l'identità assegnata dall'utente usando la proprietà userAssignedIdentity.

La risposta a questa operazione include le informazioni DNS sotto forma delle proprietà seguenti: expectedTxtRecordName e expectedTxtRecordValue. Salvare queste informazioni perché è necessario usare questi valori per dimostrare la proprietà del dominio personalizzato. Di seguito è fornito un esempio di risposta:

{
    "properties": {
        "topicsConfiguration": {
            "hostname": "HOSTNAME",
            "customDomains": [
                {
                    "fullyQualifiedDomainName": "www.HTTPDOMAINNAME.com",
                    "validationState": "Pending",
                    "identity": {
                        "type": "SystemAssigned"
                    },
                    "certificateInfo": {
                        "keyVaultArmId": " /subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                        "certificateName": "CERTIFICATENAME"
                    },
                    "expectedTxtRecordName": "_eg. www.contoso-http.com",
                    "expectedTxtRecordValue": "<random string>"
                }
            ]
        },
        "topicSpacesConfiguration": {
            "state": " Enabled",
            "routeTopicResourceId": " /subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.EventGrid/namespaces/MSNS/topics/TOPICNAME",
            "hostname": "HOSTNAME",
            "routingIdentityInfo": {
                "type": "None"
            },
            "customDomains": [
                {
                    "fullyQualifiedDomainName": " www.MQTTDOMAINNAME.com ",
                    "validationState": "Pending",
                    "identity": {
                        "type": "SystemAssigned"
                    },
                    "certificateInfo": {
                        "keyVaultArmId": "/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                        "certificateName": "CERTIFICATENAME"
                    },
                    "expectedTxtRecordName": "_eg. www.contoso-mqtt.com",
                    "expectedTxtRecordValue": "<random string>"
                }
            ]
        }
    }
}

Dimostrare la proprietà del dominio personalizzato

Per dimostrare la proprietà del dominio, attenersi alla procedura seguente:

  1. Aggiungere le informazioni DNS.

    Tornare al registrar del dominio e creare un nuovo record TXT per il dominio in base alle informazioni DNS copiate dal passaggio precedente. La creazione di questo record TXT per il dominio verifica la proprietà del nome di dominio. Impostare la durata (TTL) su 3600 secondi (60 minuti), quindi salvare il record.

  2. Verificare il nome di dominio personalizzato.

    1. Per usare il portale di Azure, attenersi alla procedura seguente per convalidare i domini personalizzati:

      1. Nella pagina Domini personalizzati, selezionare Convalida domini.
      2. Nella pagina Convalida domini, selezionare Convalida.
    2. Usare il comando seguente per aggiornare lo spazio dei nomi con una configurazione del dominio personalizzato identica. Questo comando attiva la convalida della proprietà del dominio personalizzato. Per verificare il dominio occorre prima propagare i record DNS; il tempo di propagazione delle impostazioni DNS dipende dal registrar del dominio.

      Nella risposta al comando, accertarsi che validationState sia Approved.

      az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --properties @./resources/NS.json 
      

      NS.json:

      {
          "properties": {
              "topicsConfiguration": {
                  "hostname": "HOSTNAME",
                  "customDomains": [
                      {
                          "fullyQualifiedDomainName": "www.HTTPDOMAINNAME.com",
                          "identity": {
                              "type": "SystemAssigned"
                          },
                          "certificateInfo": {
                              "keyVaultArmId": " /subscriptions/AZURESUBCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                              "certificateName": "CERTIFICATENAME"
                          }
                      }
                  ]
              },
              "topicSpacesConfiguration": {
                  "state": " Enabled",
                  "routeTopicResourceId": " /subscriptions/AZURESUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.EventGrid/namespaces/NAMESPACENAME/topics/TOPICNAME",
                  "hostname": "HOSTNAME",
                  "routingIdentityInfo": {
                      "type": "None"
                  },
                  "customDomains": [
                      {
                          "fullyQualifiedDomainName": "www.MQTTDOMAINNAME.com ",
                          "identity": {
                              "type": "SystemAssigned"
                          },
                          "certificateInfo": {
                              "keyVaultArmId": "/subscriptions/AZURESUBSCRIPTIONID/resourceGroups/RESOURCEGROUPNAME/providers/Microsoft.KeyVault/vaults/KEYVAULTNAME",
                              "certificateName": "CERTIFICATENAME"
                          }
                      }
                  ]
              }
          }
      }