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
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
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í najdete 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 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
Přečtěte si další informace o spravovaných identitách pro prostředky Azure.
Příklad použití spravované identity pro přístup k trezoru klíčů ze služby Azure Container Instances najdete v příkladu sady Azure Go SDK.