Добавление управляемого удостоверения в тип узла управляемого кластера Service Fabric

Каждому типу узла в кластере Service Fabric в Azure соответствует масштабируемый набор виртуальных машин. Чтобы разрешить использование управляемых удостоверений с типом узла управляемого кластера, в определения типа узла было добавлено свойство vmManagedIdentity, содержащее список удостоверений, которые могут использоваться, userAssignedIdentities. Функциональность показывает, как управляемые удостоверения могут использоваться в неуправляемых кластерах, например с помощью управляемого удостоверения с масштабируемым набором виртуальных машин Azure Key Vault.

Пример развертывания управляемого кластера Service Fabric, использующего управляемое удостоверение для типа узла, см. в этих шаблонах. В этом примере есть два шаблона:

  1. Управляемое удостоверение и назначение ролей. Шаблон для создания управляемого удостоверения и назначения ролей, чтобы разрешить точке хранения Service Fabric назначать удостоверение для масштабируемого набора виртуальных машин управляемого кластера. Его следует развертывать только один раз перед использованием управляемого удостоверения в ресурсе типа узла.

  2. Управляемый кластер и тип узла. Шаблон для ресурсов управляемого кластера и типа узла Service Fabric с использованием созданного ранее управляемого удостоверения.

Примечание

Сейчас для этой функции поддерживаются только удостоверения, назначенные пользователем.

Предварительные требования

Перед началом работы

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
  • При необходимости установите Azure CLI, чтобы выполнять справочные команды CLI.

1. Создание удостоверения и назначения роли

Создание управляемого удостоверения, назначаемого пользователем

Назначаемое пользователем управляемое удостоверение может быть определено в разделе ресурсов шаблона Azure Resource Manager (ARM) для создания при развертывании:

{
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
  "name": "[parameters('userAssignedIdentityName')]",
  "apiVersion": "2023-01-31",
  "location": "[resourceGroup().location]"
}

или создано с помощью PowerShell:

New-AzResourceGroup -Name <managedIdentityRGName> -Location <location>
New-AzUserAssignedIdentity -ResourceGroupName <managedIdentityRGName> -Name <userAssignedIdentityName>

Добавление назначения роли с помощью поставщика ресурсов Service Fabric

Добавьте назначение роли для управляемого удостоверения с помощью приложения поставщика ресурсов Service Fabric. Это назначение позволяет поставщику ресурсов Service Fabric назначить удостоверение, созданное на предыдущем шаге, масштабируемому набору виртуальных машин управляемого кластера. Это одноразовое действие.

Получение субъекта-службы для приложения поставщика ресурсов Service Fabric.

Login-AzAccount
Select-AzSubscription -SubscriptionId <SubId>
Get-AzADServicePrincipal -DisplayName "Azure Service Fabric Resource Provider"

Примечание

Убедитесь, что используется правильная подписка, идентификатор субъекта изменится, если подписка принадлежит другому клиенту.

ServicePrincipalNames : {74cb6831-0dbb-4be1-8206-fd4df301cdc2}
ApplicationId         : 74cb6831-0dbb-4be1-8206-fd4df301cdc2
ObjectType            : ServicePrincipal
DisplayName           : Azure Service Fabric Resource Provider
Id                    : 00000000-0000-0000-0000-000000000000

Используйте идентификатор предыдущих выходных данных в качестве principalId, а идентификатор определения роли ниже в качестве roleDefinitionId, если это применимо к шаблону или команде PowerShell.

Имя определения роли Идентификатор определения роли
Оператор управляемого удостоверения f1a07417-d97a-45cb-824c-7a7467783830

Это назначение ролей можно определить в шаблоне раздела ресурсов с помощью идентификатора субъекта и идентификатора определения роли.

