Conectar con Azure con una conexión de servicio de Azure Resource Manager

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Una conexión de servicio de Azure Resource Manager le permite conectarse a recursos de Azure, como Azure Key Vault, desde su canalización. Esta conexión le permite usar una canalización para implementar en recursos de Azure, como una aplicación de Azure App Service, sin necesidad de autenticarse cada vez.

Cuenta con varias opciones de autenticación para conectarse a Azure con una conexión de servicio de Azure Resource Manager. Las opciones recomendadas son usar la federación de identidades de carga de trabajo con un registro de aplicación o una identidad administrada.

Las opciones de conexión de servicio de Azure Resource Manager recomendadas son:

Hay otras opciones de autenticación de conexión de servicio de Azure Resource Manager que no se incluyen en este artículo:

Creación de un registro de aplicaciones de Azure Resource Manager (automático)

Al crear una conexión de servicio de Azure Resource Manager, elegirá entre dos tipos de credenciales diferentes: federación de identidades de carga de trabajo o un secreto.

Creación de un registro de aplicaciones de Azure Resource Manager con federación de identidades de carga de trabajo (automático)

Puede usar este método si se cumplen todos los siguientes criterios en su caso:

  • Tiene el rol Propietario para la suscripción de Azure.
  • No se va a conectar a Azure Stack ni a los entornos de Azure US Government.
  • Las tareas de extensiones de Marketplace que usa se han actualizado para admitir la federación de identidades de carga de trabajo.

Con esta selección, Azure DevOps consulta automáticamente la suscripción, el grupo de administración o el área de trabajo de Machine Learning a la que desea conectarse y crea una federación de identidades de carga de trabajo para la autenticación.

  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.

    Captura de pantalla que muestra cómo seleccionar Azure Resource Manager.

  3. Seleccione Registro de aplicaciones (automático) con la federación de identidades de carga de trabajo de credenciales.

    Captura de pantalla de la selección del método de autenticación de registro de aplicaciones (automático) con la identidad de carga de trabajo seleccionada.

  4. Seleccione un Nivel de ámbito. Seleccione Suscripción, Grupo de administración o Área de trabajo de Machine Learning. Los grupos de administración son contenedores que ayudan a administran el acceso, las directivas y el cumplimiento de varias suscripciones. Una área de trabajo de Machine Learning es un lugar para crear artefactos de aprendizaje automático.

    • En el ámbito de Suscripción, escriba los siguientes parámetros:

      Parámetro Descripción
      Suscripción Necesario. seleccione la suscripción de Azure.
      Grupo de recursos Necesario. Seleccione el grupo de recursos de Azure.
    • En el ámbito Grupo de administración, seleccione Grupo de administración de Azure.

    • En el ámbito Área de trabajo de Machine Learning, escriba los parámetros siguientes:

      Parámetro Descripción
      Suscripción Necesario. seleccione la suscripción de Azure.
      Grupo de recursos Necesario. Seleccione el grupo de recursos que contiene el área de trabajo.
      Área de trabajo de Machine Learning Necesario. Seleccione el área de trabajo de Azure Machine Learning.
  5. Escriba un Nombre de conexión de servicio.

  6. Opcionalmente, escriba una descripción para la conexión de servicio.

  7. Seleccione Conceder permiso de acceso a todas las canalizaciones para permitir que todas las canalizaciones usen esta conexión de servicio. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.

  8. Seleccione Guardar.

Una vez creada la nueva conexión de servicio, copie el nombre de conexión y péguelo en el código como valor de azureSubscription.

Creación de un registro de aplicaciones de Azure Resource Manager con un secreto (automático)

Con esta selección, Azure DevOps consulta automáticamente la suscripción, el grupo de administración o el área de trabajo de Machine Learning a la que desea conectarse y crea un secreto para la autenticación.

Advertencia

El uso de un secreto requiere rotación y administración manuales y no se recomienda. La federación de identidades de carga de trabajo es el tipo de credencial preferido.

