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 underhålla några hemligheter eller autentiseringsuppgifter i koden. Funktionen tillhandahåller en Azure Container Instances med en automatiskt hanterad identitet i Azure Active Directory.

I den här artikeln får du lära dig mer om hanterade identiteter i Azure Container Instances och:

  • Aktivera en användar tilldelad eller system tilldelad identitet i en containergrupp
  • Bevilja identiteten åtkomst till ett Azure-nyckelvalv
  • Använda den hanterade identiteten för att få åtkomst till ett nyckelvalv från en container som körs

Anpassa exemplen för att aktivera och använda identiteter i Azure Container Instances komma åt andra Azure-tjänster. De här exemplen är interaktiva. Men i praktiken skulle dina containeravbildningar köra kod för att få åtkomst till Azure-tjänster.

Viktigt

Den här funktionen finns för närvarande som en förhandsversion. Förhandsversioner är tillgängliga för dig under förutsättning att du godkänner de kompletterande användningsvillkoren. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA). Hanterade identiteter på Azure Container Instances stöds för närvarande endast med Linux-containrar och ännu inte med Windows containrar.

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 Azure AD-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 egenskapen ContainerGroupIdentity. Du kan också aktivera eller uppdatera hanterade identiteter när en containergrupp körs – endera åtgärden gör att containergruppen startas om. Om du vill ange identiteter i en ny eller befintlig containergrupp använder du Azure CLI, en Resource Manager mall, en YAML-fil eller något annat Azure-verktyg.

Azure Container Instances stöder båda typerna av hanterade Azure-identiteter: användar-tilldelade och system-tilldelade. I en containergrupp kan du aktivera en system tilldelad identitet, en eller flera användar tilldelade identiteter eller båda typerna av identiteter. Om du inte är bekant med hanterade identiteter för Azure-resurser kan du se ö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, Azure CLIeller Azure-SDK:erna.

Begränsningar

  • För närvarande kan du inte använda en hanterad identitet i en containergrupp som distribuerats till ett virtuellt nätverk.
  • Du kan inte använda en hanterad identitet för att hämta en avbildning Azure Container Registry när du skapar en containergrupp. Identiteten är bara tillgänglig i en container som körs.

Förutsättningar

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • 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. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. 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 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 en Azure Container Instances för att få åtkomst till en Hemlighet för Azure Key Vault.

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

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 få åtkomst till nyckelvalvet med hjälp av antingen en användar tilldelad eller system tilldelad hanterad identitet i Azure Container Instances.

Exempel 1: Använda en användar tilldelad identitet för åtkomst till Azure Key Vault

Skapa en identitet

Skapa först en identitet i din prenumeration med hjälp av kommandot az identity create. Du kan använda samma resursgrupp som användes för att skapa nyckelvalvet eller använda ett annat.

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 ID för tjänstens huvudnamn och resurs-ID i variabler.

# 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)

Bevilja användar tilldelad identitet åtkomst till nyckelvalvet

Kör följande az keyvault set-policy-kommando för att ange en åtkomstprincip för nyckelvalvet. I följande exempel kan den användar tilldelade identiteten hämta hemligheter från nyckelvalvet:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --secret-permissions get

Aktivera användar tilldelad 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 det grundläggande operativsystemet. Ett exempel på hur du använder Azure CLI i containern finns i Aktivera system tilldelad identitet på en containergrupp.

Parametern --assign-identity skickar din användar tilldelade hanterade identitet till gruppen. Det långvariga kommandot håller containern igång. I det här exemplet används samma resursgrupp som användes för att skapa nyckelvalvet, men du kan ange ett annat.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $resourceID \
  --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 identiteten har angetts i containergruppen. under principalID är userAssignedIdentities tjänstens huvudnamn för den identitet som du skapade i 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"
      }
    }
  },
[...]

Använda användar tilldelad identitet för att hämta en hemlighet från Key Vault

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. Om du vill hämta en åtkomsttoken som Azure Active Directory för att autentisera till nyckelvalvet kör du följande kommando:

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 -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 autentisering 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. Ersätt namnet på nyckelvalvet i URL:en (https: / /mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

Svaret liknar följande och visar hemligheten. I koden parsar du dessa utdata för att hämta hemligheten. Använd sedan hemligheten i en efterföljande åtgärd för att få åtkomst till 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ända en system tilldelad identitet för åtkomst till Azure Key Vault

Aktivera system tilldelad 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 aktiverar en system tilldelad hanterad identitet i gruppen. Identiteten är begränsad till containergruppens resursgrupp. Det långvariga kommandot håller containern igång. I det här exemplet används samma resursgrupp som användes för att skapa nyckelvalvet, som finns i identitetens omfång.

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

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 en system tilldelad identitet skapas i Azure Active Directory:

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

Ange en variabel till värdet för principalId (id:t för tjänstens huvudnamn) för identiteten, som ska användas i senare steg.

spID=$(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 för nyckelvalvet. I följande exempel kan den system hanterade identiteten hämta hemligheter från nyckelvalvet:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $spID \
   --secret-permissions get

Använda en containergruppsidentitet för att hämta en hemlighet från nyckelvalvet

Nu kan du använda den hanterade identiteten för att få åtkomst till 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 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 Resource Manager mall

Om du vill aktivera en hanterad identitet i en containergrupp Resource Manager en mallanger du identity egenskapen för objektet med ett Microsoft.ContainerInstance/containerGroups 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ändar tilldelad identitet

En användar tilldelad identitet är ett resurs-ID i formuläret:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Du kan aktivera en eller flera användar tilldelade identiteter.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

System tilldelad identitet

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

System- och användar-tilldelade identiteter

I en containergrupp kan du aktivera både en system tilldelad identitet och en eller flera användar tilldelade identiteter.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

Aktivera hanterad identitet med YAML-fil

Om du vill aktivera en hanterad identitet i en containergrupp som distribueras med hjälp av en YAML-filinkluderar du följande YAML. Ange minst apiVersion 2018-10-01 .

Användar tilldelad identitet

En användar tilldelad 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ändar tilldelade identiteter.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

System tilldelad identitet

identity:
  type: SystemAssigned

System- och användar-tilldelade identiteter

I en containergrupp kan du aktivera både en system tilldelad identitet och en eller flera användar tilldelade 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ändar tilldelad eller system tilldelad identitet i en containergrupp
  • Bevilja identiteten åtkomst till ett Azure-nyckelvalv
  • Använda den hanterade identiteten för att få åtkomst till ett nyckelvalv från en container som körs