Używanie tożsamości zarządzanej platformy Azure do uwierzytelniania w rejestrze kontenerów platformy Azure

Użyj tożsamości zarządzanej dla zasobów platformy Azure, aby uwierzytelnić się w rejestrze kontenerów platformy Azure z innego zasobu platformy Azure bez konieczności podawania poświadczeń rejestru ani zarządzania nimi. Na przykład skonfiguruj tożsamość zarządzaną przypisaną przez użytkownika lub przypisaną przez system na maszynie wirtualnej z systemem Linux, aby uzyskać dostęp do obrazów kontenerów z rejestru kontenerów, tak łatwo, jak używasz rejestru publicznego. Możesz też skonfigurować klaster usługi Azure Kubernetes Service do używania swojej tożsamości zarządzanej do ściągania obrazów kontenerów z usługi Azure Container Registry na potrzeby wdrożeń zasobników.

W tym artykule dowiesz się więcej na temat tożsamości zarządzanych i instrukcji:

  • Włączanie tożsamości przypisanej przez użytkownika lub przypisanej przez system na maszynie wirtualnej platformy Azure
  • Udzielanie tożsamości dostępu do rejestru kontenerów platformy Azure
  • Używanie tożsamości zarządzanej do uzyskiwania dostępu do rejestru i ściągania obrazu kontenera

Aby utworzyć zasoby platformy Azure, ten artykuł wymaga uruchomienia interfejsu wiersza polecenia platformy Azure w wersji 2.0.55 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Aby skonfigurować rejestr kontenerów i wypchnąć do niego obraz kontenera, musisz mieć również zainstalowaną lokalnie platformę Docker. Środowisko Docker zawiera pakiety, które umożliwiają łatwe konfigurowanie platformy Docker w systemie macOS, Windows lub Linux.

Dlaczego warto używać tożsamości zarządzanej?

Jeśli nie znasz funkcji tożsamości zarządzanych dla zasobów platformy Azure, zobacz to omówienie.

Po skonfigurowaniu wybranych zasobów platformy Azure przy użyciu tożsamości zarządzanej nadaj tożsamości dostęp do innego zasobu, podobnie jak każdy podmiot zabezpieczeń. Na przykład przypisz tożsamość zarządzaną rolę z uprawnieniami ściągania, wypychania i ściągania lub innych uprawnień do prywatnego rejestru na platformie Azure. (Aby uzyskać pełną listę ról rejestru, zobacz Role i uprawnienia usługi Azure Container Registry). Możesz udzielić tożsamości dostępu do co najmniej jednego zasobu.

Następnie użyj tożsamości, aby uwierzytelnić się w dowolnej usłudze obsługującej uwierzytelnianie firmy Microsoft Entra bez żadnych poświadczeń w kodzie. Wybierz sposób uwierzytelniania przy użyciu tożsamości zarządzanej, w zależności od scenariusza. Aby użyć tożsamości w celu uzyskania dostępu do rejestru kontenerów platformy Azure z maszyny wirtualnej, należy uwierzytelnić się w usłudze Azure Resource Manager.

Tworzenie rejestru kontenerów

Jeśli nie masz jeszcze rejestru kontenerów platformy Azure, utwórz rejestr i wypchnij do niego przykładowy obraz kontenera. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie prywatnego rejestru kontenerów przy użyciu interfejsu wiersza polecenia platformy Azure.

W tym artykule założono, że masz obraz kontenera aci-helloworld:v1 przechowywany w rejestrze. W przykładach użyto nazwy rejestru myContainerRegistry. Zastąp ciąg własnymi nazwami rejestru i obrazów w kolejnych krokach.

Tworzenie maszyny wirtualnej z obsługą platformy Docker

Utwórz maszynę wirtualną z systemem Ubuntu z obsługą platformy Docker. Musisz również zainstalować interfejs wiersza polecenia platformy Azure na maszynie wirtualnej. Jeśli masz już maszynę wirtualną platformy Azure, pomiń ten krok, aby utworzyć maszynę wirtualną.

