Protección de secretos en Azure Pipelines

En este artículo se proporcionan procedimientos recomendados para proteger secretos en Azure Pipelines. Un secreto es todo aquello cuyo acceso desea controlar de forma estricta, como las claves API, las contraseñas, los certificados o las claves criptográficas.

Azure Pipelines no genera valores secretos. Sin embargo, es posible que tenga que agregar un secreto a una canalización para almacenar datos confidenciales como una clave de API. Para más información sobre cómo establecer variables secretas, consulte Establecimiento de variables secretas.

No use secretos si hay otro método disponible

El mejor método para proteger un secreto es, en primer lugar, no tenerlo. Compruebe si la canalización puede usar un método diferente al de usar un secreto para realizar una tarea.

Uso de variables secretas

Los valores confidenciales nunca se deben almacenar como texto no cifrado en un archivo .yml de Azure Pipelines.

Las variables secretas se pueden usar para información privada, como contraseñas, identificadores y otros datos de identificación que no desea exponer en una canalización. La manera recomendada de establecer variables secretas es con Azure Key Vault. También puede establecer variables secretas en la interfaz de usuario o en un grupo de variables. No se recomienda utilizar un comando de registro para establecer una variable secreta. Cuando se establece un secreto con un comando de registro, cualquiera que pueda acceder a su canalización también podrá ver el secreto.

Las variables secretas son variables cifradas que se pueden usar en canalizaciones sin exponer su valor. Aunque sus valores no se exponen, nunca vuelva a generar secretos como salida y no pase secretos en la línea de comandos. En su lugar, se recomienda asignar los secretos a variables de entorno.

Al crear un secreto, siga las instrucciones de nomenclatura de variables y asegúrese de que el nombre del secreto no divulga información confidencial.

Limitación del acceso a variables secretas

Para limitar el acceso a secretos en Azure DevOps, puede hacer lo siguiente:

  • Almacene los secretos en Azure Key Vault. Con Azure Key Vault, puede usar el modelo de control de acceso basado en rol de Azure para limitar el acceso a un secreto o grupo de secretos.
  • Establezca variables secretas en la interfaz de usuario de una canalización. Las variables secretas establecidas en la interfaz de usuario de configuración de canalización de una canalización se limitan a la canalización donde se establecen. De esta manera, puede tener secretos que solo sean visibles para los usuarios con acceso a esa canalización.
  • Establezca secretos en un grupo de variables. Los grupos de variables siguen el modelo de seguridad de la biblioteca. Puede controlar quién puede definir nuevos elementos en una biblioteca y quién puede usar un elemento existente.

No escriba secretos en los registros

Siempre que sea posible, Azure Pipelines intenta borrar los secretos de los registros. Este filtrado se realiza de la mejor manera posible y no puede detectar todas las formas de filtración de los secretos. Evite reproducir secretos en la consola, usarlos en parámetros de la línea de comandos o registrarlos en archivos. Por ejemplo, algunos comandos de la CLI de Azure proporcionan información de salida que debe proteger. Si llama a la CLI de Azure desde la canalización, use el formato de salida Ninguno y, si necesita recuperar un secreto de una llamada de la CLI de Azure, use formato de salida ninguno y recupere la información de seguridad a una variable secreta.

No usar datos estructurados como secretos

Los datos estructurados pueden causar que la redacción de secretos dentro de las bitácoras falle, ya que la redacción depende ampliamente de encontrar una coincidencia exacta para el valor específico del secreto. Por ejemplo, no use un blob de JSON, XML o YAML (o similar) para encapsular un valor secreto, incluidos caracteres de control como el retorno de carro (\r) y el salto de línea (\n), ya que esto reduce significativamente la probabilidad de que los secretos se redacten correctamente. En vez de esto, crea secretos individuales para cada valor sensible.

Auditar cómo se controlan los secretos

Audita cómo se utilizan los secretos para ayudarte a garantizar que se manejan como lo esperas. Para ello, revise el código fuente del repositorio que hospeda la canalización y compruebe las tareas que se usan en ella. Por ejemplo, verifica que no se estén enviando a hosts no deseados, o que no se estén imprimiendo explícitamente en la salida de una bitácora.

Vea los registros de ejecución de la canalización después de probar entradas válidas o no válidas, y compruebe que los secretos están correctamente redactados o que no se muestran. No siempre es obvio cómo un comando o herramienta que está invocando emitirá errores y los secretos podrían acabar más tarde en los registros de errores. Siempre que sea posible, Azure Pipelines intenta borrar los secretos de los registros. Este filtrado se realiza de la mejor manera posible y no puede detectar todas las formas de filtración de los secretos. Como resultado, se recomienda revisar manualmente los registros de canalización después de probar entradas válidas y no válidas.

Auditoría y rotación de secretos

Revise periódicamente los secretos registrados que usan las canalizaciones para confirmar que siguen siendo necesarios y quite los que ya no lo sean.

Rote periódicamente los secretos para reducir el período de tiempo durante el que un secreto en peligro es válido.

Los tipos de secretos usados por las canalizaciones pueden incluir:

Pasos siguientes