使用範本在 Azure 虛擬機器擴展集上設定 Azure 資源受控識別

適用於 Azure 資源的受控識別是 Azure Active Directory 的一項功能。 每個支援適用於 Azure 資源的受控識別 Azure 服務均受限於其本身的時間表。 在開始之前,請務必先檢閱資源的受控識別可用性狀態和已知問題

Azure 資源受控識別會在 Azure Active Directory 中為 Azure 服務提供自動受控識別。 您可以使用此身分識別來向任何支援 Azure AD 驗證的服務進行驗證,不需要任何您程式碼中的認證。

在本文中,您將了解如何使用 Azure Resource Manager 部署範本,在 Azure 虛擬機器擴展集上執行以下 Azure 資源受控識別作業:

  • 在 Azure 虛擬機器擴展集上啟用和停用系統指派的受控識別
  • 在 Azure 虛擬機器擴展集上新增和移除使用者指派的受控識別

先決條件

Azure 資源管理員範本

如同 Azure 入口網站和指令碼,Azure Resource Manager 範本可讓您部署由 Azure 資源群組所定義的最新或已修改資源。 範本編輯和部署有幾個選項可用 (在本機和入口網站),包括:

不論您選擇的選項,在初始部署和重新部署期間,範本的語法都相同。 在新的或現有 VM 上啟用 Azure 資源受控識別,是以相同的方式來完成。 此外,根據預設,Azure Resource Manager 會對部署採取累加式更新

系統指派的受控識別

在本節中,您將使用 Azure Resource Manager 範本以啟用和停用系統指派的受控識別。

在建立虛擬機器擴展集或現有的虛擬機器擴展集期間,啟用系統指派的受控識別

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器擴展集的 Azure 訂用帳戶相關聯的帳戶。

  2. 若要啟用系統指派的受控識別,請將範本載入到編輯器、在 resources 區段中找出感興趣的 Microsoft.Compute/virtualMachinesScaleSets 資源,然後在與 "type": "Microsoft.Compute/virtualMachinesScaleSets" 屬性相同的層級上新增 identity。 使用下列語法:

    "identity": {
        "type": "SystemAssigned"
    }
    
  3. 當您完成時,應該將下列區段新增至範本的資源區段,而且應該像下面這樣:

     "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2018-06-01",
             "type": "Microsoft.Compute/virtualMachineScaleSets",
             "name": "[variables('vmssName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "SystemAssigned",
             },
            "properties": {
                 //other resource provider properties...
                 "virtualMachineProfile": {
                     //other virtual machine profile properties...
    
                 }
             }
         }
     ]
    

從 Azure 虛擬機器擴展集停用系統指派的受控識別

如果您的虛擬機器擴展集不再需要系統指派的受控識別:

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器擴展集的 Azure 訂用帳戶相關聯的帳戶。

  2. 編輯器中載入範本,然後在 resources 區段找出想要的 Microsoft.Compute/virtualMachineScaleSets 資源。 若您的虛擬機器只有系統指派的受控識別,您可以將識別類型變更為 None 予以停用。

    Microsoft.Compute/virtualMachineScaleSets API 2018-06-01 版

    如果您的 apiVersion 為 2018-06-01 且您的 VM 同時具有系統與使用者指派的受控識別,請從識別類型中移除 SystemAssigned,並保留 UserAssigned 以及 userAssignedIdentities 字典值。

    Microsoft.Compute/virtualMachineScaleSets API 2018-06-01 版

    若您的 apiVersion 為 identityIds 且您的虛擬機器擴展集同時具有系統與使用者指派的受控識別,請從識別類型中移除 2017-12-01,並保留 SystemAssigned 以及使用者指派受控識別的 UserAssigned 陣列。

    下列範例示範如何從沒有使用者指派受控識別的虛擬機器擴展集中移除系統指派的受控識別:

    {
        "name": "[variables('vmssName')]",
        "apiVersion": "2018-06-01",
        "location": "[parameters(Location')]",
        "identity": {
            "type": "None"
         }
    
    }
    

使用者指派的受控識別

