Поделиться через


Назначение пользовательских имен домена для имен узлов MQTT и HTTP в пространстве имен Event Grid

Пространству имен Event Grid автоматически назначается имя узла HTTP во время создания. Если MQTT включен в пространстве имен, имя узла MQTT также назначается пространству имен. Клиенты используют эти имена узлов для взаимодействия с пространством имен Сетки событий.

Вы можете назначить имена пользовательских доменов именам пространства имен Сетки событий MQTT и HTTP-узлов вместе с именами узлов по умолчанию. Конфигурации личного домена не только помогают соответствовать требованиям безопасности и соответствия требованиям, но и устраняют необходимость изменения клиентов, которые уже связаны с вашим доменом.

Предварительные условия

Чтобы использовать пользовательские домены для пространств имен, необходимо иметь следующие предварительные требования:

  • Пользовательский домен, которым вы владеете и можете изменять его записи системы доменных имен (DNS). Чтобы изменить записи DNS, необходимо получить доступ к реестру DNS для поставщика домена, например GoDaddy.
  • Сертификат SSL для пользовательского домена от общедоступного или частного УЦ.
  • Учетная запись Azure Key Vault для размещения SSL-сертификата для личного домена.

Пошаговые действия

Чтобы использовать пользовательские домены для пространств имен, выполните следующие действия.

  1. Добавьте записи DNS, чтобы направить кастомный домен на конечную точку пространства имен Event Grid.
  2. Включите управляемое удостоверение в пространстве имен Event Grid.
  3. Создайте учетную запись Azure Key Vault, на котором размещен сертификат сервера для личного домена.
  4. Добавьте назначение ролей в Azure Key Vault для управляемого удостоверения пространства имен.
  5. Ассоциируйте пространство имен Event Grid с пользовательским доменом, указав имя пользовательского домена, имя сертификата и ссылку на экземпляр Key Vault.
  6. Пространство имен Сетки событий создает запись TXT, используемую для подтверждения владения личным доменом.
  7. Докажите владение доменом, создав запись TXT на основе значения, созданного сеткой событий на предыдущем шаге.
  8. Event Grid проверяет записи TXT пользовательского домена перед его активацией для использования клиентами.
  9. Клиенты могут подключаться к пространству имен Сетки событий через личный домен.

Ограничения

  • Конфигурация личного домена уникальна для каждого региона в именах узлов MQTT и HTTP.
  • Конфигурация личного домена не может совпадать с именами узлов MQTT и HTTP в одном пространстве имен.
  • Конфигурация пользовательского домена не должна конфликтовать с именем узла MQTT или HTTP для любого пространства имен в пределах одного региона.

Добавление записей DNS

Создайте записи DNS в домене, чтобы указать имя узла пространства имен Сетки событий, с которым нужно связать домен. Дополнительные сведения см. в статье о настройке имени личного домена для облачной службы Azure.

Имя узла HTTP для пространства имен имеет следующий формат: <namespace name>.centraluseuap-1.eventgrid.azure.net

Имя узла MQTT для пространства имен имеет следующий формат: <namespace name>.centraluseuap-1.ts.eventgrid.azure.net

Включение управляемого удостоверения в пространстве имен Event Grid

Пространство имен использует управляемое удостоверение для доступа к экземпляру Azure Key Vault, чтобы получить сертификат сервера для настраиваемого домена. Используйте следующую команду, чтобы включить назначенное системой управляемое удостоверение в пространстве имен Event Grid:

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

Сведения о настройке системных и назначаемых пользователем удостоверений с помощью портала Azure смотрите в разделе Включение управляемого удостоверения для пространства имен Event Grid.

Создание учетной записи Azure Key Vault и отправка сертификата сервера

  1. Чтобы создать учетную запись Azure Key Vault, выполните следующую команду:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseuap" 
    
  2. Используйте следующую команду для импорта сертификата в Azure Key Vault

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

    Примечание.

    Сертификат должен содержать доменное имя в альтернативном имени субъекта для DNS. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault.

Назначьте роль в Azure Key Vault для управляемого удостоверения пространства имен

Для доступа к учетной записи Azure Key Vault необходимо предоставить доступ к пространству имен, выполнив следующие действия.

  1. Получите идентификатор управляющей системы Event Grid с помощью следующей команды

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. Получите идентификатор ресурса Хранилища ключей Azure.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. Добавьте назначение роли в Key Vault для управляемой идентификации пространства имен.

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

    Дополнительные сведения о доступе к Key Vault и интерфейсе портала см. в статье "Предоставление доступа к ключам, сертификатам и секретам Key Vault с помощью управления доступом на основе ролей Azure".