Wdróż domyślną maszynę wirtualną z systemem Ubuntu Azure za pomocą polecenia az vm create. Poniższy przykład tworzy maszynę wirtualną o nazwie myDockerVM w istniejącej grupie zasobów o nazwie myResourceGroup:

az vm create \
    --resource-group myResourceGroup \
    --name myDockerVM \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

Utworzenie maszyny wirtualnej może potrwać kilka minut. Po zakończeniu wykonywania polecenia zanotuj publicIpAddress wartość wyświetlaną przez interfejs wiersza polecenia platformy Azure. Użyj tego adresu, aby nawiązać połączenia SSH z maszyną wirtualną.

Instalowanie platformy Docker na maszynie wirtualnej

Po uruchomieniu maszyny wirtualnej utwórz połączenie SSH z maszyną wirtualną. Zastąp ciąg publicIpAddress publicznym adresem IP maszyny wirtualnej.

ssh azureuser@publicIpAddress

Uruchom następujące polecenie, aby zainstalować platformę Docker na maszynie wirtualnej:

sudo apt update
sudo apt install docker.io -y

Po zakończeniu instalacji uruchom następujące polecenie, aby sprawdzić, czy platforma Docker działa prawidłowo na maszynie wirtualnej:

sudo docker run -it mcr.microsoft.com/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Instalowanie interfejsu wiersza polecenia platformy Azure

Wykonaj kroki opisane w artykule Instalowanie interfejsu wiersza polecenia platformy Azure przy użyciu narzędzia apt , aby zainstalować interfejs wiersza polecenia platformy Azure na maszynie wirtualnej z systemem Ubuntu. W tym artykule upewnij się, że zainstalowano wersję 2.0.55 lub nowszą.

Zamknij sesję SSH.

Przykład 1. Dostęp przy użyciu tożsamości przypisanej przez użytkownika

Tworzenie tożsamości

Utwórz tożsamość w subskrypcji przy użyciu polecenia az identity create . Możesz użyć tej samej grupy zasobów, która była wcześniej używana do utworzenia rejestru kontenerów lub maszyny wirtualnej albo innej.

az identity create --resource-group myResourceGroup --name myACRId

Aby skonfigurować tożsamość w poniższych krokach, użyj polecenia az identity show , aby zapisać identyfikator zasobu tożsamości i identyfikator jednostki usługi w zmiennych.

# Get resource ID of the user-assigned identity
userID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)

# Get service principal ID of the user-assigned identity
spID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)

Ponieważ identyfikator tożsamości jest potrzebny w późniejszym kroku podczas logowania się do interfejsu wiersza polecenia z maszyny wirtualnej, pokaż wartość:

echo $userID

Identyfikator ma postać:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Konfigurowanie maszyny wirtualnej przy użyciu tożsamości

Następujące polecenie az vm identity assign konfiguruje maszynę wirtualną platformy Docker przy użyciu tożsamości przypisanej przez użytkownika:

az vm identity assign --resource-group myResourceGroup --name myDockerVM --identities $userID

Udzielanie tożsamości dostępu do rejestru kontenerów

Teraz skonfiguruj tożsamość, aby uzyskać dostęp do rejestru kontenerów. Najpierw użyj polecenia az acr show , aby uzyskać identyfikator zasobu rejestru:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Użyj polecenia az role assignment create, aby przypisać rolę AcrPull do tożsamości. Ta rola zapewnia uprawnienia ściągnięcia do rejestru. Aby zapewnić zarówno uprawnienia ściągania, jak i wypychania, przypisz rolę AcrPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Uzyskiwanie dostępu do rejestru przy użyciu tożsamości

Protokół SSH do maszyny wirtualnej platformy Docker skonfigurowanej przy użyciu tożsamości. Uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure zainstalowanego na maszynie wirtualnej.

Najpierw należy uwierzytelnić się w interfejsie wiersza polecenia platformy Azure za pomocą polecenia az login przy użyciu tożsamości skonfigurowanej na maszynie wirtualnej. W polu <userID>zastąp identyfikator tożsamości pobranej w poprzednim kroku.

az login --identity --username <userID>

