Compartir a través de


Uso de scripts para automatizar el Administrador de Recursos de Azure con conexiones de servicio de identidad de trabajo.

Azure DevOps Services

Aprenda a usar scripts para crear conexiones de servicio de Azure Resource Manager con identidad de carga de trabajo en Azure Pipelines. Los scripts garantizan la coherencia, la eficacia y la repetibilidad al configurar conexiones de servicio, lo que reduce el riesgo de error humano. Ahorran tiempo, especialmente cuando se crean varias conexiones o se implementan en distintos entornos. Estos scripts también se pueden integrar en un proceso de automatización para escalar y administrar mejor las implementaciones grandes.

El uso de scripts como parte de un proceso de automatización ayuda a aplicar directivas de seguridad y requisitos de cumplimiento al garantizar que las conexiones de servicio usen los permisos y configuraciones correctos. También sirve como documentación para el proceso de configuración.

Prerrequisitos

Producto Requisitos
Azure DevOps - Una organización de Azure DevOps y un proyecto. Cree una organización o un proyecto si aún no lo ha hecho.
Celeste Una suscripción de Azure.
Permisos:
     - Para crear una asignación de roles en Azure: debe tener permisos de Administrador de acceso de usuario o de Administrador de control de acceso basado en roles o permisos superiores. Estos roles permiten administrar el acceso y asignar roles necesarios para crear identidades. Para más información, consulte Roles integrados en Azure.
Entra Permisos:
     - Para crear un registro de aplicaciones en Microsoft Entra: la Delegación del registro de aplicaciones debe estar habilitada o debe tener el rol Desarrollador de Aplicaciones. Para más información, consulte Roles integrados de Microsoft Entra.
En lugar de crear un registro de aplicación en Entra, también puede crear una identidad administrada en Azure.

Proceso

Restricciones

  • En la automatización, "creationMode": "Manual" debe usarse al crear conexiones de servicio que necesiten una identidad de Microsoft Entra. Se necesitarían privilegios significativos de Microsoft Entra para que Azure DevOps cree todos los objetos en nombre de la persona que llama, por lo que Azure DevOps no admite el uso de "creationMode": "Automatic" para principales que no son de usuario. En su lugar, la automatización de un extremo a otro debe crear individualmente cada objeto (identidad, conexión de servicio, credencial, asignación de roles).
  • La federación de identidades de carga de trabajo define una relación bidireccional entre la identidad y la conexión de servicio. Como resultado, los objetos deben crearse en un orden determinado y la credencial federada solo se puede crear después de crear la conexión de servicio.

Orden de ejecución de comandos

En esta tabla se proporciona información general sobre las propiedades clave intercambiadas entre los comandos de creación de cada objeto. Las dependencias de la salida determinan el orden de ejecución.

Paso Entrada Salida
Creación de una identidad en Microsoft Entra o Azure tenantId appId, principalId
Creación de una conexión de servicio en Azure DevOps appId workloadIdentityFederationIssuer, workloadIdentityFederationSubject
Creación de credenciales federadas en Microsoft Entra o Azure appId, , workloadIdentityFederationIssuer, workloadIdentityFederationSubject
Creación de una asignación de roles en Azure principalId

1. Inicio de sesión con la CLI de Azure

Los siguientes comandos usan la CLI de Azure. Inicie sesión en el cliente previsto

az login --tenant TENANT_ID

Obtenga más información en Autenticación en Azure mediante la CLI de Azure.

2. Crear identidad

Cree una identidad mediante una identidad administrada o un registro de aplicaciones.

Cree una identidad administrada con az identity create.

az identity create --name MyIdentity --resource-group MyResourceGroup --query '{clientId:clientId,principalId:principalId}'

Ejemplo de resultado:

