Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz użyć jednostki usługi Entra firmy Microsoft, aby zapewnić dostęp do prywatnych rejestrów kontenerów w usłudze Azure Container Registry.
Z tego artykułu dowiesz się, jak utworzyć i skonfigurować jednostkę usługi Microsoft Entra z uprawnieniami ściągnięcia do rejestru. Następnie uruchamiasz kontener w usłudze Azure Container Instances (ACI), który pobiera jego obraz z rejestru prywatnego przy użyciu głównej jednostki usługi do uwierzytelniania.
Kiedy należy używać głównego konta usługi
Należy użyć głównej aplikacji do uwierzytelniania z usługi Azure Container Instances (ACI) w scenariuszach bez interfejsu użytkownika, takich jak aplikacje lub usługi, które tworzą wystąpienia kontenerów w sposób zautomatyzowany lub w inny sposób nienadzorowany.
Jeśli na przykład masz zautomatyzowany skrypt, który działa w nocy i tworzy instancję kontenera opartego na zadaniach do przetwarzania danych, może użyć jednostki usługi z uprawnieniami tylko do odczytu w celu uwierzytelniania w rejestrze. Następnie można zresetować poświadczenia jednostki usługi lub całkowicie odwołać jej dostęp, bez wpływu na inne usługi i aplikacje.
Jednostki usługi powinny być również używane, gdy administrator rejestru jest wyłączony.
Tworzenie jednostki usługi
Aby utworzyć reprezentację usługi z dostępem do rejestru kontenerów, uruchom następujący skrypt w usłudze Azure Cloud Shell lub lokalnej instalacji Azure CLI. Skrypt jest sformatowany dla powłoki Bash.
Przed uruchomieniem skryptu zaktualizuj zmienną ACR_NAME
przy użyciu nazwy rejestru kontenerów. Wartość SERVICE_PRINCIPAL_NAME
musi być unikatowa w Twojej dzierżawie Microsoft Entra. Jeśli zostanie wyświetlony błąd "'http://acr-service-principal' already exists.
", określ inną nazwę jednostki usługi.
Możesz opcjonalnie zmodyfikować wartość --role
w poleceniu az ad sp create-for-rbac, jeśli chcesz udzielić różnych uprawnień. Aby uzyskać pełną listę ról, zobacz Omówienie uprawnień i ról usługi Azure Container Registry.
Po uruchomieniu skryptu zanotuj identyfikator i hasło jednostki usługi. Po uzyskaniu poświadczeń można skonfigurować aplikacje i usługi, aby uwierzytelniały się w rejestrze kontenerów jako główny podmiot usługi.
#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.
# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal
# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId
# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"
Użyj istniejącej zasady usługi
Aby udzielić dostępu rejestru do istniejącej jednostki usługi, musisz przypisać nową rolę do jednostki usługi. Podobnie jak w przypadku tworzenia nowej jednostki usługi, należy wykonać przypisania ról, aby udzielić uprawnień jednostce usługi. Zobacz Omówienie uprawnień i ról usługi Azure Container Registry.
Poniższy skrypt używa polecenia az role assignment create , aby udzielić uprawnień ściągnięcia do jednostki usługi określonej w zmiennej SERVICE_PRINCIPAL_ID
. Dostosuj wartość, --role
jeśli chcesz przyznać inny poziom dostępu.
#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal
# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull
Uwierzytelnianie przy użyciu jednostki usługi
Aby uruchomić kontener w usłudze Azure Container Instances przy użyciu jednostki usługi, określ jego identyfikator jako --registry-username
i hasło jako --registry-password
.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mycontainerregistry.azurecr.io/myimage:v1 \
--registry-login-server mycontainerregistry.azurecr.io \
--registry-username <service-principal-ID> \
--registry-password <service-principal-password>
Uwaga
Zalecamy uruchomienie poleceń w najnowszej wersji usługi Azure Cloud Shell. Ustaw export MSYS_NO_PATHCONV=1
dla uruchamiania lokalnego środowiska powłoki bash.
Przykładowe skrypty
Powyższe przykładowe skrypty dla interfejsu wiersza polecenia platformy Azure można znaleźć w witrynie GitHub, a także wersje programu Azure PowerShell:
Następne kroki
Następujące artykuły zawierają dodatkowe szczegóły dotyczące pracy z jednostkami usługi i usługą ACR: