Použití spravovaných identit se službou Azure Container Instances

Spravované identity pro prostředky Azure můžete použít ke spouštění kódu v Azure Container Instances, který komunikuje s jinými službami Azure – bez nutnosti udržovat v kódu tajné kódy nebo přihlašovací údaje. Tato funkce poskytuje Azure Container Instances s automaticky spravovanou identitou v Azure Active Directory.

V tomto článku se dozvíte další informace o spravovaných identitách v Azure Container Instances a:

  • Povolení identity přiřazené uživatelem nebo přiřazené systémem ve skupině kontejnerů
  • Udělení přístupu identitě k trezoru klíčů Azure
  • Použití spravované identity pro přístup k trezoru klíčů ze spuštěného kontejneru

Přizpůsobte si příklady tak, aby povolily a používejte identity v Azure Container Instances pro přístup k jiným službám Azure. Tyto příklady jsou interaktivní. V praxi by ale image kontejneru spouštěl kód pro přístup ke službám Azure.

Důležité

Tato funkce je aktuálně ve verzi Preview. Verze Preview vám zpřístupňujeme pod podmínkou, že budete souhlasit s dodatečnými podmínkami použití. Některé aspekty této funkce se můžou před zveřejněním změnit. Spravované identity ve službě Azure Container Instances v současné době podporují pouze linuxové kontejnery, ale zatím Windows kontejnery.

Proč používat spravovanou identitu?

Spravovanou identitu ve spuštěném kontejneru použijte k ověření pro jakoukoli službu, která podporuje ověřování Azure AD, bez nutnosti spravovat přihlašovací údaje v kódu kontejneru. U služeb, které nepodporují ověřování AD, můžete tajné kódy ukládat do trezoru klíčů Azure a pomocí spravované identity získat přístup k trezoru klíčů a načíst přihlašovací údaje. Další informace o používání spravované identity najdete v tématu Co jsou spravované identity pro prostředky Azure?

Povolení spravované identity

Při vytváření skupiny kontejnerů povolte jednu nebo více spravovaných identit nastavením vlastnosti ContainerGroupIdentity. Spravované identity můžete také povolit nebo aktualizovat po spuštění skupiny kontejnerů – obě akce způsobí restartování skupiny kontejnerů. Pokud chcete nastavit identity pro novou nebo existující skupinu kontejnerů, použijte Azure CLI, šablonu Resource Manager, soubor YAML nebo jiný nástroj Azure.

Azure Container Instances podporuje oba typy spravovaných identit Azure: přiřazené uživatelem i přiřazené systémem. Ve skupině kontejnerů můžete povolit identitu přiřazenou systémem, jednu nebo více identit přiřazených uživatelem nebo oba typy identit. Pokud spravované identity pro prostředky Azure ještě nejste se spravovanými identitami, podívejte se na přehled.

Použití spravované identity

Pokud chcete použít spravovanou identitu, musí mít identita udělený přístup k jednomu nebo více prostředkům služby Azure (jako je webová aplikace, trezor klíčů nebo účet úložiště) v předplatném. Použití spravované identity ve spuštěném kontejneru se podobá použití identity na virtuálním počítači Azure. Informace o použití tokenu,rozhraní příkazového řádku Azure CLI nebo Azure PowerShellnajdete v pokynech pro virtuální počítače.

Omezení

  • V současné době nemůžete použít spravovanou identitu ve skupině kontejnerů nasazené do virtuální sítě.
  • Spravovanou identitu nemůžete použít k natažení image z Azure Container Registry při vytváření skupiny kontejnerů. Identita je dostupná jenom v rámci spuštěného kontejneru.

Požadavky

  • V nástroji použijte prostředí Bash Azure Cloud Shell.

    Spuštění služby Cloud Shell v novém okně

  • Pokud tomu dáváte přednost, můžete nainstalovat Azure CLI a spouštět referenční příkazy CLI.

    • Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení jsou popsané v tématu Přihlášení pomocí Azure CLI.

    • Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.

    • Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.

  • Tento článek vyžaduje azure CLI verze 2.0.49 nebo novější. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.

