Sdílet prostřednictvím


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

Použití spravovaných identit pro prostředky Azure ke spouštění kódu ve službě Azure Container Instances, která komunikuje s jinými službami Azure – bez zachování tajných kódů nebo přihlašovacích údajů v kódu. Tato funkce poskytuje nasazení služby Azure Container Instances s automaticky spravovanou identitou v Microsoft Entra ID.

V tomto článku se dozvíte více o spravovaných identitách ve službě Azure Container Instances a:

  • Povolení identity přiřazené uživatelem nebo systémem ve skupině kontejnerů
  • Udělení přístupu k identitě 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 pro povolení a používání identit ve službě Azure Container Instances pro přístup k dalším službám Azure. Tyto příklady jsou interaktivní. V praxi by však image kontejnerů spouštěly kód pro přístup ke službám Azure.

Proč používat spravovanou identitu?

Spravovanou identitu ve spuštěném kontejneru použijte k ověření ve všech službách, které podporují ověřování Microsoft Entra bez správy přihlašovacích údajů v kódu kontejneru. Pro služby, které nepodporují ověřování AD, můžete tajné kódy uložit do trezoru klíčů Azure a použít spravovanou identitu pro přístup k trezoru klíčů k načtení přihlašovacích údajů. 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 v nové nebo existující skupině kontejnerů, použijte Azure CLI, šablonu Resource Manageru, soubor YAML nebo jiný nástroj Azure.

Azure Container Instances podporuje oba typy spravovaných identit Azure: přiřazené uživatelem a 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 neznáte spravované identity pro prostředky Azure, prohlédni si přehled.

Použití spravované identity

Pokud chcete použít spravovanou identitu, musí být identitě udělen přístup k jednomu nebo několika 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 ve virtuálním počítači Azure. Pokyny k používání tokenu, Azure PowerShellu nebo Azure CLI nebo sad Azure SDK najdete v doprovodných materiálech k virtuálním počítačům.

Požadavky

  • Tento článek vyžaduje verzi 2.0.49 nebo novější azure CLI. 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 klíči 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

Pomocí příkazu az keyvault create vytvořte trezor klíčů. Nezapomeňte zadat jedinečný název trezoru klíčů.

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

Uložte ukázkový tajný klíč 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 v následujících příkladech a získejte přístup k trezoru klíčů pomocí spravované identity přiřazené uživatelem nebo systémem přiřazené ve službě Azure Container Instances.

Příklad 1: Použití identity přiřazené uživatelem pro přístup ke službě Azure Key Vault

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 použít identitu 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
SP_ID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

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

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

Spuštěním následujícího příkazu az keyvault set-policy nastavte zásadu přístupu v trezoru 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 $SP_ID \
    --secret-permissions get

Povolení identity přiřazené uživatelem ve skupině kontejnerů

Spuštěním následujícího příkazu az container create vytvořte instanci kontejneru založenou na imagi Microsoftu azure-cli . Tento příklad poskytuje skupinu s jedním kontejnerem, kterou můžete interaktivně použít ke spuštění Azure CLI pro přístup k jiným službám Azure. V této části se používá pouze 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 ve skupině kontejnerů.

Parametr --assign-identity předá vaší spravované identitě přiřazené uživatelem do skupiny. Dlouhotrvající příkaz udržuje kontejner spuštěný. V tomto příkladu se používá stejná skupina prostředků jako 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 $RESOURCE_ID \
  --command-line "tail -f /dev/null"

Během několika sekund byste měli získat odpověď z Azure CLI, která indikuje, že nasazení bylo dokončeno. Pomocí příkazu az container show zkontrolujte jeho stav.

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

Oddíl identity ve výstupu vypadá podobně jako v následujícím příkladu, který ukazuje, že identita je nastavená ve skupině kontejnerů. V principalID části userAssignedIdentities je instanční objekt identity, kterou jste vytvořili v MICROSOFT Entra ID:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
      }
    }
  },
[...]

Použití identity přiřazené uživatelem k získání tajného kódu 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 pro ověření v trezoru klíčů pomocí ID Microsoft Entra, spusťte následující příkaz:

client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -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 kódu. 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=7.4 -H "Authorization: Bearer $TOKEN"

Odpověď vypadá podobně jako v následujícím příkladu a zobrazuje tajný kód. V kódu byste tento výstup parsoval za účelem získání tajného kódu. Pak tajný klíč v následné operaci použijte 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 ke službě Azure Key Vault

Povolení identity přiřazené systémem ve skupině kontejnerů

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

Parametr --assign-identity bez další hodnoty umožňuje spravované identitě přiřazené systémem ve skupině. Identita je vymezena na skupinu prostředků skupiny kontejnerů. Dlouhotrvající příkaz udržuje kontejner spuštěný. Tento příklad používá stejnou skupinu prostředků jako k vytvoření trezoru klíčů, který je v oboru identity.

# Get the resource ID of the resource group
RG_ID=$(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 $RG_ID \
  --command-line "tail -f /dev/null"

Během několika sekund byste měli získat odpověď z Azure CLI, která indikuje, že nasazení bylo dokončeno. Pomocí příkazu az container show zkontrolujte jeho stav.

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

Oddíl identity ve výstupu vypadá podobně jako v následujícím příkladu, který ukazuje, že se v Microsoft Entra ID vytvoří identita přiřazená systémem:

[...]
"identity": {
    "principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "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.

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

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

Spuštěním následujícího příkazu az keyvault set-policy nastavte zásadu přístupu v trezoru 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 $SP_ID \
   --secret-permissions get

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

Teď můžete použít spravovanou identitu 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ý klíč z trezoru klíčů:

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

Načte se hodnota tajného kódu:

"Hello Container Instances"

Povolení spravované identity pomocí šablony Resource Manageru

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

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": {
            }
        }
    }

Systémem přiřazená identita

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

Systémové a uživatelem přiřazené identity

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": {
            }
        }
    }
...

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 hodnotu 2018-10-01.

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':{}}

Systémem přiřazená identita

identity:
  type: SystemAssigned

Systémové a uživatelem přiřazené identity

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':{}}

Spravovaná identita v kontejnerech Windows

Spravovaná identita ve skupinách kontejnerů Windows funguje jinak než skupiny kontejnerů Linuxu. Pro kontejnery Windows není server metadat (169.254.169.254) k dispozici pro získání tokenu MICROSOFT Entra ID. Zákazníci můžou použít jiný vzor pro získání přístupového tokenu v kontejnerech Windows. Vzor zahrnuje odeslání požadavku na token do IDENTITY_ENDPOINT spolu s dalšími informacemi, jako je ID objektu zabezpečení a tajný klíč, jak je znázorněno níže. Do kontejneru se vloží IDENTITY_ENDPOINT a IDENTITY_HEADER jako proměnná prostředí.

curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%

Ukázkový skript PowerShellu

identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "b2ee9347-623c-4794-85af-2d5261356f67"
 
Invoke-RestMethod -Uri "$identityEndpoint" `
    -Method Get `
    -Headers @{secret = $identityHeader} `
    -Body @{resource = $resource; principalId = $principalId} `
    -ContentType "application/x-www-form-urlencoded"

Modul Az Login a další klientské knihovny, které závisí na serveru metadat (169.254.169.254), nebudou fungovat v kontejneru Windows. Kontejnery Windows ve virtuální síti se navíc nebudou moct připojit ke koncovému bodu. token spravované identity proto nejde vygenerovat v kontejneru virtuální sítě s Windows.

Další kroky

V tomto článku jste se seznámili se spravovanými identitami ve službě Azure Container Instances a s postupy:

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