Puede usar este método si se cumplen todos los siguientes criterios en su caso:

  • Ha iniciado sesión como propietario de la organización de Azure Pipelines y la suscripción de Azure.
  • No es necesario limitar aún más los permisos de los recursos de Azure a los que los usuarios acceden a través de la conexión de servicio.
  • No se va a conectar a Azure Stack ni a los entornos de Azure US Government.
  • No se va a conectar desde Azure DevOps Server 2019 o versiones anteriores de Team Foundation Server.
  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.

    Captura de pantalla que muestra cómo seleccionar Azure Resource Manager.

  3. Seleccione Registro de aplicaciones (automático) con el secreto de credencial.

    Captura de pantalla de la selección del método de autenticación de registro de aplicaciones (automático) con federación de identidades de carga de trabajo.

  4. Seleccione un Nivel de ámbito. Seleccione Suscripción, Grupo de administración o Área de trabajo de Machine Learning. Los grupos de administración son contenedores que ayudan a administran el acceso, las directivas y el cumplimiento de varias suscripciones. Una área de trabajo de Machine Learning es un lugar para crear artefactos de aprendizaje automático.

    • En el ámbito de Suscripción, escriba los siguientes parámetros:

      Parámetro Descripción
      Suscripción Necesario. seleccione la suscripción de Azure.
      Grupo de recursos Necesario. Seleccione el grupo de recursos de Azure.
    • En el ámbito Grupo de administración, seleccione Grupo de administración de Azure.

    • En el ámbito Área de trabajo de Machine Learning, escriba los parámetros siguientes:

      Parámetro Descripción
      Suscripción Necesario. seleccione la suscripción de Azure.
      Grupo de recursos Necesario. Seleccione el grupo de recursos que contiene el área de trabajo.
      Área de trabajo de Machine Learning Necesario. Seleccione el área de trabajo de Azure Machine Learning.
  5. Escriba un Nombre de conexión de servicio.

  6. Opcionalmente, escriba una descripción para la conexión de servicio.

  7. Seleccione Conceder permiso de acceso a todas las canalizaciones para permitir que todas las canalizaciones usen esta conexión de servicio. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.

  8. Seleccione Guardar.

Una vez creada la nueva conexión de servicio, copie el nombre de conexión y péguelo en el código como valor de azureSubscription.

Creación de una conexión de servicio de Azure Resource Manager para una identidad administrada asignada por el usuario existente

Use esta opción para crear automáticamente una credencial de identidad de carga de trabajo para una identidad administrada asignada por el usuario existente. Debe tener una identidad administrada asignada por el usuario existente antes de empezar.

  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.

    Captura de pantalla que muestra cómo seleccionar Azure Resource Manager.

  3. Seleccione Identidad administrada.

    Captura de pantalla que muestra cómo elegir la selección de identidad administrada de Azure Resource Manager con una identidad asignada por el usuario.

  4. En el Paso 1: Detalles de la identidad administrada:

    1. Seleccione Suscripción para Identidad administrada. Esta es la suscripción de Azure que contiene la identidad administrada.
    2. Seleccione Grupo de recursos para identidad administrada. Este es el grupo de recursos que contiene la identidad administrada.
    3. Seleccione Identidad administrada. Esta es la identidad administrada dentro del grupo de recursos que usará para acceder a los recursos.
  5. En el Paso 2: Ámbito de Azure:

    1. Seleccione el Nivel de ámbito. Seleccione Suscripción, Grupo de administración o Área de trabajo de Machine Learning. Los grupos de administración son contenedores que ayudan a administran el acceso, las directivas y el cumplimiento de varias suscripciones. Una área de trabajo de Machine Learning es un lugar para crear artefactos de aprendizaje automático.

      • En el ámbito de Suscripción, escriba los siguientes parámetros:

        Parámetro Descripción
        Suscripción para la conexión de servicio Necesario. Seleccione el nombre de la suscripción de Azure a la que accederá la identidad administrada.
        Grupo de recursos para la conexión de servicio Opcional. Escriba para limitar el acceso de identidad administrada a un grupo de recursos.
      • En el ámbito Grupo de administración, escriba los parámetros siguientes:

        Parámetro Descripción
        Grupo de administración Necesario. Seleccione el grupo de administración de Azure.
      • En el ámbito Área de trabajo de Machine Learning, escriba los parámetros siguientes:

        Parámetro Descripción
        Suscripción Necesario. Seleccione el nombre de la suscripción de Azure.
        Grupo de recursos para la conexión de servicio Opcional. Seleccione el grupo de recursos que contiene el área de trabajo.
        Área de trabajo de ML Necesario. Escriba el nombre del área de trabajo de Azure Machine Learning existente.
    2. En la sección Paso 3: Detalles de conexión del servicio: escriba o seleccione los parámetros siguientes:

      Parámetro Descripción
      Nombre de conexión de servicio Necesario. El nombre que usará para hacer referencia a esta conexión de servicio en las propiedades de la tarea. No el nombre de la suscripción de Azure.
      Referencia de administración de servicios Opcional. Información de contexto de una base de datos ITSM.
      Descripción Opcional. Especificar una descripción de la conexión de servicio.
    3. En la sección Seguridad, seleccione Conceder permiso de acceso a todas las canalizaciones para permitir que todas las canalizaciones usen esta conexión de servicio. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.

    4. Seleccione Guardar para validar y crear la conexión de servicio.

