Uso de secretos de Azure Key Vault en Azure Pipelines

Servicios de Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Azure Key Vault es un servicio en la nube que ayuda a los desarrolladores a almacenar y administrar información confidencial de forma segura, como claves de API, credenciales y certificados. Key Vault admite dos tipos de contenedores: almacenes y grupos de módulos de seguridad de hardware (HSM) administrados. Los almacenes pueden almacenar claves, secretos y certificados respaldados tanto por software como por HSM. Los grupos de HSM gestionados son compatibles únicamente con claves respaldadas por HSM.

En este artículo, aprenderá a crear un almacén de claves, agregar un secreto, configurar directivas de acceso y, a continuación, usar ese secreto en Azure Pipelines. En este tutorial se usa un almacén de claves con acceso a la red pública. Si necesita acceder a un almacén de claves privado desde la canalización, consulte Acceso a un almacén de claves privado desde la canalización. Para vincular los secretos de Key Vault a grupos de variables, consulte Vincular un grupo de variables a secretos en Azure Key Vault.

Requisitos previos

Categoría Requisitos
Azure DevOps - Una organización de Azure DevOps.
- Un proyecto de Azure DevOps .
Azur Una suscripción de Azure.

Obtención del código

Si no tiene su propio proyecto, importe el repositorio de ejemplo siguiente en el repositorio de Azure:

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Repos y luego seleccione Importar. Escriba la siguiente dirección URL del repositorio y seleccione Importar.

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    

Creación de un Almacén de claves

Para crear un nuevo almacén de claves en Azure mediante el CLI de Azure, siga estos pasos:

  1. Vaya al portal Azure y seleccione Azure Cloud Shell en la esquina superior derecha.

  2. Si la cuenta está asociada a varias suscripciones de Azure, establezca la suscripción predeterminada.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Establezca una región de Azure predeterminada. Para ver una lista de regiones disponibles, ejecute az account list-locations.

    az config set defaults.location=<YOUR_REGION>
    
  4. Crear un nuevo grupo de recursos.

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Cree un nuevo almacén de claves.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Agregue un secreto al almacén de claves.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Configuración de la autenticación

Después de crear el almacén de claves, el siguiente paso es configurar la autenticación. Seleccione Identidad administrada o entidad de servicio y siga las instrucciones para configurar la autenticación.

Creación de una identidad administrada asignada por el usuario

  1. Vaya al portal Azure y busque Administrar identidades en la barra de búsqueda.

  2. Seleccione Crear y proporcione la siguiente información:

    • Suscripción: seleccione la suscripción de Azure en el menú desplegable.
    • Grupo de recursos: seleccione un grupo de recursos existente o cree uno nuevo.
    • Región: seleccione la región donde se crea la identidad administrada.
    • Nombre: escriba un nombre para la identidad administrada asignada por el usuario.
  3. Seleccione Revisar y crear y, a continuación, seleccione Crear para iniciar la implementación.

  4. Una vez finalizada la implementación, seleccione Ir al recurso y copie los valores id. de suscripción e Id. de cliente . Necesitará estos valores en pasos posteriores.

  5. En Configuración, seleccione Propiedades y copie el valor de Id. de inquilino de la identidad administrada para su uso posterior.

Configurar directivas de acceso a la bóveda de claves

  1. Vaya al portal Azure y use la barra de búsqueda para buscar el almacén de claves que creó anteriormente.

  2. Seleccione Directivas de acceso y, a continuación, seleccione Crear para agregar una nueva directiva.

  3. En Permisos secretos, active las casillas Obtener y Enumerar .

  4. Seleccione Siguiente. Pegue el identificador de cliente de la identidad administrada que creó anteriormente en la barra de búsqueda y, a continuación, seleccione la identidad administrada.

  5. Seleccione Siguiente y luego seleccione Siguiente otra vez.

  6. Revise los detalles de la directiva de acceso y, a continuación, seleccione Crear para aplicar la directiva.