Ассоциируйте пространство имен Event Grid с пользовательским доменом

На этом шаге вы связываете непроверенный личный домен с пространством имен, но его нельзя использовать, пока вы не подтвердите владение личным доменом на следующем шаге.

Использование портала Azure

Чтобы добавить личные домены, выполните следующие действия.

  1. Перейдите к пространству имен Event Grid в портале Azure.

  2. На странице Event Grid Namespace выберите Custom domains в меню навигации слева.

  3. На странице "Личные домены" выберите +Пользовательский домен.

    Снимок экрана: страница

  4. На странице "Добавление личного домена" укажите значения для следующих свойств:

    1. Доменное имя: полное доменное имя, которое будет назначено одному из имен пространства имен сетки событий.

    2. Связанный тип имени узла: тип имени узла по умолчанию, связанный с именем личного домена.

    3. URL-адрес сертификата: идентификатор сертификата сервера в Azure Key Vault. Включите только базовый идентификатор сертификата, за исключением последнего сегмента идентификатора сертификата. Вместо этого вы можете выбрать Опцию выбора сертификата с использованием хранилища ключей, чтобы выбрать сертификат и хранилище ключей из ваших подписок.

    4. Управляемое удостоверение: управляемое удостоверение, используемое для проверки подлинности в Key Vault для доступа к созданному сертификату сервера.

    5. Выберите Добавить

      Снимок экрана: страница

  5. Сохраните записи TXT , так как необходимо использовать эти значения, чтобы подтвердить владение личным доменом.

Пример для Azure CLI

Используйте следующую команду, чтобы обновить пространство имен с конфигурацией личного домена. Следующий объект включает в себя две разные customDomains конфигурации: конфигурация в нижней topicSpacesConfiguration части назначена конечной точке MQTT, а конфигурация topicsConfiguration под ней назначается конечной точке HTTP.

Примечание.

Каждая конфигурация личного домена должна быть уникальной в одном регионе.

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"
                    },
                    
                }
            ]
        },
        "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"
                    }
                }
            ]
        }
    }
}

Замените следующие заполнители соответствующими значениями, сохраните его в файл с именем NS.jsonи выполните команду CLI.

Место держателя Описание
HOSTNAME Имя узла можно получить на странице обзора пространства имен Event Grid в портале Azure.
NAMESPACENAME Имя пространства имен Event Grid.
TOPICNAME Имя темы в пространстве имен.
HTTPDOMAINNAME Имя домена HTTP.
MQTTDOMAINNAME Имя домена MQTT.
SUBSCRIPTIONID Идентификатор подписки Azure.
RESOURCEGROUPNAME Имя группы ресурсов Azure.
KEYVAULTNAME Имя хранилища ключей.
CERTIFICATENAME Имя сертификата.

Тип удостоверения (type) может быть либо SystemAssigned либо UserAssigned. Если выбрано UserAssigned, укажите пользовательскую идентификацию с помощью свойства userAssignedIdentity.

Ответ на эту операцию включает сведения DNS в виде следующих свойств: expectedTxtRecordName и expectedTxtRecordValue. Сохраните эти сведения, так как необходимо использовать эти значения, чтобы подтвердить владение личным доменом. Ниже приведен пример ответа:

{
    "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>"
                }
            ]
        }
    }
}

Подтверждение владения личным доменом

Чтобы подтвердить владение доменом, выполните следующие действия.

  1. Добавьте сведения о DNS.

    Вернитесь к регистратору домена и создайте запись TXT для вашего домена на основе скопированных ДАННЫХ DNS на предыдущем шаге. Создание этого TXT для вашего домена проверяет владение доменным именем. Задайте время жизни (TTL) на 3600 секунд (60 минут), а затем сохраните запись.

  2. Проверка имени личного домена.

    1. Чтобы использовать портал Azure, выполните следующие действия, чтобы проверить пользовательские домены:

      1. На странице "Личные домены" выберите "Проверить домены".
      2. На странице "Проверка доменов" выберите "Проверить".
    2. Используйте следующую команду, чтобы обновить пространство имен с идентичной конфигурацией личного домена. Эта команда активирует проверку владения личным доменом. Записи DNS должны распространяться, прежде чем проверить домен и время распространения параметров DNS зависит от регистратора домена.

      В ответ на команду убедитесь, что validationState соответствует 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/AZURESUBSCRIPTIONID/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"
                          }
                      }
                  ]
              }
          }
      }