{
  "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}

Una identidad administrada crea un principal de servicio en Microsoft Entra. El identificador de objeto de la entidad de servicio también se denomina principalId. Usa la entidad de servicio principal más adelante para asignar roles RBAC. appId se usa para crear la conexión de servicio en Azure DevOps.

Obtenga más información en az identity create.

3. Creación de una conexión de servicio

En este ejemplo se usa la extensión de la CLI de Azure de Azure DevOps y un archivo de configuración para crear la conexión de servicio. Esto configura la identidad creada en una nueva conexión de servicio de Azure. El servicePrincipalId parámetro de autorización se rellena con la appId de la identidad.

Necesitará un appId para usar como entrada.

El primer fragmento de código es un archivo de configuración, ServiceConnectionGeneric.json.

{
  "data": {
    "subscriptionId": "SUBSCRIPTION_ID",
    "subscriptionName": "My Azure Subscription",
    "environment": "AzureCloud",
    "scopeLevel": "Subscription",
    "creationMode": "Manual"
  },
  "name": "MyNewServiceEndpoint",
  "type": "AzureRM",
  "url": "https://management.azure.com/",
  "authorization": {
    "parameters": {
      "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444"
    },
    "scheme": "WorkloadIdentityFederation"
  },
  "isShared": false,
  "isReady": true,
  "serviceEndpointProjectReferences": [
    {
      "projectReference": {
        "id": "c7e5f0b3-71fa-4429-9fb3-3321963a7c06",
        "name": "TestProject"
      },
      "name": "MyNewServiceEndpoint"
    }
  ]
}
az devops service-endpoint create -service-endpoint-configuration ./ServiceConnectionGeneric.json --query authorization.parameters

az devops service-endpoint create automatiza la creación de una conexión de servicio en Azure DevOps mediante ServiceConnectionGeneric.json. La salida incluye parámetros de autorización que usará en pasos futuros.

Ejemplo de resultado:

{
  "serviceprincipalid": "00001111-aaaa-2222-bbbb-3333cccc4444",
  "tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "workloadIdentityFederationIssuer": "https://login.microsoftonline.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0",
  "workloadIdentityFederationIssuerType": "EntraID",
  "workloadIdentityFederationSubject": "<federation-subject>"
}

Para obtener más información sobre este comando, consulte el punto de conexión del servicio de la CLI de Azure DevOps.

4. Creación de una credencial de identidad federada

Cree una credencial federada mediante la salida de workloadIdentityFederationIssuer y workloadIdentityFederationSubject del paso Crear una conexión de servicio.

az identity federated-credential create --name fic-for-sc 
                                        --identity-name MyIdentity  
                                        --resource-group MyResourceGroup 
                                        --issuer "https://login.microsoftonline.com/TENANT_ID/v2.0" 
                                        --subject "<federation-subject>" 
                                        --subscription MSI_SUBSCRIPTION_ID

az identity federated-credential create vincula una credencial de identidad federada a una identidad administrada, lo que permite que la identidad administrada se autentique con Microsoft Entra ID mediante la reclamación de sujeto proporcionada.

Sugerencia

Agregue un carácter de continuación de línea (Bash: barra inversa, PowerShell: acento grave) al final de las líneas que no completen el comando.

La identidad administrada no tiene que crearse en la misma suscripción a la que se concede acceso en el paso Crear asignación de roles.

Para obtener más información sobre este comando, consulte az identity federated-credential create.

5. Crear asignación de roles

Agregue una asignación de roles a la identidad administrada o al registro de aplicaciones con az role assignment create. Para ver los roles disponibles, consulte Roles integrados de Azure. La persona asignada al rol es la entidad de servicio asociada al registro de la aplicación o a la identidad administrada. Un principal de servicio se identifica mediante su identificador, también denominado principalId. principalId se encuentra en la salida del comando Crear identidad.

az role assignment create --role Contributor --scope /subscriptions/SUBSCRIPTION_ID --assignee-object-id PRINCIPAL_ID --assignee-principal-type ServicePrincipal

az role assignment create --role Contributor el comando asigna el rol de Colaborador a una entidad de servicio en el nivel de suscripción. Esto permite a la entidad de servicio administrar recursos dentro de la suscripción especificada.

Para obtener más información sobre este comando, consulte az role assignment create.