azure 为物联网中心创建服务主体
azure create service-principal for iot hub
我在 Azure Iot Hub
的 scope
下尝试通过 azure cli 创建 service principal
时收到 ERROR: The request did not have a subscription or a valid tenant level resource provider.
。我正在使用 CLI (bash),但 python 也足够了。
如末尾所示,我拥有在此订阅中创建 sp 的正确凭据和权利,并且我拥有相关物联网中心的所有者权利。
万一我错过了一个更好的方法来完成这个,这里是上下文:我们需要验证一个作业,该作业在新设备被刷新后立即自动注册,然后再被运走以插入in。这会做很多事情来定制闪存文件系统(例如添加唯一的设备主机名和本地密码);最后它需要向 IotHub 注册设备。
az iot hub device-identity create --device-id [device id] --hub-name [hub name] --edge-enabled
在我的用户权限下,我可以 az login
并完成所有这些 - 但它需要 运行 在没有交互式登录的自动化作业中。我相信 service principal
是 实现此目的的方法 (?)。
因此,尝试创建主体 I 运行:
# the following pulls a valid(looking) `"/subscriptions/NAME/resourceGroups/THEGROUP/providers/Microsoft.Devices/IotHubs/THEHUB"`
IOTHUB_ID="$(az iot hub show --name TheHubName --query id)
az ad sp create-for-rbac --name http://my-iothub-serviceprincipal --scopes $IOTHUB_ID --role contributor --query password --output tsv
失败并显示以下内容(注意:贡献者范围太广,稍后将成为自定义角色):
WARNING: Role assignment creation failed.
ERROR: The request did not have a subscription or a valid tenant level resource provider.
作为确保我拥有正确的 az login
和其他本地状态的测试,以下针对 Azure ACR
scope
的类似命令会成功 ,在门户中可以看到一个新的服务主体。
ACR_ID="$(az iot hub show --name TheAcrName --query id)
az ad sp create-for-rbac --name http://acr-service-principal-foobar --scopes $ACR_ID --role acrpull --query password --output tsv
这是由 azure CLI 中的错误引起的。 az iot hub show
正在返回一个引用不正确的字符串; az acr show
例如没有。
az iot hub show --name your-iothub-name --query id
returns 像下面这样的字符串。 两个引用 "
都是原文
'"/subscriptions/guid/.../IotHubs/your-iothub-name"'
az acr show --name your-acr-name --query id
returns 相同的格式字符串,但没有额外的 '
引号。
"/subscriptions/.../registries/your-acr-name"
az iot hub device-identity create
无法处理 '"
..."'
(可以理解)但不幸的是并没有完全失败,这使得引用混合起来有点难以追踪一点脚本输出。
我在 Azure Iot Hub
的 scope
下尝试通过 azure cli 创建 service principal
时收到 ERROR: The request did not have a subscription or a valid tenant level resource provider.
。我正在使用 CLI (bash),但 python 也足够了。
如末尾所示,我拥有在此订阅中创建 sp 的正确凭据和权利,并且我拥有相关物联网中心的所有者权利。
万一我错过了一个更好的方法来完成这个,这里是上下文:我们需要验证一个作业,该作业在新设备被刷新后立即自动注册,然后再被运走以插入in。这会做很多事情来定制闪存文件系统(例如添加唯一的设备主机名和本地密码);最后它需要向 IotHub 注册设备。
az iot hub device-identity create --device-id [device id] --hub-name [hub name] --edge-enabled
在我的用户权限下,我可以 az login
并完成所有这些 - 但它需要 运行 在没有交互式登录的自动化作业中。我相信 service principal
是 实现此目的的方法 (?)。
因此,尝试创建主体 I 运行:
# the following pulls a valid(looking) `"/subscriptions/NAME/resourceGroups/THEGROUP/providers/Microsoft.Devices/IotHubs/THEHUB"`
IOTHUB_ID="$(az iot hub show --name TheHubName --query id)
az ad sp create-for-rbac --name http://my-iothub-serviceprincipal --scopes $IOTHUB_ID --role contributor --query password --output tsv
失败并显示以下内容(注意:贡献者范围太广,稍后将成为自定义角色):
WARNING: Role assignment creation failed.
ERROR: The request did not have a subscription or a valid tenant level resource provider.
作为确保我拥有正确的 az login
和其他本地状态的测试,以下针对 Azure ACR
scope
的类似命令会成功 ,在门户中可以看到一个新的服务主体。
ACR_ID="$(az iot hub show --name TheAcrName --query id)
az ad sp create-for-rbac --name http://acr-service-principal-foobar --scopes $ACR_ID --role acrpull --query password --output tsv
这是由 azure CLI 中的错误引起的。 az iot hub show
正在返回一个引用不正确的字符串; az acr show
例如没有。
az iot hub show --name your-iothub-name --query id
returns 像下面这样的字符串。 两个引用 "
都是原文
'"/subscriptions/guid/.../IotHubs/your-iothub-name"'
az acr show --name your-acr-name --query id
returns 相同的格式字符串,但没有额外的 '
引号。
"/subscriptions/.../registries/your-acr-name"
az iot hub device-identity create
无法处理 '"
..."'
(可以理解)但不幸的是并没有完全失败,这使得引用混合起来有点难以追踪一点脚本输出。