Jos*_*osh 6 azure-active-directory azure-devops azure-pipelines
如何授予服务主体访问权限以将角色分配给它创建的资源?
这是场景。
一世...
Contributor
整个订阅的访问权限)。AzureCLI@1
使用服务连接创建了一个管道任务az group create …
-成功- 制作资源组!az group deployment create …
-成功- 部署了一些东西!
az role assignment create …
-失败ERROR: Insufficient privileges to complete the operation.
我尝试制作服务主体Owner
而不是Contributor
. 没有不同。
这让我明白(有点)原因:Azure 服务主体权限不足,无法管理其他服务主体
这让我在这里:https : //docs.microsoft.com/en-ca/azure/devops/pipelines/release/azure-rm-endpoint?view=azure-devops#failed-to-assign-contributor-role
但我有点卡住了。我想我应该在活动目录中授予我的服务主体某种角色,以便它可以管理角色分配。
我发现了这个:https : //docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/roles-delegate-by-task#roles-and-administrators
基于此,我似乎应该授予我的服务主体Privileged role administrator
访问权限。 可怕。
然后我发现了这个:https : //docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles
因为我想将此服务主体限制为只能在单个订阅中灵活使用 Active Directory 权限,这在AssignableScopes
属性中似乎是可能的。
但是有两件事让我停下来,这让我来到这里。
1)我对我在做什么相对不熟悉,而且我在折腾像Administrator
shudder 之类的可怕的大术语。是时候咨询一些专家了!
2)这看起来很复杂。我正在执行的任务似乎不应该很复杂。我只是想在 Azure 管道中部署 AKS 和容器注册表,并授予 AKS 访问注册表的权限。这就是所有文档所说的(尽管是在命令行中,而不是在管道中)。
那么,我真的应该为订阅创建一个自定义角色,该角色赋予Privileged role administrator
只能分配给订阅的类型权限,然后授予我的服务主体该角色吗?
或者...我该怎么做?
编辑:
我确实尝试使用 action 创建自定义角色Microsoft.Authorization/write
。它因以下错误而失败:'Microsoft.Authorization/write' does not match any of the actions supported by the providers.
但我成功地创造了一个既有行动Microsoft.Authorization/*/write
又有Microsoft.Authorization/*
我的 .json 定义如下所示:
{
"Name": "...", "Description": "...", "IsCustom": true,
"Actions": [ "Microsoft.Authorization/*" ],
"AssignableScopes": [
"/subscriptions/[subscriptionid]"
]
}
Run Code Online (Sandbox Code Playgroud)
将角色分配给服务主体后,仍然失败,访问权限不足。我通过 本地登录az login --service-principal
,尝试使用我的新权限,并收到以下消息:
The client '...' with object id '...' does not have authorization to perform action 'Microsoft.Resources/subscriptions/resourceGroups/.../Microsoft.Authorization/read' over scope '/subscriptions/.../resourceGroups/.../.../providers/Microsoft.Authorization/roleDefinitions' or the scope is invalid. If access was recently granted, please refresh your credentials.
编辑:解决方案
{
"Name": "...", "Description": "...", "IsCustom": true,
"Actions": [
"Microsoft.Authorization/roleAssignments/read",
"Microsoft.Authorization/roleAssignments/write"
],
"AssignableScopes": [
"/subscriptions/[subscriptionid]"
]
}
Run Code Online (Sandbox Code Playgroud)
这适用于az role definition create
.
服务主体还需要是目录读取者,除非您通过 object-id 指定角色分配。 Azure Active Directory:使用 PowerShell 将服务主体添加到目录读取者角色
可以将其分配给服务主体,并且az
当作为该服务主体执行命令时,它会成功创建角色分配。
您需要授予它Microsoft.Authorization/roleAssignments/write
自定义权限或所有者的内置角色。如果您希望能够对订阅中的每个资源组\资源执行此操作,则范围将是订阅,或者您可以更精细(例如特定资源组甚至资源)。
您的自定义角色链接是创建自定义角色的正确方法。
Microsoft.Authorization/roleAssignments/read
编辑:OP也需要添加,对我来说,没有它它也可以工作。
归档时间: |
|
查看次数: |
2190 次 |
最近记录: |