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. 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

  • 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 om 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 principalIDuserAssignedIdentities är tjänstens huvudnamn för den identitet som du skapade i Microsoft Entra-ID:

[...]
"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"
      }
    }
  },
[...]

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="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

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 om 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": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "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 apiVersion2018-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 apiVersion2018-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':{}}

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