azure-active-directory - 如何仅授予部署到特定插槽的权限?
问题描述
我在 Azure 中有一个带有部署槽的 Web 应用程序。应用程序放置在 ASE 中。我需要 Azure AD 中的服务主体(应用程序注册),该服务主体有权仅部署到特定插槽,而不是整个 Web 应用程序。
仅为 TEST 槽创建了具有“参与者”角色分配的服务主体。此服务主体无权访问整个 Web 应用程序,在那里没有任何角色。
部署到 TEST 插槽时出现以下错误:
az login --service-principal --username XXX-XXX-XXX-XXX-XXX --password ... --tenant XXX-XXX-XXX-XXX-XXX
az webapp deployment source config-zip --resource-group myresgroup --name mywebapp --src archive.zip --slot test
ERROR: AuthorizationFailed - The client 'XXX-XXX-XXX-XXX-XXX' with object id 'XXX-XXX-XXX-XXX-XXX'
does not have authorization to perform action 'Microsoft.Web/sites/publishxml/action'
over scope '/subscriptions/XXX-XXX-XXX-XXX-XXX/resourceGroups/myresgroup/providers/Microsoft.Web/sites/mywebapp'
or the scope is invalid.
If access was recently granted, please refresh your credentials.
是否可以仅授予部署到特定插槽的权限?
解决方案
解决方案是定义一个自定义角色,该角色只允许执行Microsoft.Web/sites/publishxml/Action
.
我将角色称为Publishing profile reader。
Publishing profile reader
在 Web 应用级别创建角色。
Publishing profile reader
角色是从角色中复制而来的Contributor
,这里是 JSON 定义:
{
"properties": {
"roleName": "Publishing profile reader",
"description": "Role has permission to read website publishing profile.",
"assignableScopes": [
"/subscriptions/xxx-xxx-xxx-xxx/resourceGroups/myresgroup/providers/Microsoft.Web/sites/mywebapp"
],
"permissions": [
{
"actions": [
"Microsoft.Web/sites/publishxml/Action"
],
"notActions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete",
"Microsoft.Compute/galleries/share/action"
],
"dataActions": [],
"notDataActions": []
}
]
}
}
然后在主 Web 应用程序中将此自定义
Publishing profile reader
角色分配给用于槽部署的服务主体。Contributor
在插槽级别将角色分配给该服务主体。
因此,此服务主体可以部署在插槽中,但无权部署到生产环境。
推荐阅读
- reactjs - 使用“即发即弃”API 分配专用于实体创建的 Redux 状态是否是一种好习惯?
- visual-studio - 是否可以安装 VC 工具集 14.10 版?
- sql-server - 从 SQL Server 2016 中的 STRING_SPLIT 的位置返回值
- django - 在基于函数的视图中访问模型。
- ios - 包含结构的数组的哈希值
- php - 在 symfony 上创建操作时出错
- c# - 从 Azure 函数使用 Dynamics 365 进行身份验证
- javascript - 从一组承诺中返回所有已解决的承诺?
- javascript - Express 中间件混淆
- react-native - 为什么 react-native 需要很长时间才能启动?