在本節中,您會使用 Azure Resource Manager 範本,將使用者指派的受控識別指派給虛擬機器擴展集。

注意

若要使用 Azure Resource Manager 範本建立使用者指派的受控識別,請參閱建立使用者指派的受控識別

將使用者指派的受控識別指派給虛擬機器擴展集

  1. resources 元素下新增下列項目,以將使用者指派的受控識別指派給您的虛擬機器擴展集。 請務必將 <USERASSIGNEDIDENTITY> 取代為您建立的使用者指派受控識別名稱。

    Microsoft.Compute/virtualMachineScaleSets API 2018-06-01 版

    如果您的 apiVersion 為 2018-06-01,則使用者指派的受控識別會以 userAssignedIdentities 字典格式儲存,而 <USERASSIGNEDIDENTITYNAME> 值必須儲存在您範本 variables 區段內所定義的變數中。

    {
        "name": "[variables('vmssName')]",
        "apiVersion": "2018-06-01",
        "location": "[parameters(Location')]",
        "identity": {
            "type": "userAssigned",
            "userAssignedIdentities": {
                "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
            }
        }
    
    }
    

    Microsoft.Compute/virtualMachineScaleSets API 2017-12-01 版

    如果您的 apiVersion2017-12-01 或更早版本,則使用者指派的受控識別會儲存於 identityIds 陣列中,而 <USERASSIGNEDIDENTITYNAME> 值必須儲存在您範本 variables 區段內所定義的變數中。

    {
        "name": "[variables('vmssName')]",
        "apiVersion": "2017-03-30",
        "location": "[parameters(Location')]",
        "identity": {
            "type": "userAssigned",
            "identityIds": [
                "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITY>'))]"
            ]
        }
    
    }
    
    
  2. When you are done, your template should look similar to the following:

    Microsoft.Compute/virtualMachineScaleSets API version 2018-06-01

    "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2018-06-01",
             "type": "Microsoft.Compute/virtualMachineScaleSets",
             "name": "[variables('vmssName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "UserAssigned",
                 "userAssignedIdentities": {
                     "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
                 }
             },
            "properties": {
                 //other virtual machine properties...
                 "virtualMachineProfile": {
                     //other virtual machine profile properties...
                 }
             }
         }
     ]
    

    Microsoft.Compute/virtualMachines API 版本 2017-12-01

    "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2017-12-01",
             "type": "Microsoft.Compute/virtualMachineScaleSets",
             "name": "[variables('vmssName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "UserAssigned",
                 "identityIds": [
                     "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]"
                 ]
             },
            "properties": {
                 //other virtual machine properties...
                 "virtualMachineProfile": {
                     //other virtual machine profile properties...
                 }
             }
         }
     ]
    

從 Azure 虛擬機器擴展集移除使用者指派的受控識別

如果您的虛擬機器擴展集不再需要使用者指派的受控識別:

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器擴展集的 Azure 訂用帳戶相關聯的帳戶。

  2. 編輯器中載入範本,然後在 resources 區段找出想要的 Microsoft.Compute/virtualMachineScaleSets 資源。 若您的虛擬機器擴展集只有使用者指派的受控識別,您可以將識別類型變更為 None 予以停用。

    下列範例示範如何從沒有系統指派受控識別的虛擬機器中移除所有使用者指派的受控識別:

    {
        "name": "[variables('vmssName')]",
        "apiVersion": "2018-06-01",
        "location": "[parameters(Location')]",
        "identity": {
            "type": "None"
         }
    }
    

    Microsoft.Compute/virtualMachineScaleSets API 2018-06-01 版

    若要從虛擬機器擴展集移除單一使用者指派的受控識別,請從 userAssignedIdentities 字典中移除它。

    如果您有系統指派的受控識別,則將其保存在 identity 值下方的 type 值中。

    Microsoft.Compute/virtualMachineScaleSets API 2017-12-01 版

    若要從虛擬機器擴展集移除單一使用者指派的受控識別,請從 identityIds 陣列中移除它。

    如果您有系統指派的受控識別,則將其保存在 identity 值下方的 type 值中。

後續步驟