Beheerde identiteiten gebruiken met Azure Container Instances

Gebruik beheerde identiteiten voor Azure-resources om code uit te voeren in Azure Container Instances die communiceren met andere Azure-services, zonder dat u geheimen of referenties in code hoeft te onderhouden. De functie biedt een Azure Container Instances-implementatie met een automatisch beheerde identiteit in Microsoft Entra-id.

In dit artikel vindt u meer informatie over beheerde identiteiten in Azure Container Instances en:

  • Een door de gebruiker toegewezen of door het systeem toegewezen identiteit inschakelen in een containergroep
  • De identiteit toegang verlenen tot een Azure-sleutelkluis
  • De beheerde identiteit gebruiken voor toegang tot een sleutelkluis vanuit een actieve container

Pas de voorbeelden aan om identiteiten in Azure Container Instances in te schakelen en te gebruiken voor toegang tot andere Azure-services. Deze voorbeelden zijn interactief. In de praktijk voeren uw containerinstallatiekopieën echter code uit om toegang te krijgen tot Azure-services.

Waarom een beheerde identiteit gebruiken?

Gebruik een beheerde identiteit in een actieve container om te verifiëren bij elke service die Ondersteuning biedt voor Microsoft Entra-verificatie zonder referenties in uw containercode te beheren. Voor services die ad-verificatie niet ondersteunen, kunt u geheimen opslaan in een Azure-sleutelkluis en de beheerde identiteit gebruiken om toegang te krijgen tot de sleutelkluis om referenties op te halen. Zie Wat zijn beheerde identiteiten voor Azure-resources voor meer informatie over het gebruik van een beheerde identiteit?

Een beheerde identiteit inschakelen

Wanneer u een containergroep maakt, schakelt u een of meer beheerde identiteiten in door een eigenschap ContainerGroupIdentity in te stellen. U kunt beheerde identiteiten ook in- of bijwerken nadat een containergroep wordt uitgevoerd. Een van beide acties zorgt ervoor dat de containergroep opnieuw wordt opgestart. Als u de identiteiten wilt instellen voor een nieuwe of bestaande containergroep, gebruikt u de Azure CLI, een Resource Manager-sjabloon, een YAML-bestand of een ander Azure-hulpprogramma.

Azure Container Instances ondersteunt beide typen beheerde Azure-identiteiten: door de gebruiker toegewezen en door het systeem toegewezen. In een containergroep kunt u een door het systeem toegewezen identiteit, een of meer door de gebruiker toegewezen identiteiten of beide typen identiteiten inschakelen. Als u niet bekend bent met beheerde identiteiten voor Azure-resources, raadpleegt u het overzicht.

Een beheerde identiteit gebruiken

Als u een beheerde identiteit wilt gebruiken, moet de identiteit toegang krijgen tot een of meer Azure-serviceresources (zoals een web-app, een sleutelkluis of een opslagaccount) in het abonnement. Het gebruik van een beheerde identiteit in een actieve container is vergelijkbaar met het gebruik van een identiteit in een Azure-VM. Zie de VM-richtlijnen voor het gebruik van een token, Azure PowerShell of Azure CLI of de Azure SDK's.

Vereisten

  • Voor dit artikel is versie 2.0.49 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Een Azure-sleutelkluis maken

In de voorbeelden in dit artikel wordt een beheerde identiteit in Azure Container Instances gebruikt voor toegang tot een Azure Key Vault-geheim.

Maak eerst een resourcegroep met de naam myResourceGroup in de locatie eastus met behulp van de opdracht az group create:

az group create --name myResourceGroup --location eastus

Gebruik de opdracht az keyvault create om een sleutelkluis te maken. Zorg ervoor dat u een unieke sleutelkluisnaam opgeeft.

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

Sla een voorbeeldgeheim op in de sleutelkluis met behulp van de opdracht az keyvault secret set :

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Ga verder met de volgende voorbeelden voor toegang tot de sleutelkluis met behulp van een door de gebruiker toegewezen of door het systeem toegewezen beheerde identiteit in Azure Container Instances.

