Asignar nombres de dominio personalizados a los nombres de host MQTT y HTTP del espacio de nombres de Event Grid
El espacio de nombres de Event Grid se asigna automáticamente un nombre de host HTTP en el momento de la creación. Si MQTT está habilitado en el espacio de nombres, el nombre de host MQTT también se asigna al espacio de nombres. Los clientes usan estos nombres de host para comunicarse con el espacio de nombres de Event Grid.
Puede asignar nombres de dominio personalizados a los nombres de host MQTT y HTTP del espacio de nombres de Event Grid, junto con los nombres de host predeterminados. Las configuraciones de dominio personalizadas no solo le ayudan a cumplir los requisitos de seguridad y cumplimiento, sino que también elimina la necesidad de modificar los clientes que ya están vinculados al dominio.
Requisitos previos
Para usar dominios personalizados para espacios de nombres, debe tener los siguientes requisitos previos:
- Dominio personalizado que posee y puede modificar sus registros del Sistema de nombres de dominio (DNS). Para modificar los registros DNS, necesita acceso al registro DNS para el proveedor de dominios, como GoDaddy.
- Certificado de capa de sockets seguros (SSL) para el dominio personalizado desde una entidad de certificación pública o privada.
- Cuenta de Azure Key Vault para hospedar el certificado SSL para el dominio personalizado.
Pasos generales
Para usar dominios personalizados para espacios de nombres, siga estos pasos:
- Agregue entradas DNS para que apunten el dominio personalizado al punto de conexión del espacio de nombres de Event Grid.
- Habilitación de la identidad administrada para un espacio de nombres de Event Grid.
- Cree una cuenta de Azure Key Vault que hospede el certificado de servidor para el dominio personalizado.
- Agregue la asignación de roles en Azure Key Vault para la identidad administrada del espacio de nombres.
- Asocie el espacio de nombres de Event Grid con el dominio personalizado, especificando el nombre de dominio personalizado, el nombre del certificado y la referencia de la instancia del almacén de claves.
- El espacio de nombres de Event Grid genera un registro TXT que se usa para demostrar la propiedad del dominio personalizado.
- Demuestre la propiedad del dominio mediante la creación de un registro TXT basado en el valor que Event Grid generó en el paso anterior.
- Event Grid valida los registros TXT del dominio personalizado antes de activar el dominio personalizado para el uso de los clientes.
- Los clientes pueden conectarse al espacio de nombres de Event Grid a través del dominio personalizado.
Limitaciones
- La configuración de un dominio personalizado es única por región en los nombres de host MQTT y HTTP.
- La configuración de un dominio personalizado no puede ser idéntica para los nombres de host MQTT y HTTP en el mismo espacio de nombres.
- La configuración de dominio personalizada no puede entrar en conflicto con ningún nombre de host MQTT o HTTP para ningún espacio de nombres en la misma región.
Adición de entradas DNS
Cree registros DNS en el dominio para que apunten al nombre de host del espacio de nombres de Event Grid al que desea asociar el dominio. Para más información, vea Configuración de un nombre de dominio personalizado para un servicio en la nube de Azure.
El nombre de host HTTP del espacio de nombres tiene el formato siguiente: <namespace name>.centraluseuap-1.eventgrid.azure.net
El nombre de host MQTT del espacio de nombres tiene el siguiente formato: <namespace name>.centraluseuap-1.ts.eventgrid.azure.net
Habilitación de la identidad administrada en el espacio de nombres de Event Grid
El espacio de nombres usa la identidad administrada para acceder a la instancia de Azure Key Vault para obtener el certificado de servidor del dominio personalizado. Use el siguiente comando para habilitar la identidad administrada asignada por el sistema en el espacio de nombres de Event Grid:
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Para obtener información sobre cómo configurar identidades asignadas por el sistema y el usuario mediante Azure Portal, vea Habilitación de la identidad administrada para un espacio de nombres de Event Grid.
Creación de una cuenta de Azure Key Vault y carga del certificado de servidor
Use el comando siguiente para crear una cuenta de Azure Key Vault:
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup"
Use el siguiente comando para importar un certificado en Azure Key Vault
az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> "
Nota:
El certificado debe incluir el nombre de dominio en el nombre alternativo del firmante para DNS. Para más información, vea Tutorial: Importación de un certificado en Azure Key Vault.
Adición de la asignación de roles en Azure Key Vault para la identidad administrada del espacio de nombres
Debe proporcionar acceso al espacio de nombres para acceder a la cuenta de Azure Key Vault mediante los pasos siguientes:
Obtención del identificador de entidad de seguridad de identidad administrada del sistema del espacio de nombres de Event Grid mediante el comando siguiente
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
Obtenga el identificador de recurso de Azure Key Vault.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)
Agregue la asignación de roles en Key Vault para la identidad administrada del espacio de nombres.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId
Para más información sobre el acceso a Key Vault y la experiencia del portal, vea Proporcionar acceso a claves, certificados y secretos de Key Vault con un control de acceso basado en rol de Azure.
Asociación del espacio de nombres de Event Grid con el dominio personalizado
En este paso, asociará el dominio personalizado no comprobado con el espacio de nombres, pero no podrá usarlo hasta que demuestre su propiedad del dominio personalizado en el paso siguiente.
Usar Azure Portal
Siga estos pasos para agregar los dominios personalizados:
Vaya al espacio de nombres de Event Grid en Azure Portal
En la página Espacio de nombres de Event Grid, seleccione Dominios personalizados en el menú de navegación izquierdo.
En la página Dominios personalizados, seleccione + Dominio personalizado.
En la página Agregar dominio personalizado, especifique los valores de las siguientes propiedades:
Nombre de dominio: el nombre de dominio completo que se asignará a uno de los nombres de host del espacio de nombres de Event Grid.
Tipo de nombre de host asociado: el tipo de nombre de host predeterminado que se va a asociar con el nombre de dominio personalizado.
Dirección URL del certificado: el identificador de certificado del certificado de servidor en Azure Key Vault. Incluya solo el identificador base del certificado excluyendo el último segmento del identificador de certificado. Puede elegir Seleccionar un certificado mediante un almacén de claves en su lugar para seleccionar el certificado y el almacén de claves de las suscripciones.
Identidad administrada: la identidad administrada que se usa para autenticarse con Key Vault para acceder al certificado de servidor que se creó.
Seleccione Agregar.
Guarde los registros TXT cuando necesite usar estos valores para demostrar la propiedad del dominio personalizado.
Ejemplo de la CLI de Azure
Use el comando siguiente para actualizar el espacio de nombres con la configuración de dominio personalizada. El siguiente objeto incluye dos configuraciones customDomains
diferentes: la configuración topicSpacesConfiguration
que se asigna a su punto de conexión MQTT, y la configuración topicsConfiguration
que se asigna a su punto de conexión HTTP.
Nota:
Cada configuración de dominio personalizada debe ser única dentro de la misma región.
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"
}
}
]
}
}
}
Reemplace los siguientes marcadores de posición por los valores adecuados, guárdelo en un archivo denominado NS.json
, y ejecute el comando de la CLI.
Soporte de posición | Descripción |
---|---|
HOSTNAME |
Puede obtener el nombre de host en la página Información general del espacio de nombres de Event Grid en Azure Portal. |
NAMESPACENAME |
Nombre del espacio de nombres de Event Grid. |
TOPICNAME |
Nombre del tema en el espacio de nombres. |
HTTPDOMAINNAME |
Nombre del dominio HTTP. |
MQTTDOMAINNAME |
Nombre del dominio MQTT. |
SUBSCRIPTIONID |
Identificador de suscripción de Azure |
RESOURCEGROUPNAME |
Nombre del grupo de recursos de Azure. |
KEYVAULTNAME |
Nombre del almacén de claves. |
CERTIFICATENAME |
Nombre del certificado. |
El tipo de identidad (type
) puede ser SystemAssigned
o UserAssigned
. Si se selecciona UserAssigned
, especifique la identidad asignada por el usuario mediante la propiedad userAssignedIdentity
.
La respuesta a esta operación incluye la información de DNS en forma de las siguientes propiedades: expectedTxtRecordName
y expectedTxtRecordValue
. Guarde esta información cuando necesite usar estos valores para demostrar la propiedad del dominio personalizado. Esta es una respuesta de ejemplo:
{
"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>"
}
]
}
}
}
Demostrar la propiedad del dominio personalizado
Para demostrar la propiedad del dominio, siga estos pasos:
Agregue la información de DNS.
Vuelva al registrador de dominios y cree un nuevo registro TXT para el dominio en función de la información de DNS copiada del paso anterior. La creación de este TXT para el dominio comprueba la propiedad del nombre de dominio. Establezca el período de vida (TTL) en 3600 segundos (60 minutos) y guarde el registro.
Compruebe el nombre de su dominio personalizado.
Para usar Azure Portal, siga estos pasos para validar los dominios personalizados:
- En la página Dominios personalizados, seleccione Validar dominios.
- En la página Validar dominios, seleccione Validar.
Use el comando siguiente para actualizar el espacio de nombres con una configuración de dominio personalizada idéntica. Este comando desencadena la validación de la propiedad del dominio personalizado. Los registros DNS deben propagarse para poder comprobar el dominio y el tiempo de propagación de la configuración de DNS depende del registrador de dominios.
En la respuesta al comando, compruebe que el
validationState
esApproved
.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" } } ] } } }