我在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。”
有什么想法吗?预先感谢!
答案 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 }}"
管理起来会很麻烦,但是目前我看不到任何其他选择。