Voorbeeld 1: Een door de gebruiker toegewezen identiteit gebruiken voor toegang tot Azure Key Vault

Een identiteit maken

Maak eerst een identiteit in uw abonnement met behulp van de opdracht az identity create . U kunt dezelfde resourcegroep gebruiken die wordt gebruikt om de sleutelkluis te maken of een andere te gebruiken.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Als u de identiteit in de volgende stappen wilt gebruiken, gebruikt u de opdracht az identity show om de service-principal-id en resource-id van de identiteit op te slaan in variabelen.

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

Door de gebruiker toegewezen identiteit toegang verlenen tot de sleutelkluis

Voer de volgende opdracht az keyvault set-policy uit om een toegangsbeleid in te stellen voor de sleutelkluis. In het volgende voorbeeld kan de door de gebruiker toegewezen identiteit geheimen ophalen uit de sleutelkluis:

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

Door de gebruiker toegewezen identiteit inschakelen voor een containergroep

Voer de volgende opdracht az container create uit om een containerinstantie te maken op basis van de installatiekopieën van azure-cli Microsoft. In dit voorbeeld ziet u een groep met één container die u interactief kunt gebruiken om de Azure CLI uit te voeren voor toegang tot andere Azure-services. In deze sectie wordt alleen het basisbesturingssysteem gebruikt. Voor een voorbeeld van het gebruik van de Azure CLI in de container raadpleegt u Door het systeem toegewezen identiteit inschakelen voor een containergroep.

De --assign-identity parameter geeft uw door de gebruiker toegewezen beheerde identiteit door aan de groep. Met de langlopende opdracht blijft de container actief. In dit voorbeeld wordt dezelfde resourcegroep gebruikt voor het maken van de sleutelkluis, maar u kunt een andere groep opgeven.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $RESOURCE_ID \
  --command-line "tail -f /dev/null"

Binnen enkele seconden krijgt u een reactie van de Azure-CLI die aangeeft dat de implementatie is voltooid. Controleer de status ervan met de opdracht az container show .

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

De identity sectie in de uitvoer ziet er ongeveer als volgt uit, waarin wordt weergegeven dat de identiteit is ingesteld in de containergroep. De principalID onderstaande userAssignedIdentities is de service-principal van de identiteit die u hebt gemaakt in 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"
      }
    }
  },
[...]

Door de gebruiker toegewezen identiteit gebruiken om een geheim op te halen uit de sleutelkluis

U kunt nu de beheerde identiteit in het actieve containerexemplaren gebruiken voor toegang tot de sleutelkluis. Start eerst een bash-shell in de container:

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

Voer de volgende opdrachten uit in de bash-shell in de container. Voer de volgende opdracht uit om een toegangstoken op te halen voor het gebruik van Microsoft Entra ID om te verifiëren bij de sleutelkluis:

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

Uitvoer:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Voer de volgende opdracht uit om het toegangstoken op te slaan in een variabele die u in volgende opdrachten wilt gebruiken om te verifiëren:

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

