Použití spravované identity k ověření ve službě Azure Container Registry

Spravovanou identitu pro prostředky Azure můžete použít k ověření ve službě Azure Container Registry z jiného prostředku Azure, aniž byste museli zadávat nebo spravovat přihlašovací údaje registru.

Například na virtuálním počítači s Linuxem nastavte spravovanou identitu přiřazenou uživatelem nebo systémem , abyste měli přístup k imagím kontejnerů z vašeho registru kontejneru, a to snadno, když používáte veřejný registr. Nebo nastavte cluster Azure Kubernetes Service tak, aby používal svou spravovanou identitu k vyžádání imagí kontejnerů ze služby Azure Container Registry pro nasazení podů.

Přehled spravovaných identit v Azure najdete v tématu Co jsou spravované identity pro prostředky Azure?

Spravovanou identitu můžete přiřadit k roli s oprávněními pouze pro načítání, pro načítání a odesílání, nebo s jinými oprávněními k jednomu nebo několika privátním registrům v Azure. Úplný seznam rolí registru najdete v přehledu oprávnění a rolí služby Azure Container Registry.

Pak použijte identitu k ověření ve všech službách, které podporují spravované identity, aniž byste museli v kódu provádět přihlašovací údaje.

V tomto článku se naučíte:

  • Povolte identitu přidělenou uživatelem nebo systémem na virtuálním počítači Azure.
  • Udělení přístupu identit ke službě Azure Container Registry
  • Použití spravované identity pro přístup k registru a vyžádání image kontejneru

Požadavky

K dokončení kroků v tomto článku můžete použít Azure CLI nebo Azure PowerShell. Použijte nejnovější verzi některého nástroje. Pokud nemáte nainstalovaný ani jeden nástroj, přečtěte si téma Instalace Azure CLI nebo Instalace Azure PowerShellu.

Pokud chcete nastavit registr kontejneru a odeslat do ní image kontejneru, musíte mít také nainstalovaný Docker místně. Docker nabízí balíčky pro snadnou konfiguraci Dockeru v libovolném systému macOS, Windows nebo Linux.

Pokud ještě nemáte registr kontejneru Azure, vytvořte registr a nasdílejte do něj ukázkovou image kontejneru. Postupujte podle kroků k vytvoření registru pomocí Azure CLI, Azure PowerShellu nebo webu Azure Portal.

Tento článek předpokládá, že máte image kontejneru uloženou aci-helloworld:v1 v registru. Příklady používají název registru myContainerRegistry. Tyto hodnoty můžete nahradit vlastními názvy registrů a imagí.

Vytvoření a konfigurace virtuálního počítače s podporou Dockeru

Vytvořte virtuální počítač s Ubuntu s podporou Dockeru, který se použije s vaší spravovanou identitou. V závislosti na tom, který nástroj chcete použít, musíte také nainstalovat Azure CLI nebo Azure PowerShell na virtuální počítač.

Pokud už máte virtuální počítač Azure s nainstalovaným Azure CLI nebo Azure PowerShellem, můžete přejít k další části.

Vytvoření virtuálního počítače

Nasaďte výchozí virtuální počítač Ubuntu Azure pomocí az vm create. Následující příklad vytvoří virtuální počítač myDockerVM v existující skupině prostředků myResourceGroup:

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

Vytvoření virtuálního počítače trvá několik minut. Po dokončení příkazu si poznamenjte parametr publicIpAddress, který byl zobrazen v Azure CLI. Tuto adresu použijte k vytvoření připojení SSH k virtuálnímu počítači v dalším kroku.

Instalace Dockeru na virtuální počítač

Dále na virtuální počítač nainstalujte Docker, aby mohl načíst a spustit image kontejneru z azure Container Registry.

Po spuštění virtuálního počítače proveďte připojení SSH k virtuálnímu počítači. Nahraďte publicIpAddress veřejnou IP adresou vašeho virtuálního počítače.

ssh azureuser@publicIpAddress

Spuštěním následujícího příkazu nainstalujte Docker na virtuální počítač:

sudo apt update
sudo apt install docker.io -y

Po instalaci spusťte následující příkaz a ověřte, že je na virtuálním počítači správně spuštěný Docker:

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

Instalace Azure CLI nebo Azure PowerShellu na virtuální počítač

Postupujte podle kroků v tématu Instalace Azure CLI s apt pro instalaci Azure CLI na virtuální počítač s Ubuntu. V tomto článku nezapomeňte nainstalovat nejnovější verzi.

Po instalaci Azure CLI ukončete relaci SSH.

Konfigurace virtuálního počítače pomocí spravované identity přiřazené uživatelem

Spravovaná identita přiřazená uživatelem je samostatný prostředek Azure, který spravujete odděleně od prostředků, které ji používají. Spravovanou identitu přiřazenou uživatelem můžete přidružit k několika prostředkům Azure.

Tato část vysvětluje, jak nakonfigurovat virtuální počítač s identitou přiřazenou uživatelem pro bezpečný přístup ke službě Azure Container Registry.

Vytvořit uživatelsky přiřazenou spravovanou identitu

Pomocí příkazu az identity create vytvořte identitu ve svém předplatném. Můžete použít stejnou skupinu prostředků, kterou jste použili dříve k vytvoření registru kontejneru nebo virtuálního počítače, nebo zvolit jinou.

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

