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 Microsoft Entra, aby zapewnić wypychanie, ściąganie lub inny dostęp do rejestru kontenerów. Za pomocą jednostki usługi można zapewnić dostęp do usług i aplikacji działających bez interfejsu użytkownika.
Co to jest główna usługa?
Jednostki usługi Microsoft Entra ID zapewniają dostęp do zasobów platformy Azure w ramach subskrypcji. Jednostkę usługi można traktować jako tożsamość użytkownika dla usługi, gdzie "usługa" to dowolna aplikacja, usługa lub platforma, która musi uzyskiwać dostęp do zasobów. Jednostkę usługi można skonfigurować z prawami dostępu określonymi tylko dla określonych zasobów. Następnie skonfiguruj aplikację lub usługę tak, aby korzystała z poświadczeń jednostki usługi w celu uzyskania dostępu do tych zasobów.
W kontekście usługi Azure Container Registry możesz utworzyć główne konto usługi Microsoft Entra z uprawnieniami do ściągania, wypychania lub innych uprawnień do rejestru prywatnego w Azure. Aby uzyskać pełną listę, zobacz Azure Container Registry Entra permissions and roles overview (Omówienie uprawnień i ról usługi Azure Container Registry).
Dlaczego warto używać jednostki usługi?
Korzystając z profilu usługi Microsoft Entra, możesz zapewnić ograniczony dostęp do prywatnego rejestru kontenerów. Utwórz różne jednostki usługi dla każdej aplikacji lub usług, z których każda ma dostosowane prawa dostępu do rejestru. Ponadto, ponieważ można uniknąć udostępniania poświadczeń między usługami i aplikacjami, można obracać poświadczenia lub odwoływać dostęp tylko dla jednostki usługi (a tym samym wybranej aplikacji).
Na przykład skonfiguruj aplikację internetową tak, aby korzystała z tożsamości usługi, która zapewnia jej dostęp tylko do obrazów pull
, podczas gdy system kompilacji używa tożsamości usługi, która zapewnia mu dostęp zarówno do push
, jak i pull
. pl-PL: Jeśli opracowanie aplikacji zmienia właściciela, możesz zmienić poświadczenia jednostki usługi bez wpływu na system kompilacji.
Kiedy należy używać głównej jednostki usługi
Należy użyć jednostki usługi, aby zapewnić dostęp do rejestru w scenariuszach bezgłowych. Oznacza to aplikację, usługę lub skrypt, który musi wypychać lub ściągać obrazy kontenerów w sposób zautomatyzowany lub inny, niewymagający nadzoru. Na przykład:
Pull: Wdrażanie kontenerów z rejestru w systemach orkiestracji, w tym Kubernetes, DC/OS i Docker Swarm. Możesz również ściągać obrazy z rejestrów kontenerów do użycia w powiązanych usługach platformy Azure, takich jak App Service, Batch, Service Fabric i inne.
Napiwek
Jednostka usługi jest zalecana w kilku scenariuszach platformy Kubernetes w celu ściągania obrazów z rejestru kontenerów platformy Azure. Za pomocą usługi Azure Kubernetes Service (AKS) można również użyć zautomatyzowanego mechanizmu do uwierzytelniania w rejestrze docelowym, włączając tożsamość zarządzaną klastra.
- Wypychanie: twórz obrazy kontenerów i wypychaj je do rejestru przy użyciu rozwiązań ciągłej integracji i wdrażania, takich jak Azure Pipelines lub Jenkins.
W przypadku indywidualnego dostępu do rejestru, takiego jak ręczne ściąganie obrazu kontenera na stację roboczą deweloperską, zalecamy użycie własnej tożsamości Microsoft Entra w celu uzyskania dostępu do rejestru (na przykład poprzez az acr login).
Tworzenie jednostki usługi
Aby utworzyć jednostkę usługi z dostępem do rejestru kontenerów, uruchom następujący skrypt w usłudze Azure Cloud Shell lub lokalnej instalacji interfejsu wiersza polecenia platformy Azure. 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ć unikalna w ramach dzierżawcy Microsoft Entra. Jeśli zostanie wyświetlony błąd "'http://acr-service-principal' already exists.
", określ inną nazwę jednostki usługi.
Opcjonalnie możesz 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żesz skonfigurować swoje aplikacje i usługi, aby uwierzytelniały się w rejestrze kontenerów jako główny obiekt 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"
Korzystanie z istniejącej jednostki usługi
Aby nadać dostęp do rejestru istniejącemu podmiotowi usługi, musisz przypisać nową rolę do tego podmiotu 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ń pull dla jednostki usługi wskazanej 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
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:
Uwierzytelnij się za pomocą principała usługi
Po uzyskaniu obiektu usługi, któremu przyznano dostęp do rejestru kontenerów, możesz skonfigurować jej poświadczenia pod kątem dostępu do "bezgłowych" usług i aplikacji lub za pomocą polecenia docker login
wprowadzić je. Użyj następujących wartości:
- Nazwa użytkownika — identyfikator aplikacji (klienta) jednostki usługi
- Hasło — hasło jednostki usługi (klucz tajny klienta)
Wartość nazwa użytkownika ma format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.
Napiwek
Hasło (klucz tajny klienta) jednostki usługi można wygenerować ponownie, uruchamiając polecenie az ad sp credential reset .
Używanie poświadczeń z usługami platformy Azure
Możesz użyć poświadczeń jednostki usługi z dowolnej usługi platformy Azure, która uwierzytelnia się w rejestrze kontenerów platformy Azure. Użyj poświadczeń jednostki usługi zamiast poświadczeń administratora rejestru w różnych scenariuszach.
Używanie z logowaniem docker
Możesz uruchomić docker login
przy użyciu Service Principal. W poniższym przykładzie identyfikator aplikacji jednostki usługi jest przekazywany w zmiennej środowiskowej $SP_APP_ID
, a hasło w zmiennej $SP_PASSWD
. Aby zapoznać się z zalecanymi praktykami dotyczącymi zarządzania poświadczeniami Docker, zobacz dokumentację dotyczącą polecenia docker login.
# Log in to Docker with service principal credentials
docker login myregistry.azurecr.io --username $SP_APP_ID --password $SP_PASSWD
Po zalogowaniu platforma Docker buforuje poświadczenia.
Używanie z certyfikatem
Jeśli dodałeś certyfikat do jednostki usługi, możesz zalogować się do Azure CLI przy użyciu uwierzytelniania opartego na certyfikatach, a następnie użyć polecenia az acr login, aby uzyskać dostęp do rejestru. Używanie certyfikatu jako wpisu tajnego zamiast hasła zapewnia dodatkowe zabezpieczenia podczas korzystania z interfejsu wiersza polecenia.
Certyfikat z podpisem własnym można utworzyć podczas tworzenia głównej usługi. Możesz też dodać co najmniej jeden certyfikat do istniejącego głównego elementu usługi. Jeśli na przykład użyjesz jednego ze skryptów w tym artykule, aby utworzyć lub zaktualizować jednostkę usługi z uprawnieniami do ściągania lub wypychania obrazów z rejestru, dodaj certyfikat przy użyciu polecenia az ad sp credential reset .
Aby użyć jednostki usługi z certyfikatem do zalogowania się w interfejsie wiersza polecenia platformy Azure, certyfikat musi być w formacie PEM i zawierać klucz prywatny. Jeśli certyfikat nie jest w wymaganym formacie, użyj narzędzia takiego jak openssl
przekonwertować go. Po uruchomieniu az login w celu zalogowania się do CLI za pomocą usługi głównej, podaj również identyfikator aplikacji tej usługi oraz identyfikator dzierżawy w Active Directory. Poniższy przykład przedstawia te wartości jako zmienne środowiskowe:
az login --service-principal --username $SP_APP_ID --tenant $SP_TENANT_ID --password /path/to/cert/pem/file
Następnie wykonaj az acr login, aby uwierzytelnić się w rejestrze.
az acr login --name myregistry
Interfejs wiersza polecenia używa tokenu utworzonego podczas uruchamiania az login
w celu uwierzytelnienia sesji z rejestrem.
Tworzenie tożsamości usługi dla scenariuszy między dzierżawcami
Podmiot zabezpieczeń może być również używany w scenariuszach platformy Azure, które wymagają pobierania obrazów z rejestru kontenerów w jednym Microsoft Entra ID (dzierżawcy) do usługi lub aplikacji w innym. Na przykład organizacja może uruchomić aplikację w Tenant A, która musi pobrać obraz z udostępnionego rejestru kontenerów z Tenant B.
Aby utworzyć jednostkę usługi, która może uwierzytelniać się w rejestrze kontenerów w scenariuszu między dzierżawami:
- Utwórz aplikację wielodostępną (głównego użytkownika usług) w dzierżawcy A
- Skonfiguruj aplikację w dzierżawie B
- Udzielanie uprawnień jednostki usługi w celu ściągnięcia z rejestru w dzierżawie B
- Aktualizowanie usługi lub aplikacji w dzierżawie A w celu uwierzytelnienia przy użyciu nowej jednostki usługi
Aby uzyskać przykładowe kroki, zobacz Pobieranie obrazów z rejestru kontenerów do klastra AKS w innej dzierżawie AD.
Odnawianie podmiotu usługi
Główna jednostka usługi jest tworzona o rocznej ważności. Możesz rozszerzyć ważność dalej niż jeden rok lub podać wybraną datę wygaśnięcia za pomocą az ad sp credential reset
polecenia .
Następne kroki
Zapoznaj się z omówieniem uwierzytelniania dla innych scenariuszy uwierzytelniania w rejestrze kontenerów platformy Azure.
Aby zapoznać się z przykładem użycia usługi Azure Key Vault do przechowywania i pobierania poświadczeń jednostki usługi dla rejestru kontenerów, zobacz samouczek dotyczący kompilowania i wdrażania obrazu kontenera przy użyciu usługi ACR Tasks.