Usar segredos de credencial de autenticação em trabalhos de treinamento do Azure Machine Learning
APLICA-SE A: SDK do Python do AzureML v1
Neste artigo, você aprenderá a usar segredos em trabalhos de treinamento de forma segura. Informações de autenticação, como nome de usuário e senha, são segredos. Por exemplo, se você se conectar a um banco de dados externo para consultar dados de treinamento, precisará passar o seu nome de usuário e senha para o contexto de trabalho remoto. Codificar esses valores em scripts de treinamento em texto não criptografado não é seguro, pois pode expor o segredo.
Em vez disso, o workspace do Azure Machine Learning tem um recurso associado chamado Azure Key Vault. Use esse Key Vault para passar segredos para trabalhos remotos de forma segura por meio de um conjunto de APIs no SDK do Python do Azure Machine Learning.
O fluxo padrão para usar segredos é:
- No computador local, faça logon no Azure e conecte-se ao seu workspace.
- No computador local, defina um segredo no Key Vault do workspace.
- Envie um trabalho remoto.
- No trabalho remoto, obtenha o segredo do Key Vault e use-o.
Definir segredos
No Azure Machine Learning, a classe Keyvault contém métodos para definir segredos. Na sua sessão local do Python, primeiro consiga uma referência para o Key Vault do workspace e, em seguida, use o método set_secret()
para definir um segredo por nome e valor. O método set_secret atualiza o valor do segredo se o nome já existir.
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)
Não coloque o valor do segredo em seu código Python, pois não é seguro armazená-lo no arquivo como texto não criptografado. Em vez disso, consiga o valor do segredo de uma variável de ambiente, por exemplo, segredo de compilação do Azure DevOps, ou da entrada de usuário interativa.
Você pode listar nomes de segredos usando o método list_secrets()
e também há uma versão em lote,set_secrets(), que permite definir vários segredos por vez.
Importante
O uso de list_secrets()
só listará os segredos criados por meio de set_secret()
ou set_secrets()
usando o SDK do Azure Machine Learning. Ele não listará os segredos criados por algo diferente do SDK. Por exemplo, um segredo criado usando o portal do Azure ou Azure PowerShell não será listado.
Você pode usar get_secret()
para obter um valor de segredo do cofre de chaves, independentemente de como ele foi criado. Assim, você pode recuperar segredos que não foram listados por list_secrets()
.
Obter segredos
No código local, você pode usar o método get_secret()
para conseguir o valor do segredo pelo nome.
Para os trabalhos enviados Experiment.submit
, use o método get_secret()
com a classe Run
. Como uma execução enviada está ciente do próprio workspace, esse método faz o atalho da instanciação do workspace e retorna diretamente o valor do segredo.
# Code in submitted job
from azureml.core import Experiment, Run
run = Run.get_context()
secret_value = run.get_secret(name="mysecret")
Tenha cuidado para não expor o valor do segredo escrevendo ou imprimindo-o.
Também há uma versão em lote, get_secrets (), para acessar vários segredos de uma só vez.