【Azure IoT Hub】SAS Token은 New-AzIotHubSasToken이 아닌 az iot hub generate-sas-token에서 발행한다
tl;dr
New-AzIotHubSasToken
대신 az iot hub generate-sas-token
를 사용합시다. 경위
일본에서 전개하고 있는 서비스를 중국에서도 전개하게 되었습니다.
Azure IoT Hub에 REST API를 통해 액세스하는 위치가 있었으므로 리소스 배포 후 SAS Token을 얻으면 성공적으로 연결할 수 없습니다. (전, 어떻게 만들었나?)
또한 다음 명령은 모두 PowerShell입니다.
시도 1: Azure 포털에서 Azure Cloud Shell 실행
아래 이미지를 보면 알 수 있듯이 중국 리전에서는 Cloud Shell이 배포되지 않은 것 같습니다.
아, 어쩌지…
시도 2 : New-AzIotHubSasToken 명령으로 SAS Token 게시
우연히 PC에 들어간 것이 AzureRM이었습니다.
그렇기 때문에, 매우 훌륭하게 벽에 맞춰 버렸습니다.
절차
로그인
connect-azaccount -environment azurechinacloud
중국 지역은 -environment azurechinacloud
필수입니다.
엔드포인트에 대한 자세한 내용은 Azure와 독립적인 클라우드에서 Azure PowerShell로 스토리지 관리 > 엔드포인트 접미사을 참조하십시오.
의기양양과 IoT Hub의 SAS Token을 발행합니다.
New-AzIotHubSasToken
-ResourceGroupName "{resourceGroupName}"
-IotHubName "{iotHubName}"
-Duration 31104000
-KeyName "iothubowner"
액세스할 수 있는지 시도해 봅니다.
Invoke-WebRequest
https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30
-Headers @{
"Authorization"="SharedAccessSignature sr={iotHubName}.azure-devices.cn&sig=x&se=x&skn=iothubowner"
}
오류가 있습니다.
{
"Message": "ErrorCode:IotHubUnauthorizedAccess;Unauthorized",
"ExceptionMessage": "Tracking ID:00000000000000000000000000000000-G:7-TimeStamp:08/25/2020 00:00:00"
}
Unauthorized ··.
SAS Token이 잘못되었기 때문에 원인이지만 SAS Token을 보내지 않아도 (비어도) 동일한 메시지가 반환되므로 처음에는 무엇이 원인인지 알지 못했습니다.
시도 3: az iot hub generate-sas-token 명령으로 SAS Token 발급
절차
Azure CLI(Azure PowerShell Az 모듈) 설치
- Azure CLI 설치
로그인하고 구독을 지정합니다.
az login --tenant {tenantName}
az account set --subscription {subscriptionId}
의심 어깨가 되면서 SAS Token을 발행해 보겠습니다.
az iot hub generate-sas-token -n {iotHubName}
액세스할 수 있는지 시도해 봅니다.
Invoke-WebRequest
https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30
-Headers @{
"Authorization"="SharedAccessSignature sr={iotHubName}.azure-devices.cn&sig=x&se=x&skn=iothubowner"
}
오, 잘 작동했습니다.
StatusCode : 200
StatusDescription : OK
Content : {"deviceId":"x","etag":"x","deviceEtag":"x","status":"enabled
","statusUpdateTime":"0001-01-01T00:00:00Z","connectionState":"Disconnected","lastActivityTime":"20
20...
RawContent : HTTP/1.1 200 OK
Vary: Origin
x-ms-request-id: 00000000-0000-0000-0000-000000000000
Content-Length: 1199
Content-Type: application/json; charset=utf-8
Date: Tue, 25 Aug 2020 00:00:00 GMT
Server: ...
Forms : {}
Headers : {[Vary, Origin], [x-ms-request-id, 00000000-0000-0000-0000-000000000000], [Content-Length, 1199], [
Content-Type, application/json; charset=utf-8]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 1199
덤: Visual Studio Code 확장(vscode-azure-iot-toolkit)으로 SAS Token 발급
Visual Studio Code의 확장 기능을 사용하면 매우 쉽게 SAS Token을 게시할 수 있습니다.
하지만 장치별 SAS Token은 제대로 작동하지 않습니다.
왜?
장치 트윈을 얻는 방법
curl -X GET "https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30"
-H "Authorization: SharedAccessSignature sr=x&sig=x&se=x&skn=iothubowner"
잡기
덧붙여서, 이 건을 조사하고 있으면, 자신이 쓴 기사를 찾아 「커맨드 바꾸었던 정도로 발행된 Token 바뀌는 것이 아닐까」라고 생각해, 시험하는 것이 늦었습니다.
과거의 나, 미안해.
connect-azaccount -environment azurechinacloud
New-AzIotHubSasToken
-ResourceGroupName "{resourceGroupName}"
-IotHubName "{iotHubName}"
-Duration 31104000
-KeyName "iothubowner"
Invoke-WebRequest
https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30
-Headers @{
"Authorization"="SharedAccessSignature sr={iotHubName}.azure-devices.cn&sig=x&se=x&skn=iothubowner"
}
{
"Message": "ErrorCode:IotHubUnauthorizedAccess;Unauthorized",
"ExceptionMessage": "Tracking ID:00000000000000000000000000000000-G:7-TimeStamp:08/25/2020 00:00:00"
}
az login --tenant {tenantName}
az account set --subscription {subscriptionId}
az iot hub generate-sas-token -n {iotHubName}
Invoke-WebRequest
https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30
-Headers @{
"Authorization"="SharedAccessSignature sr={iotHubName}.azure-devices.cn&sig=x&se=x&skn=iothubowner"
}
StatusCode : 200
StatusDescription : OK
Content : {"deviceId":"x","etag":"x","deviceEtag":"x","status":"enabled
","statusUpdateTime":"0001-01-01T00:00:00Z","connectionState":"Disconnected","lastActivityTime":"20
20...
RawContent : HTTP/1.1 200 OK
Vary: Origin
x-ms-request-id: 00000000-0000-0000-0000-000000000000
Content-Length: 1199
Content-Type: application/json; charset=utf-8
Date: Tue, 25 Aug 2020 00:00:00 GMT
Server: ...
Forms : {}
Headers : {[Vary, Origin], [x-ms-request-id, 00000000-0000-0000-0000-000000000000], [Content-Length, 1199], [
Content-Type, application/json; charset=utf-8]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 1199
curl -X GET "https://{iotHubName}.azure-devices.cn/twins/{deviceName}?api-version=2018-06-30"
-H "Authorization: SharedAccessSignature sr=x&sig=x&se=x&skn=iothubowner"
잡기
덧붙여서, 이 건을 조사하고 있으면, 자신이 쓴 기사를 찾아 「커맨드 바꾸었던 정도로 발행된 Token 바뀌는 것이 아닐까」라고 생각해, 시험하는 것이 늦었습니다.
과거의 나, 미안해.
출력은 정말 중요합니다.
그리고, 편견과 선입관을 가지지 않고, 기사를 읽어 봅시다.
이상.
Reference
이 문제에 관하여(【Azure IoT Hub】SAS Token은 New-AzIotHubSasToken이 아닌 az iot hub generate-sas-token에서 발행한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hydrangeas/items/730f60c3888199b3b606텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)