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

В этом руководстве вы узнаете:

  • Создание назначаемого пользователем управляемого удостоверения (UAMI) для использования с Диспетчером Сервисов Оператора Azure (AOSM)
  • Назначьте разрешения UAMI для доступа к необходимым ресурсам.
  • Используйте UAMI при выполнении операций сетевой функции (NF) или сетевой службы сайта (SNS).

Предупреждение

UAMI требуется, если ожидаемая операция SNS может длиться четыре или более часов. Если UAMI не используется во время длительных операций SNS, SNS может ложно сообщить о состоянии сбоя до завершения операций компонентов.

Предпосылки

  • Необходимо создать пользовательскую роль с помощью создания настраиваемой роли. В этой статье предполагается, что вы назвали пользовательскую роль "Пользовательская роль — доступ оператора службы AOSM к издателю".

  • Вы должны работать с вашим конструктором сетевых служб, чтобы понять разрешения, необходимые вашему управляемому удостоверению, и какие версии определения сетевых функций (NFDV) использует ваш SNS.

  • Вам потребуется роль "владельца" или "администратора доступа пользователей" для ресурса версии определения сетевой функции от выбранного издателя. Кроме того, у вас должна быть группа ресурсов, для которой назначена роль "Владелец" или "Администратор доступа пользователей".

Создайте UAMI

Сначала создайте UAMI. Дополнительные сведения см. в статье "Создание управляемой идентичности, назначенной пользователем для вашей SNS".

Создайте настраиваемую роль и назначьте её UAMI

Затем создайте пользовательскую роль. Начните с рассмотрения оптимального подхода на основе областей, а затем создайте и назначьте роль новому UAMI.

Вопросы охвата для пользовательской роли UAMI

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

  • Все группы определения функций сети (NFDG) и их версии.
  • Все определения сетевой функции (NFD) и их версии.
  • Все группы разработки сетевых служб (NSD) и версии.
  • Все схемы и версии групп конфигурации (CGS).
  • Все пользовательские местоположения.

Предоставьте соответствующие разрешения для выбранной области

UAMI требует следующих отдельных разрешений для выполнения необходимых операций SNS:

  • На NFD;
    • Microsoft.HybridNetwork/publishers/networkFunctionDefinitionGroups/networkFunctionDefinitionVersions/use/action
    • Microsoft.HybridNetwork/Publishers/NetworkFunctionDefinitionGroups/NetworkFunctionDefinitionVersions/read
  • На NSD;
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/use/action
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/read
  • В CGS;
    • Microsoft.HybridNetwork/Publishers/ConfigurationGroupSchemas/read
  • В пользовательском расположении;
    • Microsoft.ExtendedLocation/customLocations/deploy/action
    • Microsoft.ExtendedLocation/customLocations/read
  • Кроме того, для UAMI требуется доступ к самому себе;
    • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

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

Замечание

Не предоставляйте доступ к записи или удалению любого из этих ресурсов издателя.

Назначение настраиваемой роли с помощью портала

  1. Перейдите на портал Azure и откройте выбранную область ресурсов; Например, группа ресурсов издателя или версия определения сетевой функции.

  2. В боковом меню этого элемента выберите элемент управления доступом (IAM).

  3. Выберите " Добавить назначение ролей".

    Снимок экрана: страница управления доступом группы ресурсов издателя.

  4. В разделе «Роли рабочих функций» найдите свою пользовательскую роль в списке и нажмите Далее.

    Снимок экрана: экран добавления назначения ролей.

  5. Выберите управляемое удостоверение, а затем нажмите кнопку "Выбрать участников ", а затем найдите и выберите новое управляемое удостоверение. Нажмите кнопку "Выбрать".

    Снимок экрана: добавление назначения ролей и выбор управляемых удостоверений.

  6. Выберите Рецензирование и назначение.

Повторите назначение роли

Повторите процесс назначения ролей для всех оставшихся ресурсов, учитывая выбранный подход к области.

Назначение роли оператора управляемого удостоверения с помощью портала

  1. Перейдите к портал Azure и найдите управляемые удостоверения.

  2. Выберите ваше удостоверение из списка управляемых удостоверений.

  3. В боковом меню выберите контроль доступа (IAM).

  4. Выберите "Добавить назначение ролей " и выберите роль "Оператор управляемых удостоверений ". Снимок экрана, показывающий добавление назначения роли

  5. Выберите роль Оператора Управляемого Удостоверения.

    Снимок экрана: роль оператора управляемого удостоверения.

  6. Выберите Управляемое удостоверение.

  7. Выберите + Добавить участников и перейдите к управляемому удостоверению, назначенному пользователем, чтобы продолжить назначение.

    Снимок экрана: экран добавления назначения ролей с выбранным управляемым удостоверением.

Выполнение всех задач, описанных в этой статье, гарантирует, что служба сети сайта (SNS) имеет необходимые разрешения для эффективной работы в указанной среде Azure.

Создание и назначение разрешений для UAMI с использованием Bicep

