Så här använder du hanterade identiteter med Azure-tjänster för att ansluta till Azure Cosmos DB för NoSQL
GÄLLER FÖR: NoSQL
Diagram över sekvensen i distributionsguiden, inklusive dessa platser, i ordning: Översikt, Begrepp, Förbereda, Rollbaserad åtkomstkontroll, Nätverk och Referens. Platsen Förbered är för närvarande markerad.
I den här artikeln beskrivs de steg som krävs för att skapa hanterade identiteter som ska användas med ett distribuerat program som är anslutet till Azure Cosmos DB för NoSQL.
Hanterade identiteter är en av många typer av identitetsresurser i Microsoft Entra-ID för program som ska användas vid anslutning till tjänster som stöder Microsoft Entra-autentisering. Hanterade identiteter kan användas i stället för traditionella resursägda autentiseringsuppgifter som nycklar. I Azure är hanterade identiteter ett sätt för dina program att hämta en Microsoft Entra-token för att autentisera till Azure-tjänster utan att du behöver skriva en stor mängd autentiseringskod.
Du kan använda Microsoft Entra för att autentisera till Azure-tjänster, inklusive, men inte begränsat till:
- Azure SQL
- Azure AI
- Azure Cosmos DB
- Azure Storage
- Azure Event Hubs
- Azure Container Registry
Du kan använda hanterade identiteter för att representera det huvudnamn som autentiserar till en Azure-tjänst från andra Azure-tjänster, inklusive, men inte begränsat till:
- Azure Kubernetes Service
- Azure Container Apps
- Azure Virtual Machines
- Azure Functions
- Azure App Service
- Azure Spring Apps
- Azure Service Fabric
Hanterade identiteter möjliggör flera säkra scenarier där olika Azure-tjänster kan ansluta till varandra. Vissa exempel inkluderar:
- Skapa en systemtilldelad hanterad identitet för ett program i Azure Spring Apps för att ansluta till och fråga ett Azure SQL-konto
- Använda en enda användartilldelad hanterad identitet med både Azure Kubernetes Service och Azure Functions för att utfärda begäranden till ett Azure AI-konto
- Använda en hanterad identitet för ett Azure Cosmos DB-konto för att lagra nycklar i Azure Key Vault
Mer information finns i Hanterade identiteter för Azure-resurser.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
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. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. 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.
- Om du väljer att använda Azure PowerShell lokalt:
- Installera den senaste versionen av Az PowerShell-modulen.
- Anslut till ditt Azure-konto med hjälp av cmdleten Connect-AzAccount .
- Om du väljer att använda Azure Cloud Shell:
Skapa en Azure-tjänst med en systemtilldelad hanterad identitet
Skapa en ny Azure-tjänst med en systemtilldelad hanterad identitet. Det här avsnittet skapar en Azure Container Instances-resurs .
Använd
az container create
för att skapa en ny containerinstans. Konfigurera kontot så att det använder en systemtilldelad hanterad identitet med hjälp av parameternassign-identity
.az container create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-container>" \ --image mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled \ --cpu 1 \ --memory 2 \ --assign-identity
Hämta information om den systemtilldelade hanterade identiteten med hjälp av
az container show
och en JMESPath-fråga.az container show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-container>" \ --query "identity"
Granska utdata från kommandot. Den bör innehålla unika identifierare för identiteten och klientorganisationen.
{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned", "userAssignedIdentities": null }
Skapa en ny Bicep-fil för att definiera en ny containerinstans. Ge filen namnet container-instance.bicep. Ange dessa egenskaper för containerinstansen:
Värde name
Använda en parameter med namnet instanceName
location
Ange till resursgruppens plats identity.type
SystemAssigned
properties.osType
Linux
properties.containers[0].name
aspnet-sample
properties.containers[0].properties.image
mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled
properties.containers[0].properties.resources.requests.cpu
1
properties.containers[0].properties.resources.requests.memoryInGB
2
metadata description = 'Create Azure Container Instance resource with system-assigned managed identity.' @description('Name of the Azure Container Instances resource.') param instanceName string resource instance 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = { name: instanceName location: resourceGroup().location identity: { type: 'SystemAssigned' } properties: { osType: 'Linux' containers: [ { name: 'aspnet-sample' properties: { image: 'mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled' resources: { requests: { cpu: 1 memoryInGB: 2 } } } } ] } } output systemAssignedIdentity object = instance.identity
Skapa en ny Bicep-parameterfil med namnet container-instance.
bicepparam
. I den här parameterfilen skapar du ett unikt namn för containerinstansen med hjälp av parameterninstanceName
.using './container-instance.bicep' param instanceName = '<name-of-new-container-instance>'
Distribuera Bicep-mallen med .
az deployment group create
Ange namnet på Bicep-mallen, parameterfilen och Azure-resursgruppen.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "container-instance.bicepparam" \ --template-file "container-instance.bicep"
Granska utdata från distributionen. Utdata innehåller identitetsobjektet från containerinstansen i egenskapen
properties.outputs.systemAssignedIdentity.value
.{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Logga in på Azure Portal (https://portal.azure.com).
Ange Azure Container Instances i fältet global sökning.
I Tjänster väljer du Containerinstanser.
I fönstret Containerinstanser väljer du Skapa.
I fönstret Grundläggande konfigurerar du följande alternativ och väljer sedan Granska + skapa:
Värde Abonnemang Välj din Azure-prenumeration Resursgrupp Skapa en ny resursgrupp eller välj en befintlig resursgrupp Containernamn Ange ett globalt unikt namn Region Välj en Azure-region som stöds för din prenumeration Dricks
Du kan lämna alla ospecificerade alternativ till deras standardvärden.
I fönstret Granska + skapa väntar du på att verifieringen av ditt konto ska slutföras och väljer sedan Skapa.
Portalen navigerar automatiskt till fönstret Distribution . Vänta tills distributionen har slutförts.
När distributionen är klar väljer du Gå till resurs för att navigera till den nya Azure Container Instances-resursen.
I fönstret för den nya containerinstansen väljer du Identitet i avsnittet Inställningar på tjänstmenyn.
I fönstret Identitet aktiverar du den systemtilldelade hanterade identiteten genom att ange alternativet Status till På. Välj sedan Spara och lös eventuella uppmaningar om att genomföra ändringen.
När den systemtilldelade hanterade identiteten är klar granskar du värdet för egenskapen Objekt-ID (huvudnamn). Den här egenskapens värde är den unika identifieraren för identiteten.
Dricks
I det här exemplet är
bbbbbbbb-1111-2222-3333-cccccccccccc
den unika identifieraren för den systemtilldelade hanterade identiteten .
Skapa ett objekt som representerar en container med och
New-AzContainerInstanceObject
lagra den i en variabel med namnet$container
. Använd sedan containerobjektet för att skapa en ny containerinstans medNew-AzContainerGroup
. Konfigurera kontot så att det använder en systemtilldelad hanterad identitet genom att ange parameternIdentityType
tillSystemAssigned
.$parameters = @{ Name = "aspnet-sample" Image = "mcr.microsoft.com/dotnet/samples:aspnetapp-chiseled" RequestCpu = 1 RequestMemoryInGb = 2 } $container = New-AzContainerInstanceObject @parameters $parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-container>" Container = $container OsType = "Linux" Location = "<azure-region>" IdentityType = "SystemAssigned" } New-AzContainerGroup @parameters
Hämta information om den systemtilldelade hanterade identiteten med hjälp av
Get-AzContainerGroup
ochFormat-List
välj endastIdentity
egenskapen.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-container>" } Get-AzContainerGroup @parameters | Format-List Identity
Granska utdata från kommandot. Den bör innehålla unika identifierare för identiteten och klientorganisationen.
Identity : { "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Skapa en användartilldelad hanterad identitet
Skapa en användartilldelad hanterad identitet som kan användas med en eller flera Azure-tjänster på ett bärbart sätt.
Använd
az identity create
för att skapa en ny användartilldelad hanterad identitet i din Azure-resursgrupp.az identity create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-managed-identity>"
Hämta listan över användartilldelade hanterade identiteter i resursgruppen med hjälp av
az identity list
az identity list \ --resource-group "<name-of-existing-resource-group>"
Granska utdata från kommandot. Registrera värdet för
id
fältet eftersom den här fullständigt kvalificerade resursidentifieraren används för att tilldela den användartilldelade hanterade identiteten till din Azure-resurs.{ "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned", "location": "<azure-location>", "name": "msdocs-identity-example-user-assigned", "principalId": "cccccccc-dddd-eeee-3333-444444444444", "resourceGroup": "msdocs-identity-example", "systemData": null, "tags": {}, "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }
Kommentar
I det här exemplet
id
skulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.
Skapa en Bicep-fil för att definiera en användartilldelad hanterad identitet och ge filen namnet user-assigned-managed-identity.bicep. Ange följande minimala egenskaper:
Värde name
Använd en valfri parameter med namnet identityName
och generera ett unikt standardvärdelocation
Ange till resursgruppens plats metadata description = 'Create a user-assigned managed identity.' param identityName string = uniqueString(subscription().id, resourceGroup().id) resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { name: identityName location: resourceGroup().location } output id string = identity.id output name string = identity.name
Distribuera Bicep-mallen med .
az deployment group create
Ange namnet på Bicep-mallen och Azure-resursgruppen.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file "user-assigned-managed-identity.bicep"
Granska utdata från distributionen. Utdata innehåller den unika identifieraren för den hanterade identiteten
properties.outputs.name.value
i egenskapen. Registrera det här värdet som det krävs för att använda när du skapar en ny Azure-resurs senare i den här guiden.{ "type": "String", "value": "msdocs-identity-example-user-assigned" }
Kommentar
I det här exemplet
name.value
skulle varamsdocs-identity-example-user-assigned
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.
Ange Hanterad identitet i fältet global sökning.
I Tjänster väljer du Hanterade identiteter.
I fönstret Containerinstanser väljer du Skapa.
I fönstret Grundläggande konfigurerar du följande alternativ och väljer sedan Granska + skapa:
Värde Abonnemang Välj din Azure-prenumeration Resursgrupp Skapa en ny resursgrupp eller välj en befintlig resursgrupp Region Välj en Azure-region som stöds för din prenumeration Namn Ange ett globalt unikt namn I fönstret Granska + skapa väntar du på att verifieringen av ditt konto ska slutföras och väljer sedan Skapa.
Portalen navigerar automatiskt till fönstret Distribution . Vänta tills distributionen har slutförts.
Vänta tills distributionen av den hanterade identiteten har slutförts.
Skapa en ny användartilldelad hanterad identitet med hjälp av
New-AzUserAssignedIdentity
i din Azure-resursgrupp.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-managed-identity>" Location = "<azure-region>" } New-AzUserAssignedIdentity @parameters
Använd
Get-AzUserAssignedIdentity
för att hämta en lista över användartilldelade hanterade identiteter i resursgruppen.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" } Get-AzUserAssignedIdentity @parameters | Format-List Name, Id
Granska utdata från kommandot. Registrera värdet för
Id
fältet eftersom den här fullständigt kvalificerade resursidentifieraren används för att tilldela den användartilldelade hanterade identiteten till din Azure-resurs.Name : msdocs-identity-example-user-assigned Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
Kommentar
I det här exemplet
Id
skulle värdet vara/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
. I det här exemplet används fiktiva data och identifieraren skulle skilja sig från det här exemplet.
Skapa en Azure-tjänst med en användartilldelad hanterad identitet
Tilldela den tidigare skapade användartilldelade hanterade identiteten till en ny Azure-värdtjänst. Det här avsnittet skapar en Azure App Services-webbappresurs .
Skapa en ny App Service-plan med .
az appservice plan create
az appservice plan create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-plan>"
Tilldela den användartilldelade hanterade identiteten till en ny webbapp med
az webapp create
. Använd fältetid
som registrerades tidigare i den här guiden som värdet för parameternssign-identity
.az webapp create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-web-app>" \ --plan "<name-of-existing-plan>" \ --assign-identity "<resource-id-recorded-earlier>"
Hämta information om alla identiteter som tilldelats det här kontot med hjälp av
az webapp show
och en JMESPath-fråga.az webapp show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-account>" \ --query "identity"
Granska utdata från kommandot. Den bör innehålla både den användartilldelade hanterade identiteten.
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "principalId": "cccccccc-dddd-eeee-3333-444444444444" } } }
Skapa en annan Bicep-fil med namnet app-service-web-app.bicep och definiera en Azure App Service-plan och en webbapp. Ange följande egenskaper för dessa resurser:
Resurs Värde name
Befintlig hanterad identitet Använda en parameter med namnet identityName
name
App Service-plan Använda en parameter med namnet planName
location
App Service-plan Ange till resursgruppens plats name
Webbapp Använda en parameter med namnet webAppName
location
Webbapp Ange till resursgruppens plats identity.type
UserAssigned
identity.userAssignedIdentities.{identity.id}
{}
properties.serverFarmId
plan.id
metadata description = 'Creates an Azure App Service plan and web app with a user-assigned managed identity.' @description('The name of the app service plan.') param planName string @description('The name of the web app.') param webAppName string @description('The name of the user-assigned managed identity.') param identityName string resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' existing = { name: identityName } resource plan 'Microsoft.Web/serverfarms@2023-12-01' = { name: planName location: resourceGroup().location } resource webApp 'Microsoft.Web/sites@2023-12-01' = { name: webAppName location: resourceGroup().location identity: { type: 'UserAssigned' userAssignedIdentities: { '${identity.id}': {} } } properties: { serverFarmId: plan.id } } output userAssignedIdentity object = webApp.identity
Skapa en Bicep-parameterfil med namnet app-service-web-app.
bicepparam
. I den här parameterfilen skapar du ett unikt namn för webbappenplanName
webAppName
och planerar med respektive parametrar. Ange sedan namnet på den användartilldelade hanterade identiteten som värdet för parameternidentityName
.using './app-service-web-app.bicep' param planName = '<name-of-new-app-service-plan>' param webAppName = '<name-of-new-web-app>' param identityName = '<name-of-existing-managed-identity>'
Distribuera Bicep-mallen med .
az deployment group create
Ange namnet på Bicep-mallen, parameterfilen och Azure-resursgruppen.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "app-service-web-app.bicepparam" \ --template-file "app-service-web-app.bicep"
Granska utdata från distributionen. Utdata innehåller identitetsobjektet från containerinstansen i egenskapen
properties.outputs.userAssignedIdentity.value
.{ "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "clientId": "11112222-bbbb-3333-cccc-4444dddd5555", "principalId": "cccccccc-dddd-eeee-3333-444444444444" } } }
Ange webbapp i global sökning fältet.
I Tjänster väljer du App Services.
I fönstret App Services väljer du Skapa och sedan Webbapp.
I fönstret Grundläggande konfigurerar du följande alternativ och väljer sedan Granska + skapa:
Värde Abonnemang Välj din Azure-prenumeration Resursgrupp Skapa en ny resursgrupp eller välj en befintlig resursgrupp Namn Ange ett globalt unikt namn Planera Skapa en ny plan eller välj en befintlig plan I fönstret Granska + skapa väntar du på att verifieringen av ditt konto ska slutföras och väljer sedan Skapa.
Portalen navigerar automatiskt till fönstret Distribution . Vänta tills distributionen har slutförts.
När distributionen är klar väljer du Gå till resurs för att navigera till den nya Azure Container Instances-resursen.
I fönstret för den nya containerinstansen väljer du Identitet i avsnittet Inställningar på tjänstmenyn.
I fönstret Identitet väljer du alternativet Användartilldelad.
Välj Lägg till för att öppna en dialogruta för att tilldela befintliga användartilldelade hanterade identiteter. I dialogrutan väljer du din befintliga användartilldelade hanterade identitet och väljer sedan Lägg till.
Granska slutligen listan över användartilldelade hanterade identiteter som är associerade med din webbapp. Den bör innehålla identitetens namn, resursgruppsnamn och prenumerationsidentifierare.
Använd
New-AzWebApp
för att skapa en ny Azure App Service-webbapp.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-web-app>" Location = "<azure-region>" } New-AzWebApp @parameters
Korrigera den nyligen skapade webbappen
identity.type
för att ange egenskapen till och lägga tillUserAssigned
din befintliga användartilldelade hanterade identitet iidentity.userAssignedIdentities
egenskapen. För att utföra den här uppgiften anger du först detid
fält som registrerats tidigare i den här guiden som värdet föridentityId
skalvariabeln. Skapa sedan ett nyttolastobjekt och konvertera det till JSON. AnvändInvoke-AzRestMethod
slutligen med HTTP-verbetPATCH
för att uppdatera den befintliga webbappen.$identityId = "<resource-id-recorded-earlier>" $payload = @{ identity = @{ type = "UserAssigned" userAssignedIdentities = @{ "$identityId" = @{} } } } | ConvertTo-Json -Depth 3 $parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-web-app>" ResourceProviderName = 'Microsoft.Web' ResourceType = 'sites' ApiVersion = '2023-12-01' Method = 'PATCH' Payload = $payload } Invoke-AzRestMethod @parameters
Hämta information om alla identiteter som tilldelats webbappen med hjälp av
Get-AzWebApp
,Select-Object
ochConvertTo-Json
välj endastIdentity
egenskapen.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-web-app>" } Get-AzWebApp @parameters | Select-Object Identity | ConvertTo-Json -Depth 3
Granska utdata från kommandot. Den bör innehålla unika identifierare för identiteten och klientorganisationen.
{ "Identity": { "Type": "UserAssigned", "TenantId": null, "PrincipalId": null, "UserAssignedIdentities": { "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned": { "PrincipalId": "cccccccc-dddd-eeee-3333-444444444444", "ClientId": "11112222-bbbb-3333-cccc-4444dddd5555" } } } }