Déployer sur Azure Container Instances à partir d’Azure Container Registry à l’aide d’un principal de service
Azure Container Registry est un service de registre de conteneurs managé basé sur Azure, utilisé pour stocker des images de conteneurs Docker privés. Cet article explique comment extraire des images conteneur d’un registre de conteneurs Azure lors d’un déploiement sur Azure Container Instances. Une façon de configurer l’accès au registre consiste à créer un principal de service et un mot de passe Microsoft Entra, puis à stocker les informations d’identification de connexion dans un coffre de clés Azure.
Prérequis
Azure Container Registry : Vous avez besoin d’un registre de conteneurs Azure et au moins d’une image conteneur dans le registre pour effectuer les étapes décrites dans cet article. Si vous avez besoin d’un registre, consultez Créer un registre de conteneurs à l’aide de Azure CLI.
Azure CLI : Les exemples de ligne de commande dans cet article utilisent Azure CLI et sont mis en forme pour le shell Bash. Vous pouvez installer Azure CLI localement, ou bien utilisez Azure Cloud Shell.
Limites
- Les conteneurs Windows ne prennent pas en charge les extractions d’images d’identité gérée affectées par ACR, mais uniquement affectées par l’utilisateur.
Configurer l’authentification du registre
Dans un scénario de production où vous fournissez l'accès à des services et applications « sans tête », nous vous recommandons de configurer l'accès au registre à l'aide d'un principal de service. Un principal de service vous permet de fournir un contrôle d’accès en fonction du rôle Azure (Azure RBAC) à vos images conteneur. Par exemple, vous pouvez configurer un principal de service avec uniquement un accès d’extraction à un registre.
Azure Container Registry fournit davantage d’options d’authentification.
Dans la section suivante, vous créez un coffre de clés Azure et un principal de service et vous stockez des informations d’identification du principal de service dans le coffre.
Création d’un coffre de clés
Si vous n’avez pas encore un coffre dans Azure Key Vault, créez-en un avec Azure CLI à l’aide des commandes suivantes.
Mettez à jour la variable RES_GROUP
avec le nom d’un groupe de ressources existant où créer le coffre de clés, et ACR_NAME
avec le nom de votre registre de conteneurs. Par souci de concision, les commandes de cet article supposent que registre, coffre de clé et instances de conteneur sont tous créés dans le même groupe de ressources.
Spécifiez un nom pour votre nouveau coffre de clés dans AKV_NAME
. Le nom du coffre doit être unique dans Azure et doit comporter entre 3 et 24 caractères alphanumériques, commencer par une lettre, se terminer par une lettre ou un chiffre et ne peut pas contenir de tirets consécutifs.
RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry # Azure Container Registry registry name
AKV_NAME=mykeyvault # Azure Key Vault vault name
az keyvault create -g $RES_GROUP -n $AKV_NAME
Créer un principal de service et stocker les informations d’identification
À présent, créez un principal de service et stockez ses informations d’identification dans votre coffre de clés.
La commande suivante utilise az ad sp create-for-rbac pour créer le principal du service, et az keyvault secret set pour stocker le mot de passe du principal de service dans le coffre. Veillez à noter l’AppID du principal de service lors de la création.
# Create service principal
az ad sp create-for-rbac \
--name http://$ACR_NAME-pull \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role acrpull
SP_ID=xxxx # Replace with your service principal's appId
# Store the registry *password* in the vault
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-pwd \
--value $(az ad sp show --id $SP_ID --query password --output tsv)
L’argument --role
dans la commande précédente configure le principal de service avec le rôle acrpull, ce qui lui accorde uniquement un accès d’extraction au registre. Pour accorder les accès push et pull (envoi et tirage), affectez à l’argument --role
la valeur acrpush.
Ensuite, stockez le appId du principal de service dans le coffre, qui est le nom d’utilisateur que vous passez à Azure Container Registry pour l’authentification.
# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-usr \
--value $(az ad sp show --id $SP_ID --query appId --output tsv)
Vous avez créé un coffre de clés Azure et y avez stocké deux secrets :
$ACR_NAME-pull-usr
: ID de principal du service, pour une utilisation comme nom d’utilisateur du registre de conteneurs.$ACR_NAME-pull-pwd
: mot de passe du principal du service, pour une utilisation comme mot de passe du registre de conteneurs.
Vous pouvez maintenant référencer ces secrets par nom lorsque vous ou vos applications et services extrayez des images du registre.
Déployer le conteneur avec Azure CLI
Maintenant que les informations d’identification du principal de service sont stockées dans les secrets de Azure Key Vault, vos applications et vos services peuvent les utiliser pour accéder à votre registre privé.
Obtenez d’abord le nom du serveur de connexion du registre avec la commande az acr show. Le nom du serveur de connexion est tout en minuscules et est similaire à myregistry.azurecr.io
.
ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)
Exécutez la commande az container createsuivante pour déployer une instance de conteneur. La commande utilise les informations d’identification du principal de service stockées dans Azure Key Vault pour s’authentifier auprès de votre registre de conteneurs et suppose que vous avez précédemment envoyé l’image aci-helloworld à votre registre. Mettez à jour la valeur --image
si vous souhaitez utiliser une autre image à partir de votre registre.
az container create \
--name aci-demo \
--resource-group $RES_GROUP \
--image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
--registry-login-server $ACR_LOGIN_SERVER \
--registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
--registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
--dns-name-label aci-demo-$RANDOM \
--query ipAddress.fqdn
La valeur --dns-name-label
doit être unique dans Azure, afin que la commande précédente ajoute un nombre aléatoire à l’étiquette de nom du DNS du conteneur. La sortie pour la commande affiche le nom de domaine complet du conteneur (FQDN), par exemple :
"aci-demo-25007.eastus.azurecontainer.io"
Une fois le conteneur démarré avec succès, vous pouvez accéder à son FQDN dans votre navigateur pour vérifier que l'application s'exécute correctement.
Déploiement avec un modèle Azure Resource Manager
Vous pouvez spécifier les propriétés de votre registre de conteneurs Azure dans un modèle Azure Resource Manager en incluant la propriété imageRegistryCredentials
dans la définition du groupe de conteneurs. Par exemple, vous pouvez spécifier les informations d’identification du registre directement :
[...]
"imageRegistryCredentials": [
{
"server": "imageRegistryLoginServer",
"username": "imageRegistryUsername",
"password": "imageRegistryPassword"
}
]
[...]
Pour obtenir la configuration complète des paramètres du groupe de conteneurs, consultez Informations de référence sur les modèles Resource Manager.
Pour plus d’informations sur le référencement des secrets de Azure Key Vault dans un modèle Resource Manager, consultez Utiliser Azure Key Vault pour transmettre une valeur de paramètre sécurisée pendant le déploiement.
Déploiement avec le Portail Azure
Si vous gérez des images de conteneur dans un registre Azure Container Registry, vous pouvez facilement créer un conteneur dans Azure Container Instances via le portail Azure. Lorsque vous utilisez le portail pour déployer une instance de conteneur à partir d’un registre de conteneurs, vous devez activer le compte administrateur du registre. Le compte d’administrateur est conçu pour permettre à un seul utilisateur d’accéder au registre, principalement à des fins de test.
Dans le portail Azure, accédez à votre registre de conteneurs.
Pour confirmer que le compte administrateur est activé, sélectionnez Touches d’accès, et, sous Utilisateur administrateur, sélectionnez Activer.
Sélectionnez Référentiels, puis le référentiel dont proviendra le déploiement, cliquez avec le bouton droit sur la balise de l’image conteneur que vous souhaitez déployer et sélectionnez Exécuter l’instance.
Entrez un nom pour le conteneur et un nom pour le groupe de ressources. Vous pouvez également modifier les valeurs par défaut si vous le souhaitez.
Une fois le déploiement terminé, vous pouvez naviguer vers le groupe de conteneurs à partir du panneau Notifications pour trouver son adresse IP et autres propriétés.
Étapes suivantes
Pour plus d’information sur l’authentification Azure Container Registry, consultez S’authentifier avec un registre de conteneurs Azure.