Compartir vía


Uso de secretos de credenciales de autenticación en trabajos de entrenamiento de Azure Machine Learning

SE APLICA A: Azure ML del SDK de Python v1

En este artículo, aprenderá a usar secretos en los trabajos de entrenamiento de forma segura. Los datos de autenticación (por ejemplo, el nombre de usuario y la contraseña) son secretos. Por ejemplo, si se conecta a una base de datos externa para consultar datos de entrenamiento, deberá pasar el nombre de usuario y la contraseña al contexto de trabajo remoto. La codificación de estos valores en los scripts de entrenamiento en texto no cifrado no es segura, ya que expondría el secreto.

En su lugar, el área de trabajo de Azure Machine Learning tiene un recurso asociado llamado Azure Key Vault. Use esta instancia de Key Vault para pasar secretos a trabajos remotos de forma segura mediante un conjunto de API en el SDK de Python de Azure Machine Learning.

El flujo estándar para el uso de secretos es:

  1. En el equipo local, inicie sesión en Azure y conéctese a su área de trabajo.
  2. En el equipo local, establezca un secreto en el almacén de claves del área de trabajo.
  3. Envíe un trabajo remoto.
  4. Dentro del trabajo remoto, obtenga el secreto de Key Vault y úselo.

Establecimiento de secretos

En Azure Machine Learning, la clase Keyvault contiene métodos para establecer secretos. En la sesión de Python local, obtenga primero una referencia al área de trabajo de Key Vault y, a continuación, use el método set_secret() para establecer un secreto por nombre y valor. El método set_secret actualiza el valor del secreto si el nombre ya existe.

from azureml.core import Workspace
from azureml.core import Keyvault
import os


ws = Workspace.from_config()
my_secret = os.environ.get("MY_SECRET")
keyvault = ws.get_default_keyvault()
keyvault.set_secret(name="mysecret", value = my_secret)

No ponga el valor del secreto en el código Python porque no es seguro almacenarlo en un archivo como texto no cifrado. En su lugar, obtenga el valor del secreto de una variable de entorno, por ejemplo, el secreto de compilación de Azure DevOps, o de la entrada interactiva del usuario.

Puede enumerar los nombres de secreto con el método list_secrets(). También hay una versión de lote, set_secrets(), que le permite establecer varios secretos a la vez.

Importante

Cuando se usa list_secrets(), solo se enumeran los secretos creados por medio de set_secret() o set_secrets() con el SDK de Azure Machine Learning. No se enumeran los secretos creados por un medio distinto al SDK. Por ejemplo, no se enumera un secreto creado con Azure Portal o Azure PowerShell.

Puede usar get_secret() para obtener un valor de secreto del almacén de claves, independientemente de cómo se haya creado. Así, puede recuperar secretos que list_secrets() no enumera.

Obtención de secretos

En el código local, puede usar el método get_secret() para obtener el valor del secreto por nombre.

En el caso de los trabajos enviados con Experiment.submit, utilice el método get_secret() con la clase Run. Como la ejecución enviada conoce su área de trabajo, este método establece un acceso directo a la creación de instancias del área de trabajo y devuelve el valor del secreto directamente.

# Code in submitted job
from azureml.core import Experiment, Run

run = Run.get_context()
secret_value = run.get_secret(name="mysecret")

Tenga cuidado de no exponer el valor del secreto escribiéndolo o imprimiéndolo.

También hay una versión de lote, get_secrets(), que permite acceder a varios secretos a la vez.