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


Назначение имен личного домена пространства имен Сетки событий MQTT и HTTP-имен узлов

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

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

Необходимые компоненты

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

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

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

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

  1. Добавьте записи DNS, чтобы указать личный домен в конечную точку пространства имен Сетки событий.
  2. Включите управляемое удостоверение в пространстве имен Сетки событий.
  3. Создайте учетную запись Azure Key Vault, на котором размещен сертификат сервера для личного домена.
  4. Добавьте назначение ролей в Azure Key Vault для управляемого удостоверения пространства имен.
  5. Свяжите пространство имен Сетки событий с личным доменом, указав имя личного домена, имя сертификата и ссылку на экземпляр хранилища ключей.
  6. Пространство имен Сетки событий создает запись TXT, используемую для подтверждения владения личным доменом.
  7. Докажите владение доменом, создав запись TXT на основе значения, созданного сеткой событий на предыдущем шаге.
  8. Сетка событий проверяет записи 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

Включение управляемого удостоверения в пространстве имен Сетки событий

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

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

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

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

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

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  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. Получение идентификатора субъекта-участника управляемого удостоверения в службе "Сетка событий" с помощью следующей команды

    $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".

Связывание пространства имен Сетки событий с личным доменом

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

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

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

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

  2. На странице пространства имен сетки событий выберите настраиваемые домены в меню навигации слева.

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

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

Место держателя Description
HOSTNAME Имя узла можно получить на странице обзора пространства имен Сетки событий в портал Azure.
NAMESPACENAME Имя пространства имен Сетки событий.
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/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"
                          }
                      }
                  ]
              }
          }
      }