使用 Azure CLI 在 Azure VM 上配置 Azure 资源托管标识

Azure 资源的托管标识是 Azure Active Directory 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题

Azure 资源的托管标识在 Azure Active Directory 中为 Azure 服务提供了一个自动托管标识。 此标识可用于通过支持 Azure AD 身份验证的任何服务的身份验证,这样就无需在代码中插入凭据了。

本文介绍如何使用 Azure CLI 在 Azure VM 上执行以下 Azure 资源托管标识操作:

  • 在 Azure VM 上启用和禁用系统分配托管标识
  • 在 Azure VM 上添加和删除用户分配托管标识

如果还没有 Azure 帐户,请先注册试用帐户,然后再继续。

先决条件

  • 如果需要,请安装 Azure CLI 来运行 CLI 参考命令。

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅登录 Azure CLI

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

系统分配的托管标识

本部分介绍如何使用 Azure CLI 在 Azure VM 上启用和禁用系统分配托管标识。

在创建 Azure VM 的过程中启用系统分配托管标识

若要创建启用了系统分配的托管标识的 Azure VM,你的帐户需要虚拟机参与者角色分配。 无需其他 Azure AD 目录角色分配。

  1. 运行 az group create,创建用于容纳和部署 VM 及其相关资源的资源组。 如果已有要改用的资源组,可以跳过这一步:

    az group create --name myResourceGroup --location chinanorth
    
  2. 运行 az vm create 创建 VM。 以下示例根据 --assign-identity 参数的请求,使用指定的 --role--scope 创建名为 myVM 且具有系统分配的托管标识的 VM。 --admin-username--admin-password 参数指定用于登录虚拟机的管理用户名和密码帐户。 针对自己的环境相应地更新这些值:

    az vm create --resource-group myResourceGroup --name myVM --image win2016datacenter --generate-ssh-keys --assign-identity --role contributor --scope mySubscription --admin-username azureuser --admin-password myPassword12
    

在现有 Azure VM 上启用系统分配托管标识

若要在 VM 上启用系统分配的托管标识,你的帐户需要虚拟机参与者角色分配。 无需其他 Azure AD 目录角色分配。

  1. 如果在本地控制台中使用 Azure CLI,首先请使用 az login 登录到 Azure。 使用与包含 VM 的 Azure 订阅关联的帐户。

    az login
    
  2. az vm identity assignidentity assign 命令配合使用,为现有 VM 启用系统分配标识:

    az vm identity assign -g myResourceGroup -n myVm
    

从 Azure VM 中禁用系统分配标识

若要在 VM 上禁用系统分配的托管标识,你的帐户需要虚拟机参与者角色分配。 无需其他 Azure AD 目录角色分配。

如果某个虚拟机不再需要系统分配的标识,但仍需要用户分配的标识,请使用以下命令:

az vm update -n myVM -g myResourceGroup --set identity.type='UserAssigned' 

如果某个虚拟机不再需要系统分配的标识,且没有用户分配的标识,请使用以下命令:

注意

none 区分大小写。 它必须为小写。

az vm update -n myVM -g myResourceGroup --set identity.type="none"

用户分配的托管标识

本部分介绍如何使用 Azure CLI 在 Azure VM 中添加和删除用户分配托管标识。 如果在不同于你的 VM 的 RG 中创建用户分配的托管标识。 必须使用托管标识的 URL 将其分配给 VM。 例如:

--identities "/subscriptions/<SUBID>/resourcegroups/<RESROURCEGROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER_ASSIGNED_ID_NAME>"

在创建 Azure VM 的过程中分配用户分配托管标识

