Creación, asignación y uso de una identidad administrada asignada por el usuario

En esta guía paso a paso, aprenderá a:

  • Creación de una identidad administrada asignada por el usuario (UAMI) para usarla con Azure Operator Service Manager (AOSM)
  • Asigne permisos UAMI para acceder a los recursos necesarios.
  • Use una UAMI al ejecutar operaciones de función de red (NF) o servicio de red de sitio (SNS).

Advertencia

Se requiere UAMI cuando se puede ejecutar una operación de SNS esperada durante cuatro o más horas. Si UAMI no se usa durante las operaciones de SNS de larga duración, el SNS puede notificar un estado falso con errores antes de que se completen las operaciones de componente.

Prerrequisitos

  • Debe crear un rol personalizado a través de Crear un rol personalizado. En este artículo se asume que ha nombrado el rol personalizado como 'Custom Role - AOSM Service Operator access to Publisher'.

  • Debe trabajar con el Diseñador de servicios de red para comprender los permisos que requiere la identidad administrada y qué versión de definición de función de red (NFDV) usa el SNS.

  • Para realizar esta tarea, necesita el rol "Propietario" o "Administrador de acceso de usuario" a través del recurso Versión de definición de función de red del Publicador elegido. También debe tener un grupo de recursos sobre el cual tenga asignado el rol de "Propietario" o "Administrador de acceso de usuario".

Creación de una UAMI

En primer lugar, cree una UAMI. Consulte Creación de una identidad administrada asignada por el usuario para el SNS para obtener más información.

Creación de un rol personalizado y asignación a UAMI

A continuación, cree un rol personalizado. Empiece por considerar el mejor enfoque basado en el ámbito y, a continuación, cree y asigne el rol a la nueva UAMI.

Consideraciones de ámbito para el rol personalizado de UAMI

El rol personalizado debe tener asignados permisos suficientes para acceder a los recursos del usuario. El rol personalizado se puede limitar a recursos secundarios individuales, como NFDV, para el control más granular. O bien, el rol personalizado puede ser el ámbito de un recurso primario, como el grupo de recursos del publicador, que concede acceso igual a todos los recursos secundarios. Para las operaciones adecuadas, ya sea individualmente o a través de elementos primarios, todos los recursos siguientes deben asignarse al rol personalizado:

  • Todos los grupos de definición de funciones de red (NFDG) y las versiones.
  • Todas las definiciones de Función de Red (NFD) y sus versiones.
  • Todos los grupos de diseño de servicios de red (NSD) y las versiones.
  • Todos los esquemas de grupo de configuración (CGS) y las versiones.
  • Todas las ubicaciones personalizadas.

Permitir los permisos adecuados para el ámbito elegido

UAMI necesita los siguientes permisos individuales para ejecutar las operaciones de SNS necesarias:

  • En el NFD;
    • Microsoft.HybridNetwork/publishers/networkFunctionDefinitionGroups/networkFunctionDefinitionVersions/use/action
    • Microsoft.HybridNetwork/Publishers/NetworkFunctionDefinitionGroups/NetworkFunctionDefinitionVersions/leer
  • En el NSD;
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/use/action
    • Microsoft.HybridNetwork/publishers/networkServiceDesignGroups/networkServiceDesignVersions/read
  • En el CGS;
    • Microsoft.HybridNetwork/Publishers/ConfigurationGroupSchemas/leer
  • En la ubicación personalizada;
    • Microsoft.ExtendedLocation/customLocations/deploy/action
    • Microsoft.ExtendedLocation/customLocations/read
  • Además, la UAMI necesita acceso en sí mismo;
    • Microsoft.ManagedIdentity/userAssignedIdentities/assign/action

Si usa un enfoque de ámbito de recursos primario, los permisos necesarios se aplicarían al recurso primario.

Nota:

No proporcione acceso de escritura ni eliminación a ninguno de estos recursos del publicador.

Asignación de roles personalizados a través del portal

  1. Acceda a Azure Portal y abra el ámbito de recurso elegido; por ejemplo, Publisher Resource Group o Network Function Definition Version.

  2. En el menú lateral de este elemento, seleccione Control de acceso (IAM) .

  3. Elija Agregar asignación de roles.

    Captura de pantalla que muestra la página de control de acceso del grupo de recursos del publicador.

  4. En Roles de función de trabajo , busque el rol personalizado en la lista y, a continuación, continúe con Siguiente.

    Captura de pantalla que muestra el formulario para añadir asignación de roles.

  5. Seleccione Identidad administrada y elija + Seleccionar miembros y elija la nueva identidad administrada. Elija Seleccione.

    Captura de pantalla que muestra la asignación de roles para agregar y seleccionar identidades administradas.

  6. Seleccione Revisar y asignar.

Repetir la asignación de roles

Repita el proceso de asignación de roles para los recursos restantes según el enfoque de ámbito elegido.

Asignación del rol de operador de identidad administrada a través del portal

  1. Vaya a Azure Portal y busque identidades administradas.

  2. Seleccione your-identity en la lista de identidades administradas.

  3. En el menú lateral, seleccione Control de acceso (IAM).

  4. Elija Agregar asignación de roles y seleccione el rol Operador de identidad administrada . La Captura de pantalla que muestra el rol Operador de Identidad administrada agrega asignación de roles.

  5. Seleccione el rol Operador de identidad administrada .

    Captura de pantalla que muestra el rol Operador de identidad administrada.

  6. Seleccione Identidad administrada.

  7. Seleccione + Seleccionar miembros y vaya a la identidad administrada asignada por el usuario y continúe con la asignación.

    Captura de pantalla que muestra la pantalla Agregar asignación de roles con la identidad administrada seleccionada.

Finalizar todas las tareas descritas en este artículo garantiza que el servicio de red del sitio (SNS) tenga los permisos necesarios para funcionar eficazmente en el entorno de Azure especificado.

Creación y asignación de permisos a una UAMI mediante bicep

Las operaciones necesarias para crear y asignar permisos también se admiten mediante scripting de bicep. Este enfoque puede funcionar mejor cuando sea necesaria la automatización de estas operaciones dentro de una canalización de flujo de trabajo. En el ejemplo siguiente se muestran las operaciones de bicep necesarias para establecer UAMI con roles asignados mínimos. Expanda la asignación de roles, según sea necesario, en función del enfoque de ámbito.

// ----------- 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'
  }
}

Uso de una UAMI con operaciones NF y SNS

Consideraciones sobre plantillas NF

La plantilla NF debe actualizarse para incluir el parámetro identityObj. En el ejemplo JSON siguiente se muestra el uso de este parámetro con una configuración NF genérica:

{
  "$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'))]"
      }
    }
  ]
}

Consideraciones sobre la plantilla de SNS

La plantilla SNS debe actualizarse para incluir el parámetro de recurso de identidad. En el ejemplo de bicep siguiente se muestra el uso de este parámetro con una configuración genérica de 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
      }
    }
  }
}