azure - 将自定义角色分配给 Azure 上的 Packer 应用程序

标签 azure packer

我们目前有一个 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/

相关文章:

java - 将 Spring Boot jar 部署到 Azure,并使 Azure 重新启动

c# - 设置分块 http 响应的最大块大小

Azure 认知 : Supplied language not supported

vagrant - 在 packer 中指定要连接的 VMWare 融合虚拟网络

packer - 在加壳器中缓存文件下载

azure - 如何使用Logic App发送电子邮件?

c# - Azure App Insights API 在 C# 中使用查询获取跟踪

linux - 在 EC2 实例上使用用户数据脚本运行 ansible-playbook

amazon-web-services - 为什么在尝试构建镜像时,packer build 没有显示这样的文件或目录?

vagrant - Packer 使用默认变量?