{
  "type": "Microsoft.Authorization/roleAssignments",
  "apiVersion": "2022-04-01",
  "name": "[parameters('vmIdentityRoleNameGuid')]",
  "scope": "[concat('Microsoft.ManagedIdentity/userAssignedIdentities', '/', parameters('userAssignedIdentityName'))]",
  "dependsOn": [
    "[concat('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
  ],
  "properties": {
    "roleDefinitionId": "[resourceId('Microsoft.Authorization/roleDefinitions', 'f1a07417-d97a-45cb-824c-7a7467783830')]",
    "principalId": "<Service Fabric Resource Provider ID>"
  }
}

Примечание

vmIdentityRoleNameGuid должен быть допустимым уникальным идентификатором. При повторном развертывании того же шаблона, включая это назначение роли, убедитесь, что уникальный идентификатор совпадает с тем, который использовался изначально, или удалите этот ресурс, так как его требуется создать только один раз.

Или можно создать с помощью PowerShell с использованием идентификатора субъекта и имени определения роли.

New-AzRoleAssignment -PrincipalId "<Service Fabric Resource Provider ID>" -RoleDefinitionName "Managed Identity Operator" -Scope "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentityName>"

Развертывание управляемого удостоверения и назначения ролей

Выполните командлет New-AzResourceGroupDeployment, чтобы создать управляемое удостоверение и добавить назначение роли:

New-AzResourceGroupDeployment -ResourceGroupName <managedIdentityRGName> -TemplateFile ".\MangedIdentityAndSfrpRoleAssignment.json" -TemplateParameterFile ".\MangedIdentityAndSfrpRoleAssignment.Parameters.json" -Verbose

2. Назначение удостоверения ресурсу типа узла

Добавление свойств управляемого удостоверения в определение типа узла

Наконец, добавьте свойства vmManagedIdentity и userAssignedIdentities к определению типа узла управляемого кластера с полным идентификатором ресурса удостоверения, созданного на первом шаге. Обязательно используйте 2021-05-01 или более позднюю версию для apiVersion.

{
  "type": "Microsoft.ServiceFabric/managedClusters/nodeTypes",
  "apiVersion": "2022-01-01",
  "properties": {
    "isPrimary": true,
    "vmInstanceCount": 5,
    "dataDiskSizeGB": 100,
    "vmSize": "Standard_D2_v2",
    "vmImagePublisher": "MicrosoftWindowsServer",
    "vmImageOffer": "WindowsServer",
    "vmImageSku": "2019-Datacenter",
    "vmImageVersion": "latest",
    "vmManagedIdentity": {
      "userAssignedIdentities": [
        "[parameters('userAssignedIdentityResourceId')]"
      ]
    }
  }
}

Развертывание ресурса типа узла, который назначает удостоверение

Выполните командлет New-AzResourceGroupDeployment, чтобы развернуть шаблон управляемых кластеров Service Fabric, который назначает управляемое удостоверение ресурсу типа узла.

New-AzResourceGroupDeployment -ResourceGroupName <sfmcRGName> -TemplateFile ".\SfmcVmMangedIdentity.json" -TemplateParameterFile ".\SfmcVmMangedIdentity.Parameters.json" -Verbose

После развертывания созданное управляемое удостоверение было добавлено в масштабируемый набор виртуальных машин указанного типа узла, и его можно использовать сразу, как и в любом неуправляемом кластере.

Устранение неполадок

Невозможность правильно добавить назначение роли приведет к следующей ошибке при развертывании:

Ошибка развертывания портал Azure с указанием клиента с идентификатором объекта или приложения SFRP, у которого нет разрешения на выполнение действия по управлению удостоверениями

В этом случае убедитесь, что назначение роли успешно создано с ролью "Оператор управляемого удостоверения". Назначение роли находится на портале Azure в разделе управления доступом к ресурсу управляемого удостоверения, как показано ниже.

Свойства назначения ролей для поставщика ресурсов Service Fabric в управляемом удостоверении, назначаемом пользователем, показаны на портале Azure

Next Steps