Använda hanterade identiteter med Azure Container Instances
Använd hanterade identiteter för Azure-resurser för att köra kod i Azure Container Instances som interagerar med andra Azure-tjänster – utan att ha några hemligheter eller autentiseringsuppgifter i koden. Funktionen tillhandahåller en Azure Container Instances-distribution med en automatiskt hanterad identitet i Microsoft Entra-ID.
I den här artikeln lär du dig mer om hanterade identiteter i Azure Container Instances och:
- Aktivera en användartilldelad eller systemtilldelad identitet i en containergrupp
- Ge identiteten åtkomst till ett Azure-nyckelvalv
- Använda den hanterade identiteten för att komma åt ett nyckelvalv från en container som körs
Anpassa exemplen för att aktivera och använda identiteter i Azure Container Instances för att få åtkomst till andra Azure-tjänster. De här exemplen är interaktiva. I praktiken skulle dock dina containeravbildningar köra kod för att komma åt Azure-tjänster.
Varför ska jag använda en hanterad identitet?
Använd en hanterad identitet i en container som körs för att autentisera till alla tjänster som stöder Microsoft Entra-autentisering utan att hantera autentiseringsuppgifter i containerkoden. För tjänster som inte stöder AD-autentisering kan du lagra hemligheter i ett Azure-nyckelvalv och använda den hanterade identiteten för att få åtkomst till nyckelvalvet för att hämta autentiseringsuppgifter. Mer information om hur du använder en hanterad identitet finns i Vad är hanterade identiteter för Azure-resurser?
Aktivera en hanterad identitet
När du skapar en containergrupp aktiverar du en eller flera hanterade identiteter genom att ange en ContainerGroupIdentity-egenskap . Du kan också aktivera eller uppdatera hanterade identiteter när en containergrupp har körts – antingen startas containergruppen om. Om du vill ange identiteterna för en ny eller befintlig containergrupp använder du Azure CLI, en Resource Manager-mall, en YAML-fil eller ett annat Azure-verktyg.
Azure Container Instances stöder båda typerna av hanterade Azure-identiteter: användartilldelade och systemtilldelade. I en containergrupp kan du aktivera en systemtilldelad identitet, en eller flera användartilldelade identiteter eller båda typerna av identiteter. Om du inte känner till hanterade identiteter för Azure-resurser kan du läsa översikten.
Använda en hanterad identitet
Om du vill använda en hanterad identitet måste identiteten beviljas åtkomst till en eller flera Azure-tjänstresurser (till exempel en webbapp, ett nyckelvalv eller ett lagringskonto) i prenumerationen. Att använda en hanterad identitet i en container som körs liknar att använda en identitet på en virtuell Azure-dator (VM). Se vägledningen för virtuella datorer för att använda en token, Azure PowerShell eller Azure CLI eller Azure SDK:er.
Förutsättningar
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Den här artikeln kräver version 2.0.49 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.
Skapa ett Azure-nyckelvalv
Exemplen i den här artikeln använder en hanterad identitet i Azure Container Instances för att få åtkomst till en Azure-nyckelvalvshemlighet.
Skapa först en resursgrupp med namnet myResourceGroup på platsen eastus med följande az group create-kommando:
az group create --name myResourceGroup --location eastus
Använd kommandot az keyvault create för att skapa ett nyckelvalv. Se till att ange ett unikt nyckelvalvnamn.
az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus
Lagra en exempelhemlighet i nyckelvalvet med kommandot az keyvault secret set :
az keyvault secret set \
--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault
Fortsätt med följande exempel för att komma åt nyckelvalvet med antingen en användartilldelad eller systemtilldelad hanterad identitet i Azure Container Instances.
Exempel 1: Använda en användartilldelad identitet för att få åtkomst till Azure Key Vault
Skapa en identitet
Skapa först en identitet i din prenumeration med kommandot az identity create . Du kan använda samma resursgrupp som används för att skapa nyckelvalvet eller använda en annan.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Om du vill använda identiteten i följande steg använder du kommandot az identity show för att lagra identitetens tjänsthuvudnamns-ID och resurs-ID i variabler.
# 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)
Bevilja användartilldelad identitet åtkomst till nyckelvalvet
Kör följande az keyvault set-policy-kommando för att ange en åtkomstprincip i nyckelvalvet. I följande exempel kan den användartilldelade identiteten hämta hemligheter från nyckelvalvet:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Aktivera användartilldelad identitet i en containergrupp
Kör följande az container create-kommando för att skapa en containerinstans baserat på Microsofts azure-cli
avbildning. Det här exemplet innehåller en grupp med en container som du kan använda interaktivt för att köra Azure CLI för att få åtkomst till andra Azure-tjänster. I det här avsnittet används endast basoperativsystemet. Ett exempel på hur du använder Azure CLI i containern finns i Aktivera systemtilldelad identitet i en containergrupp.
Parametern --assign-identity
skickar din användartilldelade hanterade identitet till gruppen. Det långvariga kommandot håller containern igång. I det här exemplet används samma resursgrupp som används för att skapa nyckelvalvet, men du kan ange en annan.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $RESOURCE_ID \
--command-line "tail -f /dev/null"
Inom några sekunder bör du få ett svar från Azure CLI som anger att distributionen har slutförts. Kontrollera dess status med kommandot az container show .
az container show \
--resource-group myResourceGroup \
--name mycontainer
Avsnittet identity
i utdata ser ut ungefär så här, som visar att identiteten har angetts i containergruppen. Under principalID
userAssignedIdentities
är tjänstens huvudnamn för den identitet som du skapade i 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"
}
}
},
[...]
Använda användartilldelad identitet för att hämta hemlighet från nyckelvalvet
Nu kan du använda den hanterade identiteten i containerinstansen som körs för att få åtkomst till nyckelvalvet. Starta först ett bash-gränssnitt i containern:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Kör följande kommandon i bash-gränssnittet i containern. Kör följande kommando för att hämta en åtkomsttoken för att använda Microsoft Entra-ID för att autentisera till nyckelvalvet:
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
Utdata:
{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}
Om du vill lagra åtkomsttoken i en variabel som ska användas i efterföljande kommandon för att autentisera kör du följande kommando:
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')
Använd nu åtkomsttoken för att autentisera till nyckelvalvet och läsa en hemlighet. Se till att ersätta namnet på ditt nyckelvalv i URL:en (https://mykeyvault.vault.azure.net/...):
curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"
Svaret ser ut ungefär så här och visar hemligheten. I koden parsar du utdata för att hämta hemligheten. Använd sedan hemligheten i en efterföljande åtgärd för att komma åt en annan Azure-resurs.
{"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"}}
Exempel 2: Använd en systemtilldelad identitet för att få åtkomst till Azure Key Vault
Aktivera systemtilldelad identitet i en containergrupp
Kör följande az container create-kommando för att skapa en containerinstans baserat på Microsofts azure-cli
avbildning. Det här exemplet innehåller en grupp med en container som du kan använda interaktivt för att köra Azure CLI för att få åtkomst till andra Azure-tjänster.
Parametern --assign-identity
utan ytterligare värde möjliggör en systemtilldelad hanterad identitet i gruppen. Identiteten är begränsad till resursgruppen för containergruppen. Det långvariga kommandot håller containern igång. I det här exemplet används samma resursgrupp som används för att skapa nyckelvalvet, som ingår i identitetens omfång.
# 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"
Inom några sekunder bör du få ett svar från Azure CLI som anger att distributionen har slutförts. Kontrollera dess status med kommandot az container show .
az container show \
--resource-group myResourceGroup \
--name mycontainer
Avsnittet identity
i utdata ser ut ungefär så här och visar att en systemtilldelad identitet skapas i Microsoft Entra-ID:
[...]
"identity": {
"principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]
Ange en variabel till värdet principalId
för (tjänstens huvudnamns-ID) för identiteten som ska användas i senare steg.
SP_ID=$(az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)
Bevilja containergruppåtkomst till nyckelvalvet
Kör följande az keyvault set-policy-kommando för att ange en åtkomstprincip i nyckelvalvet. I följande exempel kan den systemhanterade identiteten hämta hemligheter från nyckelvalvet:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $SP_ID \
--secret-permissions get
Använda containergruppsidentitet för att hämta hemligheten från nyckelvalvet
Nu kan du använda den hanterade identiteten för att komma åt nyckelvalvet i containerinstansen som körs. Starta först ett bash-gränssnitt i containern:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"
Kör följande kommandon i bash-gränssnittet i containern. Logga först in på Azure CLI med hjälp av den hanterade identiteten:
az login --identity
Hämta hemligheten från nyckelvalvet från containern som körs:
az keyvault secret show \
--name SampleSecret \
--vault-name mykeyvault --query value
Värdet för hemligheten hämtas:
"Hello Container Instances"
Aktivera hanterad identitet med hjälp av Resource Manager-mall
Om du vill aktivera en hanterad identitet i en containergrupp med hjälp av en Resource Manager-mall anger du identity
objektets Microsoft.ContainerInstance/containerGroups
egenskap med ett ContainerGroupIdentity
objekt. Följande kodfragment visar egenskapen identity
som konfigurerats för olika scenarier. Se Resource Manager-mallreferensen. Ange minst apiVersion
2018-10-01
.
Användartilldelad identitet
En användartilldelad identitet är ett resurs-ID i formuläret:
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"
Du kan aktivera en eller flera användartilldelade identiteter.
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
Systemtilldelad identitet
"identity": {
"type": "SystemAssigned"
}
System- och användartilldelade identiteter
I en containergrupp kan du aktivera både en systemtilldelad identitet och en eller flera användartilldelade identiteter.
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
Aktivera hanterad identitet med YAML-fil
Om du vill aktivera en hanterad identitet i en containergrupp som distribuerats med hjälp av en YAML-fil inkluderar du följande YAML.
Ange minst apiVersion
2018-10-01
.
Användartilldelad identitet
En användartilldelad identitet är ett resurs-ID för formuläret
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'
Du kan aktivera en eller flera användartilldelade identiteter.
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Systemtilldelad identitet
identity:
type: SystemAssigned
System- och användartilldelade identiteter
I en containergrupp kan du aktivera både en systemtilldelad identitet och en eller flera användartilldelade identiteter.
identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
Hanterad identitet i Windows-containrar
Hanterad identitet i Windows-containergrupper fungerar annorlunda än Linux-containergrupper. För Windows-containrar är metadataservern (169.254.169.254) inte tillgänglig för att hämta Microsoft Entra ID-token. Kunder kan följa ett annat mönster för att hämta åtkomsttoken i Windows-containrar. Mönstret omfattar att skicka tokenbegäran till IDENTITY_ENDPOINT tillsammans med ytterligare information, till exempel huvud-ID och hemlighet enligt nedan. IDENTITY_ENDPOINT och IDENTITY_HEADER matas in som miljövariabel i containern.
curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%
Ett powershell-exempelskript
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"
Az Login-modulen och andra klientbibliotek som är beroende av metadataservern (169.254.169.254) fungerar inte i en Windows-container. Dessutom kommer Windows-containrar i vNet inte att kunna ansluta till slutpunkten. Därför kan en hanterad identitetstoken inte genereras i en virtuell Windows-nätverkscontainer.
Nästa steg
I den här artikeln har du lärt dig om hanterade identiteter i Azure Container Instances och hur du:
- Aktivera en användartilldelad eller systemtilldelad identitet i en containergrupp
- Ge identiteten åtkomst till ett Azure-nyckelvalv
- Använda den hanterade identiteten för att komma åt ett nyckelvalv från en container som körs
Läs mer om hanterade identiteter för Azure-resurser.
Se ett Azure Go SDK-exempel på hur du använder en hanterad identitet för att få åtkomst till ett nyckelvalv från Azure Container Instances.