Använda hanterade identiteter med Azure Container InstancesHow to use managed identities with Azure Container Instances

Använd hanterade identiteter för Azure-resurser för att köra kod i Azure Container instances som samverkar med andra Azure-tjänster – utan att behålla några hemligheter eller autentiseringsuppgifter i kod.Use managed identities for Azure resources to run code in Azure Container Instances that interacts with other Azure services - without maintaining any secrets or credentials in code. Funktionen tillhandahåller en Azure Container Instances-distribution med en automatiskt hanterad identitet i Azure Active Directory.The feature provides an Azure Container Instances deployment with an automatically managed identity in Azure Active Directory.

I den här artikeln får du lära dig mer om hanterade identiteter i Azure Container Instances och:In this article, you learn more about managed identities in Azure Container Instances and:

  • Aktivera en användardefinierad eller tilldelad identitet i en behållar gruppEnable a user-assigned or system-assigned identity in a container group
  • Ge identitets åtkomst till ett Azure Key VaultGrant the identity access to an Azure key vault
  • Använd den hanterade identiteten för att få åtkomst till ett nyckel valv från en behållare som körsUse the managed identity to access a key vault from a running container

Anpassa exemplen för att aktivera och använda identiteter i Azure Container Instances för att få åtkomst till andra Azure-tjänster.Adapt the examples to enable and use identities in Azure Container Instances to access other Azure services. Dessa exempel är interaktiva.These examples are interactive. Men i praktiken skulle behållar avbildningarna köra kod för att få åtkomst till Azure-tjänster.However, in practice your container images would run code to access Azure services.

Viktigt

Den här funktionen finns för närvarande som en förhandsversion.This feature is currently in preview. Förhandsversioner är tillgängliga för dig under förutsättning att du godkänner de kompletterande användningsvillkoren.Previews are made available to you on the condition that you agree to the supplemental terms of use. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA).Some aspects of this feature may change prior to general availability (GA). För närvarande stöds endast hanterade identiteter på Azure Container Instances med Linux-behållare och ännu inte med Windows-behållare.Currently, managed identities on Azure Container Instances, are only supported with Linux containers and not yet with Windows containers.

Varför ska jag använda en hanterad identitet?Why use a managed identity?

Använd en hanterad identitet i en behållare som körs för att autentisera till en tjänst som stöder Azure AD-autentisering utan att hantera autentiseringsuppgifter i behållar koden.Use a managed identity in a running container to authenticate to any service that supports Azure AD authentication without managing credentials in your container code. För tjänster som inte stöder AD-autentisering kan du lagra hemligheter i ett Azure Key Vault och använda den hanterade identiteten för att få åtkomst till nyckel valvet för att hämta autentiseringsuppgifter.For services that don't support AD authentication, you can store secrets in an Azure key vault and use the managed identity to access the key vault to retrieve credentials. Mer information om hur du använder en hanterad identitet finns i Vad är hanterade identiteter för Azure-resurser?For more information about using a managed identity, see What is managed identities for Azure resources?

Aktivera en hanterad identitetEnable a managed identity

När du skapar en behållar grupp aktiverar du en eller flera hanterade identiteter genom att ange en ContainerGroupIdentity -egenskap.When you create a container group, enable one or more managed identities by setting a ContainerGroupIdentity property. Du kan också aktivera eller uppdatera hanterade identiteter när en behållar grupp kör-båda åtgärderna gör att behållar gruppen startas om.You can also enable or update managed identities after a container group is running - either action causes the container group to restart. Om du vill ange identiteter för en ny eller befintlig behållar grupp använder du Azure CLI, en Resource Manager-mall, en YAML-fil eller ett annat Azure-verktyg.To set the identities on a new or existing container group, use the Azure CLI, a Resource Manager template, a YAML file, or another Azure tool.

Azure Container Instances stöder båda typerna av hanterade Azure-identiteter: användar tilldelning och systemtilldelade.Azure Container Instances supports both types of managed Azure identities: user-assigned and system-assigned. I en behållar grupp kan du aktivera en tilldelad identitet, en eller flera användare som tilldelats identiteter eller båda typerna av identiteter.On a container group, you can enable a system-assigned identity, one or more user-assigned identities, or both types of identities. Om du inte känner till hanterade identiteter för Azure-resurser kan du läsa översikten.If you're unfamiliar with managed identities for Azure resources, see the overview.

Använda en hanterad identitetUse a managed identity

