Distribuire in Istanze di Azure Container dal Registro Container di Azure usando un'entità servizio

Registro Azure Container è un servizio gestito di registro contenitori usato per archiviare immagini di un contenitore Docker privato. Questo articolo descrive come eseguire il pull delle immagini del contenitore archiviate in un Registro Azure Container durante la distribuzione in Istanze di Azure Container. Un modo per configurare l'accesso al registro consiste nel creare un'entità servizio di Microsoft Entra con una password e nell'archiviare le credenziali di accesso in un insieme di credenziali delle chiavi di Azure.

Prerequisiti

Registro contenitori di Azure: per completare i passaggi descritti in questo articolo, è necessario un registro contenitori di Azure e almeno un'immagine del contenitore nel registro. Se occorre un registro, vedere Creare un registro contenitori usando l'interfaccia della riga di comando di Azure.

Interfaccia della riga di comando di Azure: gli esempi della riga di comando in questo articolo usano l'interfaccia della riga di comando di Azure e sono formattati per la shell Bash. È possibile installare l'interfaccia della riga di comando di Azure localmente o usare Azure Cloud Shell.

Limiti

  • Istanze di Azure Container non supporta il prelievo di immagini da ACR autenticato tramite identità gestita assegnata dal sistema. È necessario usare un'identità gestita assegnata dall'utente per autenticare i pull delle immagini dal Registro Azure Container, indipendentemente dal sistema operativo del gruppo di contenitori.

Importante

Non è possibile usare l'autenticazione tramite service principal per eseguire il pull delle immagini da un Registro Azure Container in cui è abilitato un endpoint privato. Se il Registro di sistema è configurato con un endpoint privato, è necessario usare un'identità gestita per autenticare il pull delle immagini. Per istruzioni, vedere Distribuire in Istanze di Azure Container da Registro Azure Container usando un'identità gestita.

Configurare l'autenticazione del registro

In uno scenario di produzione in cui si fornisce l'accesso a servizi e applicazioni "headless", si consiglia di configurare l'accesso al registro tramite un entità servizio. Un'entità servizio consente di fornire il controllo degli accessi in base al ruolo di Azure (Azure RBAC) alle immagini del container. Ad esempio, è possibile configurare un'entità di servizio con accesso limitato al prelievo da un registro.

Registro Azure Container offre altre opzioni di autenticazione.

Nella sezione seguente si crea un insieme di credenziali delle chiavi di Azure e un'entità servizio e si archiviano nell'insieme di credenziali le credenziali dell'entità servizio.

Crea un Key Vault

Se non si dispone già di un insieme di credenziali in Azure Key Vault, crearne uno tramite l'interfaccia della riga di comando di Azure usando i comandi seguenti.

Aggiorna la variabile RES_GROUP con il nome di un gruppo di risorse esistente in cui creare l'insieme di credenziali delle chiavi e la variabile ACR_NAME con il nome del registro contenitori. Per brevità, i comandi in questo articolo presuppongono che il Registro di sistema, l'insieme di credenziali delle chiavi e le istanze del contenitore vengano tutti creati nello stesso gruppo di risorse.

Specificare un nome per il nuovo insieme di credenziali delle chiavi in AKV_NAME. Il nome del vault deve essere univoco in Azure e deve contenere da 3 a 24 caratteri alfanumerici, iniziare con una lettera, terminare con una lettera o una cifra e non può contenere trattini consecutivi.

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

Creare un'entità servizio e archiviare le credenziali

Crea ora un'entità servizio e archivia le relative credenziali nel tuo Key Vault.

I comandi seguenti usano az ad sp create-for-rbac per creare l'entità servizio e az keyvault secret set per archiviare la password dell'entità servizio nell'insieme di credenziali. Assicurarsi di prendere nota di appId dell'entità servizio al momento della creazione.

# 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'argomento --role nel comando precedente configura l'entità servizio con il ruolo acrpull, che gli concede solo l'accesso pull al registro. Per concedere sia l'accesso push che quello pull, modificare l'argomento --role in acrpush.