Vytvoření trezoru klíčů Azure

Příklady v tomto článku používají spravovanou identitu ve službě Azure Container Instances pro přístup k tajnému kódu trezoru klíčů Azure.

Nejprve pomocí následujícího příkazu az group createvytvořte skupinu prostředků s názvem myResourceGroup v umístění eastus:

az group create --name myResourceGroup --location eastus

K vytvoření trezoru klíčů použijte příkaz az keyvault create. Nezapomeňte zadat jedinečný název trezoru klíčů.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \ 
  --location eastus

Uložte ukázkový tajný kód do trezoru klíčů pomocí příkazu az keyvault secret set:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Pokračujte následujícími příklady pro přístup k trezoru klíčů pomocí spravované identity přiřazené uživatelem nebo přiřazené systémem v Azure Container Instances.

Příklad 1: Použití identity přiřazené uživatelem pro přístup k trezoru klíčů Azure

Vytvoření identity

Nejprve ve svém předplatném vytvořte identitu pomocí příkazu az identity create. Můžete použít stejnou skupinu prostředků, kterou jste použili k vytvoření trezoru klíčů, nebo použít jinou.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

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

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

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

Udělení přístupu k trezoru klíčů identitě přiřazené uživatelem

Spuštěním následujícího příkazu az keyvault set-policy nastavte zásady přístupu pro trezor klíčů. Následující příklad umožňuje identitě přiřazené uživatelem získat tajné kódy z trezoru klíčů:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --secret-permissions get

Povolení identity přiřazené uživatelem pro skupinu kontejnerů

Spuštěním následujícího příkazu az container create vytvořte instanci kontejneru na základě image azure-cli Microsoftu. Tento příklad obsahuje skupinu s jedním kontejnerem, kterou můžete interaktivně použít ke spuštění Azure CLI pro přístup k dalším službám Azure. V této části se používá jenom základní operační systém. Příklad použití Azure CLI v kontejneru najdete v tématu Povolení identity přiřazené systémem pro skupinu kontejnerů.

Parametr --assign-identity předá vaší spravované identitě přiřazené uživatelem do skupiny. Dlouhotrící příkaz udržuje kontejner spuštěný. Tento příklad používá stejnou skupinu prostředků, kterou jste použili k vytvoření trezoru klíčů, ale můžete zadat jinou.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $resourceID \
  --command-line "tail -f /dev/null"

Během několika sekund byste měli dostat odpověď z rozhraní příkazového řádku Azure oznamující, že nasazení bylo dokončeno. Pomocí příkazu az container show zkontrolujte jeho stav.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Část ve výstupu vypadá podobně jako identity v následujícím příkladu a ukazuje, že identita je nastavená ve skupině kontejnerů. Pod principalID je userAssignedIdentities instanční objekt identity, kterou jste vytvořili v Azure Active Directory:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

Použití identity přiřazené uživatelem k získání tajného klíče z trezoru klíčů

Teď můžete použít spravovanou identitu v rámci spuštěné instance kontejneru pro přístup k trezoru klíčů. Nejprve v kontejneru spusťte prostředí Bash:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

V prostředí Bash v kontejneru spusťte následující příkazy. Pokud chcete získat přístupový token, který Azure Active Directory k ověření ve službě Key Vault, spusťte následující příkaz:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true -s

Výstup:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Pokud chcete přístupový token uložit do proměnné, která se použije v následných příkazech k ověření, spusťte následující příkaz:

