Compartir vía


Uso de secretos de Azure Key Vault en Azure Pipelines

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

Azure Key Vault permite a los desarrolladores almacenar y administrar de forma segura información confidencial, como claves de API, credenciales o certificados. El servicio Azure Key Vault admite dos tipos de contenedores: almacenes y grupos de HSM (módulo de seguridad de hardware) administrado. Los almacenes pueden almacenar claves, secretos y certificados protegidos con HSM, mientras que los grupos de HSM administrado admiten exclusivamente claves protegidas con HSM.

En este tutorial, aprenderá a:

  • Crear una instancia de Azure Key Vault mediante la CLI de Azure.
  • Incorporar un secreto y configurar el acceso a Azure Key Vault.
  • Uso de secretos en la canalización

Requisitos previos

Obtener el código de ejemplo

Si ya tiene su propio repositorio, continúe con el paso siguiente. De lo contrario, importe el siguiente repositorio de ejemplo en Azure Repo.

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

  2. Seleccione Repos (Repositorios) y, a continuación, seleccione Import (Importar). Escriba la siguiente dirección URL del repositorio y seleccione Importar.

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

Crear una instancia de Azure Key Vault

  1. Inicie sesión en Azure Portal y, a continuación, seleccione el botón de Cloud Shell en la esquina superior derecha.

  2. Si tiene más de una suscripción de Azure asociada a su cuenta, use el siguiente comando para especificar una suscripción predeterminada. Puede usar az account list para generar una lista de las suscripciones.

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Establezca la región de Azure predeterminada. Puede usar az account list-locations para generar una lista de regiones disponibles.

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

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Cree una nueva instancia de Azure Key Vault.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Cree un nuevo secreto en el almacén de claves de Azure.

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

Configuración de la autenticación

Creación de una identidad administrada asignada por el usuario

  1. Inicie sesión en Azure Portal y busque el servicio Identidades administradas en la barra de búsqueda.

  2. Seleccione Crear y rellene los campos obligatorios de la siguiente manera:

    • Suscripción: seleccione la suscripción en el menú desplegable.
    • Grupo de recursos: seleccione un grupo de recursos existente o cree uno nuevo.
    • Región: seleccione una región en el menú desplegable.
    • Nombre: Ingrese un nombre para su identidad administrada asignada por el usuario.
  3. Seleccione Revisar y crear cuando haya terminado.

  4. Una vez completada la implementación, seleccione Ir al recurso y, a continuación, copie los valores de Suscripción e Id. de cliente para usarlos en los próximos pasos.

  5. Vaya a Propiedades de configuración>y copie el valor de Id. de inquilino de la identidad administrada para su uso posterior.

Configuración de directivas de acceso al almacén de claves

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

  2. Seleccione Directivas de acceso y, después, Crear para agregar una nueva directiva.

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

  4. Seleccione Siguiente y pegue el identificador de cliente de la identidad administrada que creó anteriormente en la barra de búsqueda. Seleccione su identidad administrada.

  5. Seleccione Siguiente y , una vez más, Siguiente .

  6. Revise las nuevas directivas y, a continuación, seleccione Crear cuando haya terminado.

Creación de una conexión de servicio

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

  2. Seleccione Configuración del proyecto>Conexiones de servicio y, a continuación, seleccione Nueva conexión de servicio para crear una nueva conexión de servicio.

  3. Seleccione Azure Resource Manager y, después, siguiente.

  4. En Tipo de identidad, seleccione Identidad administrada en el menú desplegable.

  5. Para el paso 1: Detalles de la identidad administrada, rellene los campos como se indica a continuació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 el menú desplegable.

  6. Para el paso 2: Ámbito de Azure, rellene los campos como se indica a continuació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 accederá la identidad administrada.

    • Grupo de recursos para conexión de servicio: (opcional) Especifique para limitar el acceso de identidad administrada a un grupo de recursos.

  7. Para el paso 3: Detalles de conexión del servicio:

    • Nombre de la conexión de servicio: proporcione un nombre para la conexión de servicio.

    • Referencia de administración de servicios: (opcional) Información de contexto de una base de datos ITSM.

    • Descripción: (opcional) Agregue una descripción.

  8. En Seguridad, active la casilla 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.

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

    Captura de pantalla que muestra cómo crear una conexión de servicio arm de identidad administrada.

Acceso a los secretos del almacén de claves desde la canalización

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

  2. Seleccione Canalizaciones y elija Nueva canalización.

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

  4. Seleccione la plantilla Canalización inicial.

  5. La canalización predeterminada incluirá un script que ejecuta comandos eco. No son necesarios, así que se pueden eliminar.

  6. Agregue la tarea AzureKeyVault y sustituya los marcadores de posición por el nombre de la conexión de servicio que creó anteriormente y el nombre del almacén de claves. El archivo YAML debería ser similar al fragmento 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. Vamos a agregar las siguientes tareas para copiar y publicar nuestro secreto. Este ejemplo es solo para fines de demostración y no debe implementarse 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. Es posible que se le pida que permita el acceso de canalización a los recursos de Azure; si este es el caso, seleccione Permitir. Solo tendrá que aprobar la canalización una vez.

  9. Seleccione la tarea CmdLine para ver los registros.

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

  10. Una vez completada 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 de resumen.

  11. Seleccione colocar>secret.txt para descargarlo.

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

  12. Abra el archivo de texto que acaba de descargar, debe contener el secreto del almacén de claves de Azure.

Advertencia

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

Limpieza de recursos

Siga los pasos que se indican a continuación para eliminar los recursos que ha creado:

  1. Si ha creado una nueva organización para alojar el proyecto, consulte cómo eliminar la organización o, 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 comando siguiente para eliminar el grupo de recursos y todos los recursos que incluye.

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Preguntas más frecuentes

P: Recibo el siguiente error: "El usuario o grupo no tiene permiso de lista de secretos". ¿Qué debo hacer?

R: Si encuentra un error que indica que el usuario o grupo no tiene el permiso de lista de secretos en un almacén de claves, ejecute los siguientes comandos para autorizar a la aplicación el acceso a la clave o el secreto en Azure Key Vault:

az account set --subscription <YOUR_SUBSCRIPTION_ID>

az login

$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