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

Pomocí spravovaných identit pro prostředky Azure můžete spouštět kód v 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 Azure Container Instances nasazení 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 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 příklady pro povolení a používání identit v Azure Container Instances pro přístup k jiným službám Azure. Tyto příklady jsou interaktivní. V praxi by ale image kontejnerů spouštěly 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 na Azure Container Instances se v současné době podporují jenom u kontejnerů Linuxu a zatím ne s kontejnery Windows.

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í Azure AD bez správy přihlašovacích údajů 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íčů 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ů – buď akce způsobí restartování skupiny kontejnerů. Pokud chcete nastavit identity v nové nebo existující skupině 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 systémově přiřazené. 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, podívejte se na 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 na virtuálním počítači Azure. Pokyny k používání tokenu, Azure PowerShell nebo Azure CLI nebosad Azure SDK najdete v doprovodných materiálech k virtuálním počítačům.

Omezení

  • V současné době nemůžete použít spravovanou identitu ve skupině kontejnerů nasazené do virtuální sítě.

Požadavky

Můžete použít Azure Cloud Shell nebo místní Azure CLI.

  • Azure Cloud Shell s prostředím Bash. Nebo tady spusťte Cloud Shell.

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

  • Místní Azure CLI najdete v tématu instalace Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Dockeru. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.

    • 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í najdete v tématu Přihlášení pomocí Azure CLI.

    • Při prvním použití Azure CLI nainstalujte rozšíření Azure CLI. 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 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 v 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

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žení ukázkového tajného klíče 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 pro přístup k trezoru klíčů pomocí spravované identity přiřazené uživatelem nebo spravované identity přiřazené systémem v 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 vytvořte identitu ve svém předplatném pomocí příkazu az identity create . Ke vytvoření trezoru klíčů můžete použít stejnou skupinu prostředků 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 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 $spID \
    --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 na základě image 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 další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ává spravovanou identitu přiřazenou 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ů, která se používá 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. Zkontrolujte jeho stav příkazem az container show .

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

Oddíl identity ve výstupu vypadá podobně jako v následujícím příkladu, ve kterém je identita nastavená ve skupině kontejnerů. V principalID části userAssignedIdentities je 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"
      }
    }
  },
[...]

Získání tajného kódu z trezoru klíčů pomocí identity přiřazené uživatelem

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ěřování ve službě Azure Active Directory k ověření ve službě Key Vault, spusťte následující příkaz:

client_id="xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx"
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 má použít 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ď pomocí přístupového tokenu ověřte trezor klíčů a přečtěte si tajný klíč. 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 a zobrazuje tajný kód. V kódu byste tento výstup parsovali a získali tajný kód. Potom pomocí tajného kódu v následné operaci získejte 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 na základě image 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 další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ů, 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. Zkontrolujte jeho stav příkazem az container show .

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 Azure Active Directory vytvoří identita přiřazená systémem:

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

Nastavte proměnnou na hodnotu (ID instančního principalId 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 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 $spID \
   --secret-permissions get

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

Spravovanou identitu teď můžete 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

Hodnota tajného kódu se načte:

"Hello Container Instances"

Povolení spravované identity pomocí šablony Resource Manager

Pokud chcete povolit spravovanou identitu ve skupině kontejnerů pomocí šablony Resource Manager, nastavte identity vlastnost Microsoft.ContainerInstance/containerGroups objektu s objektemContainerGroupIdentity. Následující fragmenty kódu ukazují identity vlastnost nakonfigurovanou pro různé scénáře. Viz referenční informace k šabloně Resource Manager. 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": {
            }
        }
    }

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

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 postupu:

  • 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