J'ai réussi à créer une image Docker qui s'exécute dans un conteneur Docker. Le conteneur exécute correctement l'image (une application .NET), mais l'image se bloque peu de temps après le démarrage, car elle rencontre une erreur avec les services Azure. La raison en est que le conteneur docker tente d'accéder aux services Azure pour récupérer un jeton d'autorisation (pour récupérer des secrets à partir d'un coffre de clés) et n'a pas l'autorisation de le faire.
Je dois noter qu'il est possible d'exécuter l'application localement en dehors d'un conteneur via Azure CLI après avoir utilisé az login
pour vérifier mes informations d'identification. Ensuite, lorsque l'application est démarrée via Azure CLI, il est `` autorisé '' à accéder aux services Azure pour obtenir des jetons d'authentification et par conséquent extraire des données de mon coffre de clés.
Je voudrais savoir s'il existe un moyen d'exécuter un script az login
avec des informations d'identification dans un conteneur Docker avant que l'image de l'application .NET ne s'exécute, afin que je puisse démarrer l'application à partir d'Azure CLI (à l'intérieur du conteneur) après que mes informations d'identification ont été vérifiées. J'ai parcouru la documentation et je n'ai pas vu de moyen de configurer quelque chose comme ça.
3 Réponses :
Pour utiliser Azure CLI et vous connecter à l'intérieur du conteneur, vous devez installer Azure CLI dans le conteneur, puis vous connecter avec un modèle non interactif. Je recommanderais le principal de service. Vous pouvez consulter la commande:
az login --service-principal -u <app-url> -p <password-or-cert> --tenant <tenant>
Pour plus de détails, voir Créez un principal de service Azure avec Azure CLI . Après vous être connecté, vous pouvez démarrer votre application selon vos besoins.
Merci @CharlesXu. J'ai du mal à trouver des exemples d'installation d'Azure CLI dans un conteneur réel avant d'installer l'image / l'application dont j'ai besoin pour exécuter. Connaissez-vous des exemples que je pourrais suivre?
@yummylumpkins Oui, vous pouvez suivre les étapes ici . Sélectionnez-en un en fonction de votre système d'exploitation.
Voici 2 options qui ne nécessitent pas Azure CLI dans le conteneur, Azure Managed Identity à partir d'un conteneur Docker s'exécutant localement ,
J'ai lu ces réponses il y a quelque temps. Je cherchais une solution similaire mais en utilisant le principal de service. J'ai trouvé que Docker pouvait exécuter Kubernetes et qu'il y avait AAD-Pod-Identity https://github.com / Azure / aad-pod-identity qui peut fonctionner pour moi, mais cela ne fonctionne pas pour Docker Kubernetes. J'ai bifurqué leur référentiel Go et apporté des modifications au composant micro. Maintenant, cela fonctionne pour Docker Kubernetes, je ne sais pas si l'équipe Azure a prévu d'intégrer ces modifications ou non.
Vous pouvez obtenir des instructions détaillées sur la façon de faire fonctionner les choses ici: https://github.com / Wallsmedia / aad-pod-identity
Azure CLI ne fonctionnerait pas pour un Docker, car vous avez configuré Azure CLI et vous êtes connecté, puis exécutez votre application.
pourquoi ne pas utiliser docs. microsoft.com/en-us/aspnet/core/security/… ?
@ DavidNoreña, nous avons utilisé cette solution dans une ancienne version de notre application, mais cela nécessitait que nous maintenions une configuration locale pour cette configuration. Nous nous éloignons des configurations locales, nous devrons donc tout récupérer à partir d'un service externe. Mais c'est définitivement une solution valable pour les personnes qui ne se soucient pas des configurations locales. Merci pour votre contribution.
oui, vous pouvez enregistrer le principal du service et l'URL de keyvault en tant que configurations locales, ou vous pouvez les injecter en tant que variables d'environnement. Ne le prenez pas mal, mais c'est une très mauvaise conception. Si vous utilisez Kubernetes, c'est encore plus facile avec quelque chose comme ça github.com/Azure/aad-pod- Identité , mais si vous voyez que vous avez accepté la réponse, vous devez toujours gérer les configurations locales.
@ DavidNoreña pas offensé du tout, j'apprécie les commentaires! L'objectif final est d'exécuter tout cela via Azure Devops. . .tout sera injecté dans le pipeline (env vars). Cependant, j'essaie maintenant de comprendre comment installer réellement Azure CLI dans mon conteneur docker, puis exécutez
az login
avec mon principe de service injecté env vars, puis démarrez mon application après la connexion. Il y a peu de ressources sur ce en ligne et la documentation réelle sur l'installation de docker via CLI ne fonctionne pas à l'intérieur d'un conteneur.