Quindi, archivia nel vault il valore appId dell'entità servizio, che è il nome utente da passare ad Registro Azure Container per l'autenticazione.

# 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)

Hai creato un Azure Key Vault e vi hai archiviato due segreti:

  • $ACR_NAME-pull-usr: L'ID dell'entità servizio, da utilizzare come nome utente del registro contenitori.
  • $ACR_NAME-pull-pwd: La password dell'entità servizio, da utilizzare come password del registro contenitori.

Ora è possibile fare riferimento a questi segreti per nome quando gli utenti o le applicazioni e i servizi eseguono il pull di immagini dal registro.

Distribuire un contenitore con l'interfaccia della riga di comando di Azure

Ora che le credenziali dell'entità servizio sono archiviate come segreti in Azure Key Vault, le tue applicazioni e i tuoi servizi possono usarle per accedere al registro privato.

Ottenere prima di tutto il nome del server di accesso del registro usando il comando az acr show. Il nome del server di accesso contiene solo lettere minuscole ed è simile a myregistry.azurecr.io.

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Eseguire il comando az container create seguente per distribuire un'istanza di contenitore. Il comando usa le credenziali dell'entità servizio archiviate in Azure Key Vault per eseguire l'autenticazione nel registro contenitori e presuppone che in precedenza sia stato eseguito il push dell'immagine aci-helloworld nel registro. Aggiornare il valore di --image se si vuole usare un'immagine del registro diversa.

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

Il valore di --dns-name-label deve essere univoco in Azure, quindi il comando precedente accoda un numero casuale all'etichetta del nome DNS del contenitore. L'output del comando visualizza il nome di dominio completo (FQDN) del contenitore, ad esempio:

"aci-demo-25007.eastus.azurecontainer.io"

Una volta avviato correttamente il contenitore, è possibile passare al relativo FQDN nel browser per verificare che l'applicazione sia in esecuzione correttamente.

Distribuire con un modello di Azure Resource Manager

È possibile specificare le proprietà del registro Azure Container in un modello di Azure Resource Manager includendo la imageRegistryCredentials proprietà nella definizione del gruppo di contenitori. Ad esempio, è possibile specificare direttamente le credenziali del Registro di sistema:

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Per le impostazioni complete del gruppo di contenitori, vedere il riferimento al modello di Resource Manager.

Per informazioni dettagliate sul riferimento ai segreti di Azure Key Vault in un modello di Resource Manager, vedere Usare Azure Key Vault per passare valori di parametro protetti durante la distribuzione.

Distribuire con il portale di Azure

Se si conservano le immagini del contenitore in un Registro Azure Container, è possibile creare facilmente un contenitore in Istanze di Azure Container usando il portale di Azure. Quando si usa il portale per distribuire un'istanza di contenitore da un registro contenitori, è necessario abilitare l'account amministratore del registro. L'account amministratore è pensato per consentire l'accesso al registro a un singolo utente, principalmente a scopo di test.

  1. Nel portale di Azure, passa al tuo registro contenitori.

  2. Per confermare che l'account amministratore è abilitato, selezionare Chiavi di accesso e quindi in Utente amministratore selezionare Abilitare.

  3. Selezionare Repository, quindi selezionare il repository da cui si desidera eseguire la distribuzione, fare clic con il pulsante destro del mouse sul tag dell'immagine del contenitore che si vuole distribuire e selezionare Esegui istanza.

  4. Immettere un nome per il contenitore e un nome per il gruppo di risorse. Se si vuole, è anche possibile cambiare i valori predefiniti.

    Menu di creazione per Istanze di Azure Container

  5. Al termine della distribuzione, è possibile passare al gruppo di contenitori dal riquadro delle notifiche per trovare l'indirizzo IP e le altre proprietà.

    Vista dettagli del gruppo di contenitori di Istanze di Azure Container

Passaggi successivi

Per altre informazioni sull'autenticazione con Registro Azure Container, vedere Eseguire l'autenticazione con un registro Registro Azure Container.