若要在 VM 创建期间将用户分配的标识分配给 VM,你的帐户需要虚拟机参与者托管标识操作员角色分配。 无需其他 Azure AD 目录角色分配。

  1. 如果已有要使用的资源组,可跳过此步骤。 使用 az group create 创建用于包含和部署用户分配托管标识的资源组。 请务必将 <RESOURCE GROUP><LOCATION> 参数值替换为自己的值。 :

    az group create --name <RESOURCE GROUP> --location <LOCATION>
    
  2. 使用 az identity create 创建用户分配托管标识。 -g 参数指定要创建用户分配托管标识的资源组,-n 参数指定其名称。

    重要

    创建用户分配的标识时,只能使用字母数字字符(0-9、a-z、A-Z)、下划线 (_) 和连字符 (-)。 另外,为了确保能够正常分配给 VM/VMSS,名称长度应该为 3 到 128 个字符。 请关注后续更新。 有关详细信息,请参阅 FAQ 和已知问题

    az identity create -g myResourceGroup -n myUserAssignedIdentity
    

    响应包含所创建的用户分配托管标识的详细信息,与以下示例类似。 下一步会用到分配给用户分配托管标识的资源 ID 值。

    {
        "clientId": "73444643-8088-4d70-9532-c3a0fdc190fz",
        "clientSecretUrl": "https://control-chinanorth.identity.chinacloudapi.cn/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<myUserAssignedIdentity>/credentials?tid=5678&oid=9012&aid=73444643-8088-4d70-9532-c3a0fdc190fz",
        "id": "/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>",
        "location": "chinanorth",
        "name": "<USER ASSIGNED IDENTITY NAME>",
        "principalId": "e5fdfdc1-ed84-4d48-8551-fe9fb9dedfll",
        "resourceGroup": "<RESOURCE GROUP>",
        "tags": {},
        "tenantId": "733a8f0e-ec41-4e69-8ad8-971fc4b533bl",
        "type": "Microsoft.ManagedIdentity/userAssignedIdentities"    
    }
    
  3. 运行 az vm create 创建 VM。 以下示例根据 --assign-identity 参数的指定,使用指定的 --role--scope 创建与新用户分配的标识关联的 VM。 请务必将 <RESOURCE GROUP><VM NAME><USER NAME><PASSWORD><USER ASSIGNED IDENTITY NAME><ROLE><SUBSCRIPTION> 参数值替换为自己的值。

    az vm create --resource-group <RESOURCE GROUP> --name <VM NAME> --image UbuntuLTS --admin-username <USER NAME> --admin-password <PASSWORD> --assign-identity <USER ASSIGNED IDENTITY NAME> --role <ROLE> --scope <SUBSCRIPTION> 
    

向现有 Azure VM 分配用户分配托管标识

若要将用户分配的标识分配给 VM,你的帐户需要虚拟机参与者托管标识操作员角色分配。 无需其他 Azure AD 目录角色分配。

  1. 使用 az identity create 创建用户分配标识。 -g 参数指定要创建用户分配标识的资源组,-n 参数指定其名称。 请务必将 <RESOURCE GROUP><USER ASSIGNED IDENTITY NAME> 参数值替换为自己的值:

    重要

    目前不支持创建名称中具有特殊字符(即下划线)的用户分配托管标识。 请使用字母数字字符。 请关注后续更新。 有关详细信息,请参阅 FAQ 和已知问题

    az identity create -g <RESOURCE GROUP> -n <USER ASSIGNED IDENTITY NAME>
    

    响应包含所创建的用户分配托管标识的详细信息,与以下示例类似。

    {
      "clientId": "73444643-8088-4d70-9532-c3a0fdc190fz",
      "clientSecretUrl": "https://control-chinanorth.identity.chinacloudapi.cn/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/credentials?tid=5678&oid=9012&aid=73444643-8088-4d70-9532-c3a0fdc190fz",
      "id": "/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>",
      "location": "chinanorth",
      "name": "<USER ASSIGNED IDENTITY NAME>",
      "principalId": "e5fdfdc1-ed84-4d48-8551-fe9fb9dedfll",
      "resourceGroup": "<RESOURCE GROUP>",
      "tags": {},
      "tenantId": "733a8f0e-ec41-4e69-8ad8-971fc4b533bl",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"    
    }
    
  2. 使用 az vm identity assign 将用户分配标识分配给 VM。 请务必将 <RESOURCE GROUP><VM NAME> 参数值替换为自己的值。 <USER ASSIGNED IDENTITY NAME> 为上一步创建的用户分配托管标识的资源 name 属性。 如果已在不同于你的 VM 的 RG 中创建用户分配的托管标识。 必须使用托管标识的 URL。

    az vm identity assign -g <RESOURCE GROUP> -n <VM NAME> --identities <USER ASSIGNED IDENTITY>
    

从 Azure VM 中删除用户分配的托管标识

若要从 VM 中删除用户分配的标识,你的帐户需要虚拟机参与者角色分配。

如果这是分配给虚拟机的唯一用户分配托管标识,则 UserAssigned 将从标识类型值中删除。 请务必将 <RESOURCE GROUP><VM NAME> 参数值替换为自己的值。 <USER ASSIGNED IDENTITY> 将为用户分配标识的 name 属性,可通过 az vm identity show 在虚拟机的标识部分中找到:

az vm identity remove -g <RESOURCE GROUP> -n <VM NAME> --identities <USER ASSIGNED IDENTITY>

如果 VM 没有系统分配托管标识,并且你希望从中删除所有用户分配标识,请使用以下命令:

注意

none 区分大小写。 它必须为小写。

az vm update -n myVM -g myResourceGroup --set identity.type="none" identity.userAssignedIdentities=null

如果 VM 同时具有系统分配标识和用户分配标识,则可以切换为仅使用系统分配标识,从而删除所有用户分配标识。 请使用以下命令:

az vm update -n myVM -g myResourceGroup --set identity.type='SystemAssigned' identity.userAssignedIdentities=null 

后续步骤