Creación de una conexión de servicio

  1. Inicie sesión en Azure DevOps y vaya al proyecto.

  2. Seleccione Configuración del proyecto>Conexiones de servicio>Nueva conexión de servicio.

  3. Seleccione Azure Resource Manager y, a continuación, haga clic en Siguiente.

  4. En Tipo de identidad, seleccione Identidad administrada.

  5. En paso 1: Detalles de la identidad administrada, proporcione la siguiente información:

    • Suscripción para identidad administrada: seleccione la suscripción que contiene la identidad administrada.
    • Grupo de recursos para identidad administrada: seleccione el grupo de recursos que hospeda la identidad administrada.
    • Identidad administrada: seleccione la identidad administrada en la lista desplegable.
  6. Para el paso 2: Ámbito de Azure, proporcione la siguiente información:

    • Nivel de ámbito para la conexión de servicio: seleccione Suscripción.
    • Suscripción para la conexión de servicio: seleccione la suscripción a la que accede la identidad administrada.
    • Grupo de recursos para la conexión de servicio: (Opcional) Especifique un grupo de recursos para limitar el acceso de la identidad administrada a un grupo de recursos.
  7. Para el paso 3: Detalles de conexión del servicio, proporcione la siguiente información:

    • Nombre de la conexión de servicio: escriba un nombre para la conexión de servicio.
    • Referencia de administración de servicios: (opcional) Incluir información de contexto de una base de datos ITSM.
    • Descripción: (Opcional) Escriba una descripción.
  8. En Seguridad, la opción Conceder permiso de acceso a todas las canalizaciones permite que todas las canalizaciones usen esta conexión de servicio. No se recomienda esta opción. En su lugar, autorice cada canalización individualmente para usar la conexión de servicio.

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

    Captura de pantalla que muestra cómo crear una identidad administrada en una conexión de servicio de Azure Resource Manager.

Acceder a los secretos del Key Vault desde su canalización

Advertencia

Este tutorial tiene carácter educativo exclusivamente. Para conocer los procedimientos recomendados de seguridad y las instrucciones sobre cómo trabajar con secretos de forma segura, consulte Administración de secretos en las aplicaciones de servidor con Azure Key Vault.

  1. Inicie sesión en Azure DevOps y vaya al proyecto.

  2. Seleccione Canalizaciones>nueva canalización.

  3. Seleccione Git de Azure Repos (YAML) y, a continuación, seleccione el repositorio.

  4. Seleccione la plantilla Pipeline de inicio.

  5. La canalización predeterminada incluye comandos de eco de ejemplo. No necesita estos comandos, por lo que puede quitarlos.

  6. Agregue la tarea Azure Key Vault a la canalización. Sustituya los marcadores de posición por el nombre de la conexión de servicio que ha creado anteriormente y el nombre de su almacén de claves. El archivo YAML debe tener un aspecto similar al del ejemplo siguiente:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
  7. Añada las siguientes tareas para copiar y publicar el secreto. Este ejemplo es solo para fines de demostración. No lo use en un entorno de producción.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      displayName: Create file
      inputs:
        script: 'echo $(SECRET_NAME) > secret.txt'
    
    - task: CopyFiles@2
      displayName: Copy file
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      displayName: Publish Artifact
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
  8. Seleccione Guardar y ejecutar y, a continuación, selecciónelo una vez más para confirmar los cambios y desencadenar la canalización. Si se le solicita, seleccione Permitir para conceder a la canalización acceso a los recursos de Azure.

  9. Una vez iniciada la canalización, seleccione la tarea CmdLine para ver los registros.

    Captura de pantalla que muestra los registros de tareas de la línea de comandos.

  10. Cuando finalice la ejecución de la canalización, vuelva al resumen de la canalización y seleccione el artefacto publicado.

    Captura de pantalla que muestra el artefacto publicado en la pestaña resumen.

  11. Seleccione descargar>secret.txt para descargar el archivo.

    Captura de pantalla que muestra cómo descargar el artefacto publicado.

  12. Abra el archivo de texto descargado. Debe contener el secreto recuperado del almacén de claves.

Limpieza de recursos

Para eliminar los recursos que creó, siga estos pasos:

  1. Si ha creado una nueva organización para hospedar el proyecto, consulte cómo eliminar la organización. De lo contrario, elimine el proyecto.

  2. Todos los recursos de Azure creados durante este tutorial se hospedan en un único grupo de recursos. Ejecute el siguiente comando para eliminar el grupo de recursos y todos sus recursos.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Solución de problemas

Error: "El usuario o grupo no tiene permiso de lista de secretos"

Este error se produce cuando la entidad de servicio o la identidad administrada que utiliza su canalización no tiene permiso para enumerar secretos en el almacén de claves. Para resolver este problema, asegúrese de que la identidad tenga los permisos Obtener y Enumerar para los secretos. Ejecute los siguientes comandos para conceder los permisos necesarios a su principal de servicio:

az login

az account set --subscription <YOUR_SUBSCRIPTION_ID>

$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>

az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list