Gebruik nu het toegangstoken om te verifiëren bij de sleutelkluis en een geheim te lezen. Vervang de naam van uw sleutelkluis in de URL (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"

Het antwoord ziet er ongeveer als volgt uit, waarbij het geheim wordt weergegeven. In uw code parseert u deze uitvoer om het geheim te verkrijgen. Gebruik vervolgens het geheim in een volgende bewerking om toegang te krijgen tot een andere 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"}}

Voorbeeld 2: Een door het systeem toegewezen identiteit gebruiken voor toegang tot Azure Key Vault

Door het systeem toegewezen identiteit inschakelen voor een containergroep

Voer de volgende opdracht az container create uit om een containerinstantie te maken op basis van de installatiekopieën van azure-cli Microsoft. In dit voorbeeld ziet u een groep met één container die u interactief kunt gebruiken om de Azure CLI uit te voeren voor toegang tot andere Azure-services.

De --assign-identity parameter zonder extra waarde maakt een door het systeem toegewezen beheerde identiteit in de groep mogelijk. De identiteit is gericht op de resourcegroep van de containergroep. Met de langlopende opdracht blijft de container actief. In dit voorbeeld wordt dezelfde resourcegroep gebruikt voor het maken van de sleutelkluis, die binnen het bereik van de identiteit valt.

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

Binnen enkele seconden krijgt u een reactie van de Azure-CLI die aangeeft dat de implementatie is voltooid. Controleer de status ervan met de opdracht az container show .

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

De identity sectie in de uitvoer ziet er ongeveer als volgt uit, waarin wordt weergegeven dat er een door het systeem toegewezen identiteit wordt gemaakt in Microsoft Entra-id:

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

Stel een variabele in op de waarde van principalId (de service-principal-id) van de identiteit om in latere stappen te gebruiken.

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

Containergroep toegang verlenen tot de sleutelkluis

Voer de volgende opdracht az keyvault set-policy uit om een toegangsbeleid in te stellen voor de sleutelkluis. In het volgende voorbeeld kan de door het systeem beheerde identiteit geheimen ophalen uit de sleutelkluis:

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

Containergroepidentiteit gebruiken om een geheim op te halen uit de sleutelkluis

U kunt nu de beheerde identiteit gebruiken voor toegang tot de sleutelkluis in het actieve containerexemplaren. Start eerst een bash-shell in de container:

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

Voer de volgende opdrachten uit in de bash-shell in de container. Meld u eerst aan bij de Azure CLI met behulp van de beheerde identiteit:

az login --identity

Haal vanuit de actieve container het geheim op uit de sleutelkluis:

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

De waarde van het geheim wordt opgehaald:

"Hello Container Instances"

Beheerde identiteit inschakelen met een Resource Manager-sjabloon

Als u een beheerde identiteit in een containergroep wilt inschakelen met behulp van een Resource Manager-sjabloon, stelt u de identity eigenschap van het Microsoft.ContainerInstance/containerGroups object in met een ContainerGroupIdentity object. In de volgende fragmenten ziet u de identity eigenschap die is geconfigureerd voor verschillende scenario's. Zie de naslaginformatie over de Resource Manager-sjabloon. Geef een minimum apiVersion van 2018-10-01.

Door de gebruiker toegewezen identiteit

Een door de gebruiker toegewezen identiteit is een resource-id van het formulier:

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

U kunt een of meer door de gebruiker toegewezen identiteiten inschakelen.

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

Door het systeem toegewezen identiteit

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

Door het systeem toegewezen identiteiten en door de gebruiker toegewezen identiteiten

In een containergroep kunt u zowel een door het systeem toegewezen identiteit als een of meer door de gebruiker toegewezen identiteiten inschakelen.

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

Beheerde identiteit inschakelen met behulp van YAML-bestand

Als u een beheerde identiteit wilt inschakelen in een containergroep die is geïmplementeerd met behulp van een YAML-bestand, neemt u de volgende YAML op. Geef een minimum apiVersion van 2018-10-01.

Door de gebruiker toegewezen identiteit

Een door de gebruiker toegewezen identiteit is een resource-id van het formulier

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

U kunt een of meer door de gebruiker toegewezen identiteiten inschakelen.

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

Door het systeem toegewezen identiteit

identity:
  type: SystemAssigned

Door het systeem toegewezen identiteiten en door de gebruiker toegewezen identiteiten

In een containergroep kunt u zowel een door het systeem toegewezen identiteit als een of meer door de gebruiker toegewezen identiteiten inschakelen.

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

Volgende stappen

In dit artikel hebt u geleerd over beheerde identiteiten in Azure Container Instances en hoe u het volgende kunt doen:

  • Een door de gebruiker toegewezen of door het systeem toegewezen identiteit inschakelen in een containergroep
  • De identiteit toegang verlenen tot een Azure-sleutelkluis
  • De beheerde identiteit gebruiken voor toegang tot een sleutelkluis vanuit een actieve container