Om du vill använda en hanterad identitet måste identiteten beviljas åtkomst till en eller flera Azure-tjänst resurser (till exempel en webbapp, ett nyckel valv eller ett lagrings konto) i prenumerationen.To use a managed identity, the identity must be granted access to one or more Azure service resources (such as a web app, a key vault, or a storage account) in the subscription. Användning av en hanterad identitet i en pågående behållare liknar användningen av en identitet i en virtuell Azure-dator.Using a managed identity in a running container is similar to using an identity in an Azure VM. Se vägledningen för virtuella datorer för att använda en token, Azure POWERSHELL eller Azure CLIeller Azure SDK: er.See the VM guidance for using a token, Azure PowerShell or Azure CLI, or the Azure SDKs.

BegränsningarLimitations

  • För närvarande kan du inte använda en hanterad identitet i en behållar grupp som distribuerats till ett virtuellt nätverk.Currently you can't use a managed identity in a container group deployed to a virtual network.
  • Du kan inte använda en hanterad identitet för att hämta en avbildning från Azure Container Registry när du skapar en behållar grupp.You can't use a managed identity to pull an image from Azure Container Registry when creating a container group. Identiteten är endast tillgänglig i en behållare som körs.The identity is only available within a running container.

FörutsättningarPrerequisites

  • Använd bash-miljön i Azure Cloud Shell.Use the Bash environment in Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönsterLaunch Cloud Shell in a new window

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.If you prefer, install the Azure CLI to run CLI reference commands.

    • Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login.If you're using a local installation, sign in to the Azure CLI by using the az login command. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen.To finish the authentication process, follow the steps displayed in your terminal. Fler inloggningsalternativ finns i Logga in med Azure CLI.For additional sign-in options, see Sign in with the Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning.When you're prompted, install Azure CLI extensions on first use. Mer information om tillägg finns i Använda tillägg med Azure CLI.For more information about extensions, see Use extensions with the Azure CLI.

    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade.Run az version to find the version and dependent libraries that are installed. Om du vill uppgradera till den senaste versionen kör du az upgrade.To upgrade to the latest version, run az upgrade.

  • Den här artikeln kräver version 2.0.49 eller senare av Azure CLI.This article requires version 2.0.49 or later of the Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.If using Azure Cloud Shell, the latest version is already installed.

Skapa ett Azure Key VaultCreate an Azure key vault

I exemplen i den här artikeln används en hanterad identitet i Azure Container Instances för att få åtkomst till en Azure Key Vault-hemlighet.The examples in this article use a managed identity in Azure Container Instances to access an Azure key vault secret.

Skapa först en resursgrupp med namnet myResourceGroup på platsen eastus med följande az group create-kommando:First, create a resource group named myResourceGroup in the eastus location with the following az group create command:

az group create --name myResourceGroup --location eastus

Använd kommandot AZ-valv för att skapa ett nyckel valv.Use the az keyvault create command to create a key vault. Se till att ange ett unikt nyckel valvs namn.Be sure to specify a unique key vault name.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \ 
  --location eastus

Lagra en exempel hemlighet i nyckel valvet med kommandot AZ Key Vault Secret set :Store a sample secret in the key vault using the az keyvault secret set command:

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 nyckel valvet med antingen en tilldelad eller systemtilldelad hanterad identitet i Azure Container Instances.Continue with the following examples to access the key vault using either a user-assigned or system-assigned managed identity in Azure Container Instances.

Exempel 1: Använd en användardefinierad identitet för åtkomst till Azure Key VaultExample 1: Use a user-assigned identity to access Azure key vault

Skapa en identitetCreate an identity

Skapa först en identitet i din prenumeration med kommandot AZ Identity Create .First create an identity in your subscription using the az identity create command. Du kan använda samma resurs grupp som användes för att skapa nyckel valvet eller använda en annan.You can use the same resource group used to create the key vault, or use a different one.

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 huvud namn-ID och resurs-ID i variabler.To use the identity in the following steps, use the az identity show command to store the identity's service principal ID and resource ID in variables.

# 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ändare tilldelad identitets åtkomst till nyckel valvetGrant user-assigned identity access to the key vault

Kör följande AZ-nyckel valv set-princip kommando för att ange en åtkomst princip i nyckel valvet.Run the following az keyvault set-policy command to set an access policy on the key vault. I följande exempel tillåts den användare-tilldelade identiteten att hämta hemligheter från nyckel valvet:The following example allows the user-assigned identity to get secrets from the key vault:

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

