J'utilise les services Azure Machine Learning et le fonctionnalité de pipeline pour la préparation des données, la formation et le test de mes modèles de Machine Learning. Cependant, lors de mon étape de préparation des données, je dois me connecter à une base de données et je souhaite trouver un moyen de transmettre mes mots de passe ou clés secrets sans les écrire en texte brut dans mes fichiers de script.
Localement, j'utilise des variables d'environnement pour utiliser des mots de passe et des clés secrets, mais à ma meilleure connaissance, c'est impossible dans l'infrastructure du pipeline, car Conda ne prend pas en charge le passage de variables d'environnement. Si quelqu'un peut le confirmer ou le nier, ce serait utile.
Dans les services Azure Machine Learning du portail Azure, j'ai trouvé une ressource «Key Vault», qui est créée automatiquement lorsque je crée une ressource «Espace de travail du service Machine Learning». Cela semble être exactement ce dont j'ai besoin. C'est ça? Et si oui, comment l'utiliser?
Si aucune des solutions ci-dessus ne résout mon problème, existe-t-il un autre moyen d'utiliser en toute sécurité des mots de passe et des clés secrets dans mes scripts, sans les écrire en texte brut dans les scripts?
EDIT: Je me rends compte que ma question est fortement centrée sur les connexions aux bases de données. Cependant, la question concerne en réalité tous les types de secrets ou de mots de passe, pas seulement les informations d'identification de la base de données. Comme cela a été souligné dans une réponse, cela mérite d'être mentionné ici, c'est que les connexions à la base de données Azure SQL peuvent (et devraient) être résolues à l'aide de DataTransferStep .
3 Réponses :
Quel type de base de données utilisez-vous? S'il s'agit d'Azure SQL, vous pouvez utiliser DataTransferStep au lieu de transmettre des secrets. Les classes pertinentes sont:
Je vous remercie. J'aurais peut-être dû être plus clair à ce sujet. Ma question est plus large que les informations d'identification de la base de données, cependant, c'est toujours une question ouverte.
Logique. J'ai déposé une demande de fonctionnalité pour prendre en charge les secrets dans les exécutions à distance.
Au lieu d'utiliser des variables d'environnement, vous pouvez simplement passer les informations d'identification via le paramètre arguments
:
parser = argparse.ArgumentParser('train') parser.add_argument('--keyvault_name') parser.add_argument('--secret_name') args = parser.parse_args()
Et définir les arguments de script dans train.py
comme suit:
pipeline_step = PythonScriptStep( script_name='train.py', arguments=['--keyvault_name', 'MyKV', '--secret_name', 'MyPW'], ...
Vous pouvez ensuite utiliser les variables args.keyvault_name
et args.secret_name
dans votre script. Vous pouvez utiliser ces valeurs pour lire le mot de passe à partir du Key Vault. Bien sûr, vous devez d'abord créer le Key Vault et y stocker le mot de passe. En outre, vous devez également vous assurer que AML Workspace a l'autorisation de lire les secrets du Key Vault.
Bien sûr, vous pouvez également transmettre le mot de passe dans l'argument de script en texte brut, mais ce n'est pas conseillé .
Cela pourrait être une solution réalisable. Je n'y avais pas encore suffisamment réfléchi. Cependant, je n'ai pas encore compris comment activer le Key Vault. Il y en a un qui a été créé avec l'espace de travail, mais je n'ai pas pu comprendre comment l'utiliser.
La transmission de secrets à des exécutions à distance est désormais prise en charge, à partir de la version 1.0.57 du SDK Azure ML, via l'objet azureml.core.keyvault.KeyVault:
Voir la section Utilisation de secrets dans les exécutions à distance dans ce notebook
Impressionnant. J'aurais aimé être là pour l'essayer, mais malheureusement je ne travaille plus avec Azure. J'espère, cependant, que je n'étais pas le seul à attendre un soutien pour les secrets.
Comme je ne peux pas l'essayer moi-même, je ne me sens pas suffisamment à l'aise pour marquer votre réponse comme la solution. Peut-être qu'un deuxième avis peut-il m'aider à être à l'aise?