Event Grid 네임스페이스의 MQTT 및 HTTP 호스트 이름에 사용자 지정 도메인 이름 할당
Event Grid 네임스페이스는 만들 때 자동으로 HTTP 호스트 이름이 할당됩니다. 네임스페이스에서 MQTT를 사용하는 경우 MQTT 호스트 이름도 네임스페이스에 할당됩니다. 클라이언트는 이러한 호스트 이름을 사용하여 Event Grid 네임스페이스와 통신합니다.
기본 호스트 이름과 함께 Event Grid 네임스페이스의 MQTT 호스트 이름과 HTTP 호스트 이름에 사용자 지정 도메인 이름을 할당할 수 있습니다. 사용자 지정 도메인 구성은 보안 및 규정 준수 요구 사항을 충족하는 데 도움이 될 뿐만 아니라 이미 도메인에 연결된 클라이언트를 수정할 필요가 없습니다.
필수 조건
네임스페이스에 사용자 지정 도메인을 사용하려면 다음 필수 구성 요소가 필요합니다.
- 자신이 소유하고 DNS(Domain Name System) 레코드를 수정할 수 있는 사용자 지정 도메인입니다. DNS 레코드를 수정하려면 GoDaddy와 같은 도메인 공급자의 DNS 레지스트리에 대한 액세스 권한이 필요합니다.
- 공용 또는 프라이빗 CA의 사용자 지정 도메인에 대한 SSL(Secure Sockets Layer) 인증서입니다.
- 사용자 지정 도메인에 대한 SSL 인증서를 호스팅하기 위한 Azure Key Vault 계정입니다.
대략적인 단계
네임스페이스에 사용자 지정 도메인을 사용하려면 다음 단계를 따릅니다.
- 사용자 지정 도메인이 Event Grid 네임스페이스 엔드포인트를 가리키도록 DNS 항목을 추가합니다.
- Event Grid 네임스페이스에서 관리 ID를 사용하도록 설정합니다.
- 사용자 지정 도메인에 대한 서버 인증서를 호스팅하는 Azure Key Vault 계정을 만듭니다.
- 네임스페이스의 관리 ID에 대해 Azure Key Vault에 역할 할당을 추가합니다.
- 사용자 지정 도메인 이름, 인증서 이름 및 키 자격 증명 모음 인스턴스 참조를 지정하여 Event Grid 네임스페이스를 사용자 지정 도메인과 연결합니다.
- Event Grid 네임스페이스는 사용자 지정 도메인의 소유권을 증명하는 데 사용하는 TXT 레코드를 생성합니다.
- 이전 단계에서 Event Grid가 만든 값을 기반으로 TXT 레코드를 만들어 도메인 소유권을 증명합니다.
- Event Grid는 클라이언트가 사용할 수 있도록 사용자 지정 도메인을 활성화하기 전에 사용자 지정 도메인의 TXT 레코드의 유효성을 검사합니다.
- 클라이언트는 사용자 지정 도메인을 통해 Event Grid 네임스페이스에 연결할 수 있습니다.
제한 사항
- 사용자 지정 도메인 구성은 MQTT 호스트 이름과 HTTP 호스트 이름 전체에서 지역별로 고유합니다.
- 동일한 네임스페이스에 있는 MQTT 호스트 이름과 HTTP 호스트 이름에 사용자 지정 도메인 구성이 동일할 수 없습니다.
- 사용자 지정 도메인 구성은 동일한 지역의 모든 네임스페이스에 대한 MQTT 또는 HTTP 호스트 이름과 충돌할 수 없습니다.
DNS 항목 추가
도메인을 연결하려는 Event Grid 네임스페이스의 호스트 이름을 가리키도록 도메인에 DNS 레코드를 만듭니다. 자세한 내용은 Azure 클라우드 서비스에 대한 사용자 지정 도메인 이름 구성을 참조하세요.
네임스페이스의 HTTP 호스트 이름은 다음 형식입니다. <namespace name>.centraluseuap-1.eventgrid.azure.net
네임스페이스의 MQTT 호스트 이름은 다음 형식입니다. <namespace name>.centraluseuap-1.ts.eventgrid.azure.net
Event Grid 네임스페이스에서 관리 ID 사용
네임스페이스는 관리 ID를 사용하여 Azure Key Vault 인스턴스에 액세스하여 사용자 지정 도메인에 대한 서버 인증서를 가져옵니다. Event Grid 네임스페이스에서 시스템 할당 관리 ID를 사용하도록 설정하려면 다음 명령을 사용합니다.
az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}"
Azure Portal을 사용하여 시스템 및 사용자 할당 ID를 구성하는 방법에 대한 자세한 내용은 Event Grid 네임스페이스에 관리 ID 사용을 참조하세요.
Azure Key Vault 계정 만들기 및 서버 인증서 업로드
다음 명령을 사용하여 Azure Key Vault 계정을 만듭니다.
az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup"
다음 명령을 사용하여 인증서를 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에서 인증서 가져오기를 참조하세요.
네임스페이스의 관리 ID에 대해 Azure Key Vault에 역할 할당 추가
다음 단계에서 Azure Key Vault 계정에 액세스하려면 네임스페이스에 대한 액세스 권한을 제공해야 합니다.
다음 명령을 사용하여 Event Grid 네임스페이스 시스템 관리 ID 주체 ID를 가져옵니다.
$principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv)
Azure Key Vault 리소스 ID를 가져옵니다.
$keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv)
네임스페이스의 관리 ID에 대해 Key Vault에 역할 할당을 추가합니다.
az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId
Key Vault 액세스 및 포털 환경에 대한 자세한 내용은 Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스 제공을 참조하세요.
Event Grid 네임스페이스를 사용자 지정 도메인과 연결
이 단계에서는 확인되지 않은 사용자 지정 도메인을 네임스페이스와 연결하지만 다음 단계에서 사용자 지정 도메인의 소유권을 증명할 때까지 이를 사용할 수 없습니다.
Azure Portal 사용
사용자 지정 도메인을 추가하려면 다음 단계를 따릅니다.
Azure Portal에서 Event Grid 네임스페이스로 이동
Event Grid 네임스페이스 페이지의 왼쪽 탐색 메뉴에서 사용자 지정 도메인을 선택합니다.
사용자 지정 도메인 페이지에서 + 사용자 지정 도메인을 선택합니다.
사용자 지정 도메인 추가 페이지에서 다음 속성의 값을 지정합니다.
도메인 이름: Event Grid 네임스페이스 호스트 이름 중 하나에 할당될 정규화된 도메인 이름입니다.
연결된 호스트 이름 형식: 사용자 지정 도메인 이름과 연결될 기본 호스트 이름 형식입니다.
인증서 URL: Azure Key Vault에 있는 서버 인증서의 인증서 식별자입니다. 인증서 식별자의 마지막 세그먼트를 제외하여 인증서의 기본 식별자만 포함합니다. 구독에서 인증서와 키 자격 증명 모음을 선택하는 대신 키 자격 증명 모음을 사용하여 인증서 선택을 선택할 수 있습니다.
관리 ID: 만들어진 서버 인증서에 액세스하기 위해 Key Vault로 인증하는 데 사용되는 관리 ID입니다.
추가 선택
사용자 지정 도메인 소유권을 증명하기 위해 이 값을 사용해야 하므로 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 명령을 실행합니다.
자리 표시자 | 설명 |
---|---|
HOSTNAME |
Azure Portal에 있는 Event Grid 네임스페이스의 개요 페이지에서 호스트 이름을 확인할 수 있습니다. |
NAMESPACENAME |
Event Grid 네임스페이스의 이름. |
TOPICNAME |
네임스페이스의 항목 이름. |
HTTPDOMAINNAME |
HTTP 도메인의 이름. |
MQTTDOMAINNAME |
MQTT 도메인의 이름. |
SUBSCRIPTIONID |
Azure 구독 ID입니다. |
RESOURCEGROUPNAME |
Azure 리소스 그룹의 이름입니다. |
KEYVAULTNAME |
Key Vault의 이름입니다. |
CERTIFICATENAME |
인증서의 이름입니다. |
ID 유형(type
)은 SystemAssigned
또는 UserAssigned
일 수 있습니다. UserAssigned
를 선택한 경우 userAssignedIdentity
속성을 사용하여 사용자 할당 ID를 지정합니다.
이 작업에 대한 응답에는 expectedTxtRecordName
및 expectedTxtRecordValue
속성 형식의 DNS 정보가 포함됩니다. 사용자 지정 도메인 소유권을 증명하기 위해 이 값을 사용해야 하므로 이 정보를 저장합니다. 샘플 응답은 다음과 같습니다.
{
"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>"
}
]
}
}
}
사용자 지정 도메인 소유권 증명
도메인 소유권을 증명하려면 다음 단계를 따릅니다.
DNS 정보를 추가합니다.
도메인 등록 기관으로 돌아가서 이전 단계에서 복사한 DNS 정보를 기반으로 도메인에 대한 새 TXT 레코드를 만듭니다. 도메인에 대해 이 TXT를 만들면 도메인 이름의 소유권이 확인됩니다. TTL(Time to Live)을 3,600초(60분)로 설정한 후 기록을 저장합니다.
사용자 지정 도메인 이름을 확인합니다.
Azure Portal을 사용하려면 다음 단계에 따라 사용자 지정 도메인의 유효성을 검사합니다.
- 사용자 지정 도메인 페이지에서 도메인 유효성 검사을 선택합니다.
- 도메인 유효성 검사 페이지에서 유효성 검사을 선택합니다.
동일한 사용자 지정 도메인 구성으로 네임스페이스를 업데이트하려면 다음 명령을 사용합니다. 이 명령은 사용자 지정 도메인 소유권 유효성 검사를 트리거합니다. 도메인을 확인하기 전에 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" } } ] } } }