Aktivera användardefinierad identitet i en behållar gruppEnable user-assigned identity on a container group

Kör följande kommando för AZ container Create för att skapa en behållar instans baserad på Microsofts azure-cli avbildning.Run the following az container create command to create a container instance based on Microsoft's azure-cli image. I det här exemplet finns en grupp med en behållare som du kan använda interaktivt för att köra Azure CLI för att få åtkomst till andra Azure-tjänster.This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services. I det här avsnittet används endast det grundläggande operativ systemet.In this section, only the base operating system is used. Ett exempel på hur du använder Azure CLI i behållaren finns i Aktivera systemtilldelad identitet i en behållar grupp.For an example to use the Azure CLI in the container, see Enable system-assigned identity on a container group.

--assign-identityParametern skickar din användarspecifika hanterade identitet till gruppen.The --assign-identity parameter passes your user-assigned managed identity to the group. Kommandot med lång körning håller behållaren igång.The long-running command keeps the container running. I det här exemplet används samma resurs grupp som användes för att skapa nyckel valvet, men du kan ange ett annat.This example uses the same resource group used to create the key vault, but you could specify a different one.

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.Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. Kontrol lera statusen med kommandot AZ container show .Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

identityAvsnittet i utdata ser ut ungefär så här, som visar identiteten i behållar gruppen.The identity section in the output looks similar to the following, showing the identity is set in the container group. principalIDUnder userAssignedIdentities är tjänstens huvud namn för den identitet som du skapade i Azure Active Directory:The principalID under userAssignedIdentities is the service principal of the identity you created in 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änd användardefinierad identitet för att hämta hemlighet från Key VaultUse user-assigned identity to get secret from key vault

Nu kan du använda den hanterade identiteten inom den pågående behållar instansen för att komma åt nyckel valvet.Now you can use the managed identity within the running container instance to access the key vault. Starta först ett bash-gränssnitt i behållaren:First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Kör följande kommandon i bash-gränssnittet i behållaren.Run the following commands in the bash shell in the container. Kör följande kommando för att få en åtkomsttoken att använda Azure Active Directory för att autentisera till Key Vault:To get an access token to use Azure Active Directory to authenticate to key vault, run the following command:

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:Output:

