我们目前有一个 Packer 企业应用程序,它在订阅级别以贡献者角色运行。
但是,我们认为该应用程序的范围太大。相反,我们希望仅向其授予一个资源组的贡献者级别访问权限。
因此,Packer 将能够创建其临时资源,以便仅在一个资源组中创建镜像,并且不需要订阅中任何其他内容的权限。
我通过 JSON 创建了一个自定义角色,如下所示:(我已更改为示例订阅 ID 和资源名称)
{
"assignableScopes": [
"/subscriptions/123456789/resourceGroups/packer"
],
"description": "Custom role for packer app, with granular permssions for packer resource group",
"id": "/subscriptions/123456789/providers/Microsoft.Authorization/roleDefinitions/123456-1234-1234-1234-12345678",
"name": "123456-1234-1234-1234-12345678",
"permissions": [
{
"actions": [
"Microsoft.Authorization/*/Delete",
"Microsoft.Authorization/*/Write",
"Microsoft.Authorization/elevateAccess/Action",
"Microsoft.Blueprint/blueprintAssignments/write",
"Microsoft.Blueprint/blueprintAssignments/delete"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "PackerRole",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
然后我使用 Azure CLI 创建了该角色:
az role definition create --role-definition PackerRole.json --subscription 123456789
但是,我不知道如何将其分配给 Packer 应用程序。它无法分配,也不会出现在订阅范围中 - 可能是因为自定义角色的范围只有 1 个资源组。
我尝试转到 Azure Active Directory --> 应用程序注册 --> Packer,但这里没有地方可以分配我自定义创建的角色。 “角色和管理员”选项卡让我不清楚,因为这里没有我们的自定义角色,并且创建新角色似乎只允许采用 microsoft.directory/applications/ 格式的权限操作p>
查看此应用程序的托管应用程序页面也没有提供任何答案,仅允许用户和组分配。
我已经浏览了文档,但到目前为止还没有找到与此用例相关的任何内容。
最佳答案
您不需要为此使用自定义角色。贡献者角色是内置的,可以分配给任何范围。无法看到您的自定义角色的原因是您缺少对象根目录中的 "isCustom": true
设置。
如果您希望在资源组级别分配贡献者,您可以使用门户、PowerShell、Azure CLI 甚至 REST API。这称为角色分配。 由于您似乎使用的是 CLI,因此您可以在 RG 范围内分配角色,如下所示:
假设您的应用程序正在使用服务主体运行:
az role assignment create --assignee <packer-service-principal> --role Contributor --scope /subscriptions/123456789/resourceGroups/packer --assignee-principal-type ServicePrincipal
如果您想使用门户,可以转到资源组 -> 打包程序 -> 访问控制(IAM) -> 角色分配 -> 添加
关于azure - 将自定义角色分配给 Azure 上的 Packer 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58522014/