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 ger en Azure Container Instances distribution 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ä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 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). För närvarande stöds hanterade identiteter på Azure Container Instances endast med Linux-containrar och inte ännu 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 en ContainerGroupIdentity-egenskap . Du kan också aktivera eller uppdatera hanterade identiteter när en containergrupp körs – antingen startar åtgärden om containergruppen. Om du vill ange identiteter 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.

Begränsningar

  • För närvarande kan du inte använda en hanterad identitet i en containergrupp som distribueras till ett virtuellt nätverk.

Förutsättningar

Du kan använda antingen Azure Cloud Shell eller ett lokalt Azure CLI.

  • 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 Key Vault-hemlighet.

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 få åtkomst till 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
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ä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 $spID \
    --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ändes 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 $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 principalIDuserAssignedIdentities är 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ä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 Azure Active Directory 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=2016-10-01 -H "Authorization: Bearer $token"

Svaret ser ut ungefär så här 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 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 aktiverar en systemtilldelad 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 och visar att en systemtilldelad identitet skapas i Azure Active Directory:

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

Ange värdet för principalId (tjänstens huvudnamns-ID) 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 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 $spID \
   --secret-permissions get

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

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 egenskapen för Microsoft.ContainerInstance/containerGroups objektet med ett ContainerGroupIdentity objekt. Följande kodfragment visar egenskapen identity som konfigurerats för olika scenarier. Se referensen för Resource Manager mall. 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": "System Assigned, 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