在Azure中使用Ansible将用户分配的托管身份(UAMI)分配给VM

时间:2020-07-24 05:51:35

标签: azure ansible azure-managed-identity

我在Azure环境中为用户分配了受管理身份(UAMI),并且可以使用以下azure-cli命令以编程方式将其分配给我选择的任何VM:

az vm identity assign --ids [Resource ID of VM] --identities [Resource ID of UAMI]

我的问题现在有办法在Ansible中做到这一点吗?当我查看“ azure_rm_virtualmachine”模块文档时,似乎没有找到在VM创建时分配UAMI的方法。即使有启用系统管理的身份的功能。

我一直在查看“ azure_rm_roleassignment”文档,但是尽管我尝试通过各种方式为我的VM和UAMI插入ID,但Ansible每次都会返回一些错误。例如,具有以下内容:

  - name: Create a role assignment
    azure_rm_roleassignment:
      scope: "/subscriptions/{{ subscriptionID }}/"
      assignee_object_id: "{{ VMresourceID }}"
      role_definition_id:
        "{{ UAMIresourceID }}"

错误消息为:“创建角色分配时出错:Azure错误:InvalidPrincipalId \ nMessage:主体ID'XXX'无效。主体ID必须为GUID。”

有什么想法吗?预先感谢!

2 个答案:

答案 0 :(得分:0)

如我所见,您为assignee_object_id设置了VM资源ID,我认为这是问题所在。无论选择系统分配的标识还是用户分配的管理标识,assignee_object_id都应该是其对象ID,而不是资源ID。您可以通过CLI命令获取对象ID:

az vm identity show -g group_name -n vm_name --query principalId -o tsv

查看有关assignee_object_id的更多详细信息。

答案 1 :(得分:0)

似乎ansible当前不支持将UAMI分配给VM的方法;就像CLI中的az vm identity assign --ids [Resource ID of VM] --identities [Resource ID of UAMI]一样。因此,作为暂时的选择,我们暂时选择只使用系统管理的身份。我将以下内容添加到ansible的VM创建中:

azure_rm_virtualmachine:
  vm_identity: SystemAssigned
register: my_server_reg

然后在我的角色分配中添加以下内容:

azure_rm_roleassignment:
  scope: "/subscriptions/{{ subscription_id }}/"
  assignee_object_id: "{{ my_server_reg.ansible_facts.azure_vm.identity.principalId }}"
  role_definition_id:
        "/subscriptions/{{ subscription_id }}/providers/Microsoft.Authorization/roleDefinitions/{{ blob_reader_roledef_id }}"

管理起来会很麻烦,但是目前我看不到任何其他选择。