Необходимые операции для создания и назначения разрешений также поддерживаются с помощью скриптов bicep. Этот подход может повысить эффективность автоматизации этих операций в конвейере рабочего процесса. В следующем примере показаны операции Bicep, необходимые для создания UAMI с минимально назначенными ролями. При необходимости расширьте назначение ролей в зависимости от подхода к сфере.

// ----------- MIO Role Definition -----------
// This role is used to assign the Managed Identity Operator role to the User Assigned Managed Identity (UAMI).
@description('This is the built-in MIO role. See https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#managed-identity-operator')
resource MIORoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = {
  scope: managedIdentity
  name: 'f1a07417-d97a-45cb-824c-7a7467783830'
}

// This role is used to assign the Contributor role to the User Assigned Managed Identity (UAMI) at the resource group level.
resource ContributorRoleDefinition 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' existing = {
  scope: subscription()
  name: 'b24988ac-6180-42a0-ab88-20f7382dd24c'
}

// Assign the Managed Identity Operator role to the User Assigned Managed Identity (UAMI) at the scope of the managed identity.
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(resourceGroup().id, principalId, MIORoleDefinition.id)
  scope: managedIdentity
  properties: {
    roleDefinitionId: MIORoleDefinition.id
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}
// Get reference to the target resource group
resource targetRg 'Microsoft.Resources/resourceGroups@2022-09-01' existing = {
  name: 'publisherResourceGroupName' // Replace with the actual resource group name
  scope: subscription('subscriptionId')
}

// Assign the Contributor role to the User Assigned Managed Identity (UAMI) at the scope of the publisher resource group.
resource roleAssignmentContributor 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(resourceGroup().id, principalId, ContributorRoleDefinition.id)
  scope: targetRg
  properties: {
    roleDefinitionId: ContributorRoleDefinition.id
    principalId: managedIdentity.properties.principalId
    principalType: 'ServicePrincipal'
  }
}

Используйте UAMI в операциях NF и SNS

Рекомендации по шаблону NF

Чтобы включить параметр identityObj, необходимо обновить шаблон NF. В следующем примере JSON демонстрируется использование этого параметра с универсальной настройкой NF:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nameValue": {
      "type": "string",
      "defaultValue": "[concat('anf-', substring(uniqueString(deployment().name), 0, 6))]"
    },
    "locationValue": {
      "type": "string",
      "defaultValue": "eastus2euap"
    },
    "nfviTypeValue": {
      "type": "string",
      "defaultValue": "AzureArcKubernetes"
    },
    "nfviIdValue": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "defaultValue": {}
    },
    "nfdvId": {
      "type": "string"
    },
    "identityObj": {
      "type": "object",
      "defaultValue": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionId>/resourceGroups/<rgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uaminame>": {}
        }
      }
    }
  },
  "variables": {
    "deploymentValuesValue": "[string(createObject('role1releasenamespace', parameters('config').role1releasenamespace, 'role1releasename',parameters('config').role1releasename, 'role2releasenamespace', parameters('config').role2releasenamespace, 'role2releasename',parameters('config').role2releasename,'role3releasenamespace', parameters('config').role3releasenamespace, 'role3releasename',parameters('config').role3releasename))]",
    "nfName": "[concat(parameters('nameValue'), '-CNF')]"
  },
  "resources": [
    {
      "type": "Microsoft.HybridNetwork/networkFunctions",
      "apiVersion": "2024-04-15",
      "name": "[variables('nfName')]",
      "location": "[parameters('locationValue')]",
      "identity": "[parameters('identityObj')]",
      "properties": {
        "networkFunctionDefinitionVersionResourceReference": {
          "id": "[parameters('nfdvId')]",
          "idType": "Open"
        },
        "nfviType": "[parameters('nfviTypeValue')]",
        "nfviId": "[parameters('nfviIdValue')]",
        "allowSoftwareUpdate": true,
        "configurationType": "Secret",
        "secretDeploymentValues": "[string(variables('deploymentValuesValue'))]"
      }
    }
  ]
}

Особенности шаблона для социального сервиса SNS

Чтобы включить параметр ресурса удостоверения, необходимо обновить шаблон SNS. В примере bicep ниже демонстрируется использование этого параметра с общей настройкой SNS.

resource azCoreSnsUAMI 'Microsoft.HybridNetwork/sitenetworkservices@2023-09-01' = {
  name: snsNameUAMI
  location: location
  sku: {
    name: 'Standard'
  }
  identity:  {
    type: 'UserAssigned'
    userAssignedIdentities: {
     '${managedIdentity.id}': {} 
    }
  }
  properties: {
    siteReference: {
      id: azCoreSite.id
    }
    networkServiceDesignVersionResourceReference: {
        id: nsdv.id
        idType: 'Open'
    }
    desiredStateConfigurationGroupValueReferences: {
      Test_Configuration: {
        id: azCoreCgv.id
      }
      Secret_Configuration:{
        id:azCoreCgvSecret.id
      }
    }
  }
}