token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Teď použijte přístupový token k ověření v trezoru klíčů a čtení tajného klíče. Nezapomeňte nahradit název trezoru klíčů v adrese URL (https: / /mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

Odpověď vypadá podobně jako v následujícím příkladu s tajným kódem. V kódu byste parsování tohoto výstupu získali tajný kód. Potom tajný kód použijte v další operaci pro přístup k jinému prostředku Azure.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

Příklad 2: Použití identity přiřazené systémem pro přístup k trezoru klíčů Azure

Povolení identity přiřazené systémem pro skupinu kontejnerů

Spuštěním následujícího příkazu az container create vytvořte instanci kontejneru na základě image azure-cli Microsoftu. Tento příklad obsahuje skupinu s jedním kontejnerem, kterou můžete interaktivně použít ke spuštění Azure CLI pro přístup k dalším službám Azure.

Parametr bez další hodnoty umožňuje ve skupině --assign-identity spravovanou identitu přiřazenou systémem. Identita je vymezená na skupinu prostředků skupiny kontejnerů. Dlouhotrící příkaz udržuje kontejner spuštěný. V tomto příkladu se používá stejná skupina prostředků, která se používá k vytvoření trezoru klíčů, který je v oboru identity.

# Get the resource ID of the resource group
rgID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $rgID \
  --command-line "tail -f /dev/null"

Během několika sekund byste měli dostat odpověď z rozhraní příkazového řádku Azure oznamující, že nasazení bylo dokončeno. Pomocí příkazu az container show zkontrolujte jeho stav.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Část ve výstupu vypadá podobně jako v následujícím příkladu, která ukazuje, že identita přiřazená systémem je vytvořená v identity Azure Active Directory:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Nastavte proměnnou na hodnotu principalId (ID instančního objektu) identity, která se použije v pozdějších krocích.

spID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Udělení přístupu k trezoru klíčů skupině kontejnerů

Spuštěním následujícího příkazu az keyvault set-policy nastavte zásady přístupu pro trezor klíčů. Následující příklad umožňuje identitě spravované systémem získat tajné kódy z trezoru klíčů:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $spID \
   --secret-permissions get

Použití identity skupiny kontejnerů k získání tajného klíče z trezoru klíčů

Teď můžete spravovanou identitu použít pro přístup k trezoru klíčů v rámci spuštěné instance kontejneru. Nejprve v kontejneru spusťte prostředí Bash:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

V prostředí Bash v kontejneru spusťte následující příkazy. Nejprve se přihlaste k Azure CLI pomocí spravované identity:

az login --identity

Ze spuštěného kontejneru načtěte tajný kód z trezoru klíčů:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

Načte se hodnota tajného klíče:

"Hello Container Instances"

Povolení spravované identity pomocí Resource Manager identity

Pokud chcete povolit spravovanou identitu ve skupině kontejnerů pomocí Resource Manager,nastavte vlastnost objektu identity pomocí objektu Microsoft.ContainerInstance/containerGroups ContainerGroupIdentity . Následující fragmenty kódu ukazují vlastnost identity nakonfigurovanou pro různé scénáře. Viz referenční Resource Manager šablony. Zadejte minimálně apiVersion 2018-10-01 hodnotu .

Identita přiřazená uživatelem

Identita přiřazená uživatelem je ID prostředku formuláře:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Můžete povolit jednu nebo více identit přiřazených uživatelem.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

Identita přiřazená systémem

"identity": {
    "type": "SystemAssigned"
    }

Identity přiřazené systémem a uživatelem

Ve skupině kontejnerů můžete povolit identitu přiřazenou systémem i jednu nebo více identit přiřazených uživatelem.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

Povolení spravované identity pomocí souboru YAML

Pokud chcete povolit spravovanou identitu ve skupině kontejnerů nasazené pomocí souboru YAML,zahrňte následující YAML. Zadejte minimálně apiVersion 2018-10-01 hodnotu .

Identita přiřazená uživatelem

Identita přiřazená uživatelem je ID prostředku formuláře.

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

Můžete povolit jednu nebo více identit přiřazených uživatelem.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

Identita přiřazená systémem

identity:
  type: SystemAssigned

Identity přiřazené systémem a uživatelem

Ve skupině kontejnerů můžete povolit identitu přiřazenou systémem i jednu nebo více identit přiřazených uživatelem.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

Další kroky

V tomto článku jste se dozvěděli o spravovaných identitách v Azure Container Instances a o tom, jak:

  • Povolení identity přiřazené uživatelem nebo přiřazené systémem ve skupině kontejnerů
  • Udělení přístupu identitě k trezoru klíčů Azure
  • Použití spravované identity pro přístup k trezoru klíčů ze spuštěného kontejneru