Convertir una conexión de servicio de Azure Resource Manager existente para usar la federación de identidades de carga de trabajo

Puede convertir rápidamente una conexión de servicio de Azure Resource Manager existente para usar la federación de identidades de carga de trabajo como autenticación en lugar de un secreto. Puede usar la herramienta de conversión de conexión de servicio en Azure DevOps si la conexión de servicio cumple estos requisitos:

  • Azure DevOps creó originalmente la conexión de servicio. Si crea manualmente la conexión de servicio, no podrá convertirla con la herramienta de conversión en cuestión porque Azure DevOps no tiene los permisos para modificar sus propias credenciales.
  • Solo un proyecto usa la conexión de servicio. No se pueden convertir conexiones de servicio entre proyectos.

Cómo convertir una conexión de servicio:

  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione la conexión de servicio que desee convertir para usar la identidad de carga de trabajo.

  3. Seleccione Convertir.

    Captura de pantalla que muestra la selección de convertir para credenciales federadas.

    Si tiene una credencial existente con un secreto expirado, verá una opción diferente para convertir.

    Captura de pantalla que muestra la opción de convertir para usar credenciales federadas cuando tiene un certificado expirado.

  4. Seleccione Convertir de nuevo para confirmar que desea crear una nueva conexión de servicio.

    Este proceso de conversión puede tardar unos minutos. Si desea revertir la conexión, deberá hacerlo en un plazo de siete días.

Convertir varias conexiones de servicio de Azure Resource Manager con un script

Utilice un script para actualizar varias conexiones de servicio a la vez para que ahora utilicen la federación de identidades de carga de trabajo para la autenticación.