Następnie uwierzytelnij się w rejestrze za pomocą polecenia az acr login. W przypadku korzystania z tego polecenia interfejs wiersza polecenia używa tokenu usługi Active Directory utworzonego podczas uruchamiania az login w celu bezproblemowego uwierzytelniania sesji w rejestrze kontenerów. (W zależności od konfiguracji maszyny wirtualnej może być konieczne uruchomienie tego polecenia i poleceń platformy Docker za pomocą sudopolecenia .

az acr login --name myContainerRegistry

Powinien zostać wyświetlony Login succeeded komunikat. Następnie można uruchamiać docker polecenia bez podawania poświadczeń. Na przykład uruchom polecenie docker pull , aby ściągnąć aci-helloworld:v1 obraz, określając nazwę serwera logowania rejestru. Nazwa serwera logowania składa się z nazwy rejestru kontenerów (wszystkie małe litery), a następnie .azurecr.io — na przykład mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Przykład 2. Dostęp przy użyciu tożsamości przypisanej przez system

Konfigurowanie maszyny wirtualnej przy użyciu tożsamości zarządzanej przez system

Następujące polecenie az vm identity assign konfiguruje maszynę wirtualną platformy Docker przy użyciu tożsamości przypisanej przez system:

az vm identity assign --resource-group myResourceGroup --name myDockerVM

Użyj polecenia az vm show, aby ustawić zmienną na wartość principalId (identyfikator jednostki usługi) tożsamości maszyny wirtualnej, aby użyć jej w kolejnych krokach.

spID=$(az vm show --resource-group myResourceGroup --name myDockerVM --query identity.principalId --out tsv)

Udzielanie tożsamości dostępu do rejestru kontenerów

Teraz skonfiguruj tożsamość, aby uzyskać dostęp do rejestru kontenerów. Najpierw użyj polecenia az acr show , aby uzyskać identyfikator zasobu rejestru:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Użyj polecenia az role assignment create, aby przypisać rolę AcrPull do tożsamości. Ta rola zapewnia uprawnienia ściągnięcia do rejestru. Aby zapewnić zarówno uprawnienia ściągania, jak i wypychania, przypisz rolę AcrPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Uzyskiwanie dostępu do rejestru przy użyciu tożsamości

Protokół SSH do maszyny wirtualnej platformy Docker skonfigurowanej przy użyciu tożsamości. Uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure zainstalowanego na maszynie wirtualnej.

Najpierw należy uwierzytelnić interfejs wiersza polecenia platformy Azure za pomocą polecenia az login przy użyciu tożsamości przypisanej przez system na maszynie wirtualnej.

az login --identity

Następnie uwierzytelnij się w rejestrze za pomocą polecenia az acr login. W przypadku korzystania z tego polecenia interfejs wiersza polecenia używa tokenu usługi Active Directory utworzonego podczas uruchamiania az login w celu bezproblemowego uwierzytelniania sesji w rejestrze kontenerów. (W zależności od konfiguracji maszyny wirtualnej może być konieczne uruchomienie tego polecenia i poleceń platformy Docker za pomocą sudopolecenia .

az acr login --name myContainerRegistry

Powinien zostać wyświetlony Login succeeded komunikat. Następnie można uruchamiać docker polecenia bez podawania poświadczeń. Na przykład uruchom polecenie docker pull , aby ściągnąć aci-helloworld:v1 obraz, określając nazwę serwera logowania rejestru. Nazwa serwera logowania składa się z nazwy rejestru kontenerów (wszystkie małe litery), a następnie .azurecr.io — na przykład mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Następne kroki

W tym artykule przedstawiono sposób korzystania z tożsamości zarządzanych w usłudze Azure Container Registry i wykonywania następujących instrukcji:

  • Włączanie tożsamości przypisanej przez użytkownika lub przypisanej przez system na maszynie wirtualnej platformy Azure
  • Udzielanie tożsamości dostępu do rejestru kontenerów platformy Azure
  • Używanie tożsamości zarządzanej do uzyskiwania dostępu do rejestru i ściągania obrazu kontenera