Uso de secretos de Azure Key Vault en Azure Pipelines

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

Con Azure Key Vault, puede almacenar y administrar de forma segura la información confidencial, como contraseñas, claves de API, certificados, etc. Con Azure Key Vault, puede crear y administrar fácilmente claves de cifrado para cifrar los datos. Azure Key Vault también se puede usar para administrar certificados de todos los recursos. En este artículo, aprenderá a:

  • Cree un almacén de Azure Key Vault.
  • Configure los permisos de Key Vault.
  • Cree una nueva conexión de servicio.
  • Consulte los secretos de la canalización de Azure.

Requisitos previos

  • Una organización de Azure DevOps. Si aún no tiene un proyecto, cree uno gratis.
  • Su propio proyecto. Si aún no tiene un proyecto, cree uno.
  • Su propio repositorio. Si aún no tiene un repositorio de Git, cree uno.
  • Suscripción a Azure. Si aún no tiene una cuenta de Azure gratuita, cree una.

Crear una instancia de Azure Key Vault

  1. Navegue hasta Azure Portal.

  2. Seleccione Crear un recurso en el panel de navegación izquierdo.

    A screenshot showing how to create a new resource in Azure portal.

  3. Busque key Vault y luego presione Entrar.

    A screenshot showing how to search for Azure Key Vault in Azure portal.

  4. Seleccione Crear para crear una nueva instancia de Azure Key Vault.

    A screenshot showing how to create a new Azure Key Vault in Azure portal.

  5. En Suscripción, seleccione la suscripción y, en Grupo de recursos, agregue un nuevo grupo de recursos. En Nombre del almacén de claves, elija un nombre y complete los campos de Región y Plan de tarifa. Seleccione Revisar y crear cuando haya terminado.

    A screenshot showing the steps to create a new key vault in Azure portal.

  6. Cuando finalice la implementación del nuevo recurso, seleccione Ir al recurso.

    A screenshot showing how to navigate to your resource in Azure portal.

Creación de una entidad de servicio

En este paso, crearemos una nueva entidad de servicio en Azure, lo que nos permitirá consultar nuestra instancia de Azure Key Vault desde Azure Pipelines.

  1. Navegue hasta Azure Portal.

  2. En la barra de menús, seleccione el icono >_ para abrir el de Cloud Shell.

  3. Seleccione PowerShell o déjelo como Bash según sus preferencias.

  4. Ejecute el comando siguiente para crear una entidad de servicio:

    az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
    
  5. La salida debe coincidir con el ejemplo siguiente. Asegúrese de copiar la salida del comando, ya que la necesitará para crear la conexión de servicio en el próximo paso.

    {
      "appId": "p951q3e2-8e5r-z697-e9q52aviu8a2",
      "displayName": "MyServicePrincipal",
      "password": "***********************************",
      "tenant": "85wes2u6-63sh-95zx-2as3-qw58wex269df"
    }
    

Configuración de los permisos de acceso de Key Vault

  1. Navegue hasta Azure Portal.

  2. Seleccione el nombre del almacén de claves que creó en el paso anterior.

  3. Seleccione Directivas de acceso.

    A screenshot showing how to navigate to your key vault access policies in Azure portal.

  4. Seleccione Agregar directiva de acceso para agregar una nueva directiva.

  5. Agregue un permiso Obtener y Enumerar a Permisos de secretos.

    A screenshot showing how to add get and list permissions to your key vault in Azure portal.

  6. En Seleccionar entidad de seguridad, seleccione una entidad de servicio para agregar y elija la que creó anteriormente.

  7. Cuando haya terminado, haga clic en Guardar.

Nota:

No se admiten las instancias de Azure Key Vault que usan el control de acceso basado en rol de Azure (RBAC de Azure).

Creación de una nueva conexión de servicio

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

  2. Seleccione gear iconConfiguración del proyecto y, a continuación, Conexiones de servicio.

  3. Si va a configurar una conexión de servicio por primera vez en el proyecto, seleccione Crear conexión de servicio. Si ha realizado conexiones de servicio antes, seleccione Nueva conexión de servicio.

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

  5. Seleccione Entidad de servicio (manual), y a continuación, seleccione Siguiente.

  6. Seleccione Suscripción para el nivel de ámbito y rellene los campos necesarios con información de la entidad de servicio creada anteriormente. Seleccione Comprobar cuando haya terminado:

    • id.de entidad de servicio: su entidad de servicioappId.
    • Clave de entidad de servicio: su entidad de servicio contraseña.
    • id. de inquilino: su entidad de servicio inquilino.
  7. Proporcione un nombre para la conexión de servicio y asegúrese de comprobar la casilla Conceder permiso de acceso a todas las canalizaciones.

  8. Seleccione Comprobar y guardar cuando haya terminado.

    A screenshot showing how to create a new manual service principal service connection.

Consulta y uso de secretos en la canalización

Con la tarea Azure Key Vault podemos capturar el valor de nuestro secreto y usarlo en las tareas subsiguientes de nuestra canalización. Algo que hay que tener en cuenta es que los secretos se deben asignar explícitamente a la variable env, como se muestra en el ejemplo siguiente.

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureKeyVault@1
  inputs:
    azureSubscription: 'repo-kv-demo'                    ## YOUR_SERVICE_CONNECTION_NAME
    KeyVaultName: 'kv-demo-repo'                         ## YOUR_KEY_VAULT_NAME
    SecretsFilter: 'secretDemo'                          ## YOUR_SECRET_NAME. Default value: *
    RunAsPreJob: false                                   ## Make the secret(s) available to the whole job

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '**/*.csproj'

- task: DotNetCoreCLI@2
  inputs:
    command: 'run'
    projects: '**/*.csproj'
  env:
    mySecret: $(secretDemo)

- bash: |
    echo "Secret Found! $MY_MAPPED_ENV_VAR"        
  env:
    MY_MAPPED_ENV_VAR: $(mySecret)

La salida del último comando Bash debe tener este aspecto:

Secret Found! ***

Nota:

Si quiere consultar varios secretos de su instancia de Azure Key Vault, use el argumento SecretsFilter para pasar una lista separada por comas de nombres de secretos: "secret1, secret2".