Pokud chcete nakonfigurovat identitu v následujících krocích, pomocí příkazu az identity show uložte ID prostředku a ID instančního objektu identity do proměnných.

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

Vzhledem k tomu, že při přihlášení k rozhraní příkazového řádku z virtuálního počítače potřebujete ID identity v pozdějším kroku, zobrazte hodnotu:

echo $userID

ID je ve formuláři:

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

Konfigurace virtuálního počítače pomocí spravované identity přiřazené uživatelem

Dále nakonfigurujte virtuální počítač Dockeru tak, aby používal identitu přiřazenou uživatelem, kterou jste vytvořili v předchozím kroku.

Slouží az vm identity assign ke konfiguraci virtuálního počítače pomocí ID, které jste získali v předchozím kroku:

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

Udělte identitě spravované uživatelem přístup k registru kontejnerů.

Teď nakonfigurujte identitu tak, aby získala přístup k registru kontejneru.

Musíte přiřadit buď Container Registry Repository Reader (pro registry s podporou ABAC), nebo AcrPull (pro registry bez ABAC). Toto přiřazení role poskytuje oprávnění ke stahování z registru.

Pokud chcete poskytnout oprávnění ke stahování i odevzdávání, přiřaďte Container Registry Repository Writer roli pro registry s podporou ABAC nebo AcrPush roli pro registry bez podpory ABAC.

Použijte az acr show k získání ID prostředku registru:

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

Slouží az role assignment create k přiřazení požadované role k identitě. Tento příklad přiřadí roli Container Registry Repository Reader, která uděluje pouze oprávnění k čtení v ABAC-podporovaném registru.

az role assignment create --assignee $spID --scope $resourceID \
    --role "Container Registry Repository Reader" # For ABAC-enabled registries. Otherwise, use AcrPull for non-ABAC registries.

Použití spravované identity přiřazené uživatelem pro přístup k registru

Připojte se k virtuálnímu počítači Dockeru, který identita konfiguruje, a spuštěním následujících příkazů povolte identitě přístup k registru kontejneru.

Na virtuálním počítači se pomocí příkazu az login pomocí identity, kterou jste získali dříve, ověřte v Azure CLI.

az login --identity --username <userID>

Dále se pomocí příkazu az acr login ověřte v registru. Když použijete tento příkaz, rozhraní příkazového řádku použije token služby Active Directory vytvořený při spuštění az login k bezproblémovému ověření relace pomocí registru kontejneru.

az acr login --name myContainerRegistry

Měla by se zobrazit Login succeeded zpráva. Pak můžete spouštět docker příkazy bez zadání přihlašovacích údajů. Spusťte příkaz docker pull, abyste stáhli image aci-helloworld:v1, a zadejte název přihlašovacího serveru vašeho registru:

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

Konfigurace virtuálního počítače se spravovanou identitou přiřazenou systémem

Spravovaná identita přiřazená systémem je funkce Azure, která umožňuje vašemu virtuálnímu počítači automaticky spravovat vlastní identitu v Azure Active Directory. Tato část vysvětluje, jak nakonfigurovat virtuální počítač s identitou přiřazenou systémem pro bezpečný přístup ke službě Azure Container Registry.

Povolte systémem přiřazenou spravovanou identitu na vašem virtuálním počítači

Slouží az vm identity assign ke konfiguraci virtuálního počítače Dockeru s identitou přiřazenou systémem:

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

Slouží az vm show k nastavení proměnné na hodnotu principalId (ID instančního objektu) identity virtuálního počítače, která se použije v dalších krocích:

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

Udělit přístup spravované identitě přiřazené systémem k registru kontejnerů

Teď nakonfigurujte identitu tak, aby získala přístup k registru kontejneru.

Musíte přiřadit buď Container Registry Repository Reader (pro registry s podporou ABAC), nebo AcrPull (pro registry bez ABAC). Toto přiřazení role poskytuje oprávnění ke stahování z registru.

Pokud chcete poskytnout oprávnění ke stahování i odevzdávání, přiřaďte Container Registry Repository Writer roli pro registry s podporou ABAC nebo AcrPush roli pro registry bez podpory ABAC.

Použijte az acr show k získání ID prostředku registru:

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

Slouží az role assignment create k přiřazení požadované role k identitě. Tento příklad přiřadí Container Registry Repository Reader roli, která uděluje oprávnění ke stahování pouze v registru s podporou ABAC.

az role assignment create --assignee $spID --scope $resourceID \
    --role "Container Registry Repository Reader"

Použití spravované identity přiřazené systémem pro přístup k registru

Připojte se k virtuálnímu počítači Dockeru, který identita konfiguruje, a spuštěním následujících příkazů povolte identitě přístup k registru kontejneru.

Na virtuálním počítači přihlaste se k Azure CLI pomocí identity přiřazené systémem az login.

az login --identity

V dalším kroku se ověřte v registru pomocí příkazu az acr login. Když použijete tento příkaz, rozhraní příkazového řádku použije token služby Active Directory vytvořený při spuštění az login k bezproblémovému ověření relace pomocí registru kontejneru.

az acr login --name myContainerRegistry

Měla by se zobrazit Login succeeded zpráva. Pak můžete spouštět docker příkazy bez zadání přihlašovacích údajů. Spusťte docker pull pro načtení image aci-helloworld:v1 a zadejte název přihlašovacího serveru vašeho registru:

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