{"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:To store the access token in a variable to use in subsequent commands to authenticate, run the following command:

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 Key Vault och läsa en hemlighet.Now use the access token to authenticate to key vault and read a secret. Se till att du byter namn på nyckel valvet i URL: en (https: / /mykeyvault.Vault.Azure.net/...):Be sure to substitute the name of your key vault in the URL (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, vilket visar hemligheten.The response looks similar to the following, showing the secret. I din kod kan du parsa dessa utdata för att hämta hemligheten.In your code, you would parse this output to obtain the secret. Använd sedan hemligheten i en efterföljande åtgärd för att få åtkomst till en annan Azure-resurs.Then, use the secret in a subsequent operation to access another Azure resource.

{"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 tilldelad identitet för att få åtkomst till Azure Key VaultExample 2: Use a system-assigned identity to access Azure key vault

Aktivera systemtilldelad identitet i en behållar gruppEnable system-assigned identity on a container group

Kör följande kommando för AZ container Create för att skapa en behållar instans baserad på Microsofts azure-cli avbildning.Run the following az container create command to create a container instance based on Microsoft's azure-cli image. I det här exemplet finns en grupp med en behållare som du kan använda interaktivt för att köra Azure CLI för att få åtkomst till andra Azure-tjänster.This example provides a single-container group that you can use interactively to run the Azure CLI to access other Azure services.

--assign-identityParametern utan ytterligare värde aktiverar en systemtilldelad hanterad identitet i gruppen.The --assign-identity parameter with no additional value enables a system-assigned managed identity on the group. Identiteten är begränsad till resurs gruppen för behållar gruppen.The identity is scoped to the resource group of the container group. Kommandot med lång körning håller behållaren igång.The long-running command keeps the container running. I det här exemplet används samma resurs grupp som användes för att skapa nyckel valvet, vilket är i identitets omfånget.This example uses the same resource group used to create the key vault, which is in the scope of the identity.

# 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.Within a few seconds, you should get a response from the Azure CLI indicating that the deployment has completed. Kontrol lera statusen med kommandot AZ container show .Check its status with the az container show command.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

identityAvsnittet i utdata ser ut ungefär så här, vilket visar att en systemtilldelad identitet skapas i Azure Active Directory:The identity section in the output looks similar to the following, showing that a system-assigned identity is created in 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 (tjänstens huvud namns-ID) för identiteten, som ska användas i senare steg.Set a variable to the value of principalId (the service principal ID) of the identity, to use in later steps.

spID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Bevilja åtkomst till behållar gruppen till nyckel valvetGrant container group access to the key vault

Kör följande AZ-nyckel valv set-princip kommando för att ange en åtkomst princip i nyckel valvet.Run the following az keyvault set-policy command to set an access policy on the key vault. I följande exempel kan Systemhanterad identitet Hämta hemligheter från nyckel valvet:The following example allows the system-managed identity to get secrets from the key vault:

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

Använd container grupp identitet för att hämta hemlighet från Key VaultUse container group identity to get secret from key vault

Nu kan du använda den hanterade identiteten för att komma åt nyckel valvet i den pågående behållar instansen.Now you can use the managed identity to access the key vault within the running container instance. Starta först ett bash-gränssnitt i behållaren:First launch a bash shell in the container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Kör följande kommandon i bash-gränssnittet i behållaren.Run the following commands in the bash shell in the container. Logga först in på Azure CLI med hjälp av den hanterade identiteten:First log in to the Azure CLI using the managed identity:

az login --identity

Hämta hemligheten från nyckel valvet från den behållare som körs:From the running container, retrieve the secret from the key vault:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

Hemlighetens värde hämtas:The value of the secret is retrieved:

"Hello Container Instances"

Aktivera hanterad identitet med Resource Manager-mallEnable managed identity using Resource Manager template

Om du vill aktivera en hanterad identitet i en behållar grupp med hjälp av en Resource Manager-mallanger du identity egenskapen för Microsoft.ContainerInstance/containerGroups objektet med ett ContainerGroupIdentity objekt.To enable a managed identity in a container group using a Resource Manager template, set the identity property of the Microsoft.ContainerInstance/containerGroups object with a ContainerGroupIdentity object. Följande kodfragment visar identity egenskapen som kon figurer ATS för olika scenarier.The following snippets show the identity property configured for different scenarios. Se referens för Resource Manager-mall.See the Resource Manager template reference. Ange minst apiVersion 2018-10-01 .Specify a minimum apiVersion of 2018-10-01.

Användare tilldelad identitetUser-assigned identity

En användardefinierad identitet är ett resurs-ID för formuläret:A user-assigned identity is a resource ID of the form:

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

Du kan aktivera en eller flera användare tilldelade identiteter.You can enable one or more user-assigned identities.

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

Systemtilldelad identitetSystem-assigned identity

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

System-och användarspecifika identiteterSystem- and user-assigned identities

Du kan aktivera både en tilldelad identitet och en eller flera användarspecifika identiteter i en behållar grupp.On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

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

Aktivera hanterad identitet med YAML-filEnable managed identity using YAML file

Om du vill aktivera en hanterad identitet i en behållar grupp som distribueras med en yaml-fil, inkluderar du följande yaml.To enable a managed identity in a container group deployed using a YAML file, include the following YAML. Ange minst apiVersion 2018-10-01 .Specify a minimum apiVersion of 2018-10-01.

Användare tilldelad identitetUser-assigned identity

En användardefinierad identitet är ett resurs-ID för formuläretA user-assigned identity is a resource ID of the form

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

Du kan aktivera en eller flera användare tilldelade identiteter.You can enable one or more user-assigned identities.

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

Systemtilldelad identitetSystem-assigned identity

identity:
  type: SystemAssigned

System-och användarspecifika identiteterSystem- and user-assigned identities

Du kan aktivera både en tilldelad identitet och en eller flera användarspecifika identiteter i en behållar grupp.On a container group, you can enable both a system-assigned identity and one or more user-assigned identities.

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

Nästa stegNext steps

I den här artikeln har du lärt dig om hanterade identiteter i Azure Container Instances och hur du:In this article, you learned about managed identities in Azure Container Instances and how to:

  • Aktivera en användardefinierad eller tilldelad identitet i en behållar gruppEnable a user-assigned or system-assigned identity in a container group
  • Ge identitets åtkomst till ett Azure Key VaultGrant the identity access to an Azure key vault
  • Använd den hanterade identiteten för att få åtkomst till ett nyckel valv från en behållare som körsUse the managed identity to access a key vault from a running container