Este script de PowerShell de ejemplo requiere dos parámetros: organización de Azure DevOps (ejemplo: https://dev.azure.com/fabrikam-tailspin) y proyecto de Azure DevOps (ejemplo: Space game web agent). A continuación, el script recupera las conexiones de servicio asociadas para el proyecto y la organización de Azure DevOps.

Al convertir conexiones de servicio para usar la federación de identidades de carga de trabajo, se le pedirá que confirme la actualización de cada conexión que aún no la usa. Después de confirmar, el script actualiza estas conexiones de servicio con la API REST de Azure DevOps para utilizar la federación de identidades de carga de trabajo.

Para ejecutarse, el script necesita PowerShell 7.3 o posterior y la CLI de Azure. Guarde el script en un archivo .ps1 y ejecútelo mediante PowerShell 7.

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 

#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps 
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint

    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Revertir una conexión de servicio de Azure Resource Manager existente que usa un secreto

Puede revertir una conexión de servicio automática convertida con su secreto durante siete días. Después de siete días, cree manualmente un nuevo secreto.

Si crea y convierte manualmente la conexión de servicio, no podrá revertirla con la herramienta de conversión en cuestión porque Azure DevOps no tiene los permisos para modificar sus propias credenciales.

Cómo revertir una conexión de servicio:

  1. En el proyecto de Azure DevOps, vaya a Pipelines (Procesos)>Conexiones de servicio.

  2. Seleccione una conexión de servicio existente para revertirla.

  3. Seleccione Revertir conversión al esquema original.

    Captura de pantalla que muestra la selección de revertir para una credencial federada.

  4. Seleccione Revertir de nuevo para confirmar su elección.

Crear una conexión de servicio de Azure Resource Manager que usa una entidad de servicio existente

Si quiere usar un conjunto predefinido de permisos de acceso y aún no tiene una entidad de servicio definida para este fin, siga uno de estos tutoriales para crear una nueva entidad de servicio:

Para crear una conexión de servicio que use una entidad de servicio existente:

  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione Nueva conexión de servicio, luego, seleccione Azure Resource Manager y, por último, Siguiente.

    Captura de pantalla que muestra la selección de Azure Resource Manager.

  3. Seleccione Entidad de servicio (manual) y Siguiente.

    Captura de pantalla que muestra la selección de un método de autenticación de entidad de servicio (manual).

  4. En el cuadro de diálogo Nueva conexión de servicio de Azure, seleccione el Entorno. Si selecciona Azure Stack, escriba la dirección URL del entorno, que es algo parecido a https://management.local.azurestack.external.

  5. Seleccione el Nivel de ámbito. Seleccione Suscripción o Grupo de administración. Los grupos de administración son contenedores que ayudan a administran el acceso, las directivas y el cumplimiento de varias suscripciones.

    • En el ámbito de Suscripción, escriba los siguientes parámetros:

      Parámetro Descripción
      Id. de suscripción Necesario. Escriba el ID de suscripción de Azure.
      Subscription Name Necesario. Escriba el nombre de la suscripción de Azure.
    • En el ámbito Grupo de administración, escriba los parámetros siguientes:

      Parámetro Descripción
      ID de grupo de administración Necesario. Escriba el identificador del grupo de administración de Azure.
      Nombre del grupo de administración Necesario. Escriba el nombre del grupo de administración de Azure.
  6. En la sección Autenticación, escriba o seleccione los parámetros siguientes:

    Parámetro Descripción
    Id. de entidad de servicio Necesario. Escriba el ID de la entidad de servicio.
    Credential: Seleccione Clave de la entidad de servicio o Certificado. Si seleccionó Clave de entidad de servicio, escriba la clave (contraseña). Si seleccionó Certificado, escriba el certificado.
    Identificador de inquilino Necesario. Escriba el identificador de inquilino.
    Verify Seleccione esta opción para validar la configuración introducida.
  7. En la sección Detalles, introduzca los siguientes parámetros:

    Parámetro Descripción
    Nombre de la conexión Necesario. El nombre que usará para hacer referencia a esta conexión de servicio en las propiedades de la tarea. No el nombre de la suscripción de Azure.
    Descripción Opcional. Especificar una descripción de la conexión de servicio.
    Seguridad Seleccione Conceder permiso de acceso a todas las canalizaciones para permitir que todas las canalizaciones usen esta conexión de servicio. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.
  8. Seleccione Verificar y guardar para validar y crear la conexión de servicio.

  1. En el proyecto de Azure DevOps, vaya a Configuración de proyecto>Conexiones de servicio.

    Para obtener más información, consultes Abrir la configuración de proyecto.

  2. Seleccione Nueva conexión de servicio y luego Azure Resource Manager.

    Captura de pantalla que muestra la selección de Azure Resource Manager.

  3. En el cuadro de diálogo Agregar una conexión de servicio de Azure Resource Manager, rellene los campos como se indica a continuación:

    Captura de pantalla de Añadir una conexión de servicio Azure Resource Manager.

    1. Escriba el Nombre de conexión.

    2. Seleccione el Entorno. Si selecciona Azure Stack, escriba la dirección URL del entorno, que es algo parecido a https://management.local.azurestack.external.

    3. Seleccione el Nivel de ámbito, **Suscripción o Grupo de administración. Los grupos de administración son contenedores que ayudan a administran el acceso, las directivas y el cumplimiento de varias suscripciones.

      • En el ámbito de Suscripción, escriba los siguientes parámetros:

        Parámetro Descripción
        Id. de suscripción Necesario. Escriba el ID de suscripción de Azure.
        Subscription Name Necesario. Escriba el nombre de la suscripción de Azure.
      • En el ámbito Grupo de administración, escriba los parámetros siguientes:

        Parámetro Descripción
        ID de grupo de administración Necesario. Escriba el identificador del grupo de administración de Azure.
        Nombre del grupo de administración Necesario. Escriba el nombre del grupo de administración de Azure.
    4. Escriba el ID de la entidad de servicio.

    5. Seleccione el tipo de credencial:

      • Clave de la entidad de seguridad: Escriba la Clave de la entidad de seguridad (contraseña).
      • Certificado: escriba el contenido del archivo .perm , incluidas las secciones de certificado y clave privada.
    6. Escriba el ID de inquilino.

    7. Seleccione Verificar conexión para validar la conexión de servicio.

    8. Si lo desea, seleccione Permitir que todas las canalizaciones usen esta conexión. Si no selecciona esta opción, debe conceder manualmente acceso a cada canalización que use esta conexión de servicio.

    9. Seleccione Guardar para crear la conexión de servicio.

Una vez creada la nueva conexión de servicio:

  • Si usa la conexión de servicio en la interfaz de usuario, seleccione el nombre de la conexión que haya asignado en la configuración de suscripción de Azure en su proceso.
  • Si usa la conexión de servicio en un archivo YAML, copie el nombre de la conexión y péguelo en el código como valor de azureSubscription.

En caso necesario, modifique la entidad de servicio para exponer los permisos adecuados.

Para obtener más información sobre la autenticación mediante una entidad de servicio, consulte Uso del control de acceso basado en roles para administrar el acceso a los recursos de suscripción de Azure o el artículo de blog Automatizar una implementación de grupo de recursos de Azure mediante una entidad de servicio en Visual Studio.

Para obtener más información, consulte Solución de problemas de conexiones de servicio de Azure Resource Manager.

Ayuda y soporte técnico