Использование управляемых удостоверений со службами Azure для подключения к Azure Cosmos DB для NoSQL
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Схема последовательности руководства по развертыванию, включая следующие расположения: обзор, основные понятия, подготовка, управление доступом на основе ролей, сеть и справочник. В настоящее время выделено расположение "Подготовка".
В этой статье рассматриваются действия, необходимые для создания управляемых удостоверений для использования с развернутыми приложениями, подключенными к Azure Cosmos DB для NoSQL.
Управляемые удостоверения — это один из многих типов ресурсов удостоверений в идентификаторе Microsoft Entra для приложений, используемых при подключении к службам, поддерживающим проверку подлинности Microsoft Entra. Управляемые удостоверения можно использовать вместо традиционных учетных данных, принадлежащих ресурсам, таких как ключи. В Azure управляемые удостоверения позволяют приложениям получать маркер Microsoft Entra для проверки подлинности в службах Azure без необходимости писать большой объем кода проверки подлинности.
Вы можете использовать Microsoft Entra для проверки подлинности в службах Azure, включая, но не только:
- Azure SQL
- Azure AI
- Azure Cosmos DB
- Хранилище Azure
- Центры событий Azure
- Реестр контейнеров Azure
Управляемые удостоверения можно использовать для представления субъекта, который проходит проверку подлинности в службе Azure из других служб Azure, включая, но не ограничивается:
- Служба Azure Kubernetes
- Приложения-контейнеры Azure
- Виртуальные машины Azure
- Функции Azure
- Служба приложений Azure
- Azure Spring Apps
- Azure Service Fabric
Управляемые удостоверения позволяют выполнять несколько безопасных сценариев, в которых различные службы Azure могут подключаться друг к другу. Некоторыми примерами могут служить:
- Создание управляемого удостоверения, назначаемого системой, для приложения в Azure Spring Apps для подключения и запроса учетной записи SQL Azure
- Использование управляемого удостоверения, назначаемого пользователем, с Служба Azure Kubernetes и Функции Azure для выдачи запросов к учетной записи ИИ Azure
- Использование управляемого удостоверения для учетной записи Azure Cosmos DB для хранения ключей в Azure Key Vault
Дополнительные сведения см. в статье об управляемых удостоверениях для ресурсов Azure.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Если вы решили использовать Azure PowerShell локально:
- Установите последнюю версию модуля Az PowerShell.
- Подключитесь к учетной записи Azure с помощью командлета Connect-AzAccount.
- Если вы решили использовать Azure Cloud Shell:
- Дополнительные сведения см. в статье Общие сведения об Azure Cloud Shell.
Создание службы Azure с управляемым удостоверением, назначаемым системой
Создайте новую службу Azure с управляемым удостоверением, назначаемого системой. В этом разделе создается ресурс Экземпляры контейнеров Azure.
Используется
az container create
для создания нового экземпляра контейнера. Настройте учетную запись для использования управляемого удостоверения, назначаемого системой, с помощьюassign-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
Получите сведения об управляемом удостоверении, назначаемом системой, с помощью
az container show
запроса JMESPath.az container show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-container>" \ --query "identity"
Просмотрите выходные данные команды. Он должен содержать уникальные идентификаторы для удостоверения и клиента.
{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned", "userAssignedIdentities": null }
Создайте файл Bicep для определения нового экземпляра контейнера. Присвойте файлу имя container-instance.bicep. Задайте следующие свойства для экземпляра контейнера:
Значение name
Использование параметра с именем instanceName
location
Установка расположения группы ресурсов 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
Создайте файл параметров Bicep с именем container-instance.
bicepparam
. В этом файле параметров создайте уникальное имя для экземпляра контейнера с помощьюinstanceName
параметра.using './container-instance.bicep' param instanceName = '<name-of-new-container-instance>'
Разверните шаблон Bicep с помощью
az deployment group create
. Укажите имя шаблона Bicep, файла параметров и группы ресурсов Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "container-instance.bicepparam" \ --template-file "container-instance.bicep"
Просмотрите выходные данные развертывания. Выходные данные содержат объект удостоверения из экземпляра контейнера в свойстве
properties.outputs.systemAssignedIdentity.value
.{ "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Войдите на портал Azure (https://portal.azure.com).
Введите Экземпляры контейнеров Azure в глобальной строке поиска.
В службах выберите экземпляры контейнеров.
В области "Экземпляры контейнеров" нажмите кнопку "Создать".
В области "Основные сведения" настройте следующие параметры и нажмите кнопку "Проверить и создать".
Значение Подписка Выберите подписку Azure. Группа ресурсов Создание новой группы ресурсов или выбор существующей группы ресурсов Имя контейнера Укажите глобально уникальное имя Регион Выбор поддерживаемого региона Azure для подписки Совет
Вы можете оставить любые не указанные параметры значениями по умолчанию.
На панели "Проверка и создание" дождитесь успешной проверки учетной записи и нажмите кнопку "Создать".
Портал автоматически переходит в область развертывания . Дождитесь завершения развертывания.
После завершения развертывания выберите "Перейти к ресурсу", чтобы перейти к новому ресурсу Экземпляры контейнеров Azure.
В области нового экземпляра контейнера выберите "Удостоверение " в разделе "Параметры " меню службы.
В области удостоверений включите управляемое удостоверение, назначаемое системой, задав для параметра "Состояние" значение "Вкл". Затем нажмите кнопку "Сохранить " и устранить все запросы, чтобы зафиксировать изменение.
После готовности управляемого удостоверения, назначаемого системой, просмотрите значение свойства идентификатора объекта (субъекта). Это свойство является уникальным идентификатором удостоверения.
Совет
В этом примере снимок экрана: уникальный идентификатор управляемого удостоверения
bbbbbbbb-1111-2222-3333-cccccccccccc
, назначаемого системой.
Создайте объект, представляющий контейнер с помощью
New-AzContainerInstanceObject
и сохраните его в переменной с именем$container
. Затем используйте этот объект контейнера для создания нового экземпляра контейнера сNew-AzContainerGroup
. Настройте учетную запись для использования управляемого удостоверения, назначаемого системой, задав параметруIdentityType
SystemAssigned
значение .$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
Получите сведения об управляемом удостоверении, назначаемом
Identity
системой, иGet-AzContainerGroup
Format-List
выберите только это свойство.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-container>" } Get-AzContainerGroup @parameters | Format-List Identity
Просмотрите выходные данные команды. Он должен содержать уникальные идентификаторы для удостоверения и клиента.
Identity : { "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Создание управляемого удостоверения, назначаемого пользователем
Создайте управляемое удостоверение, назначаемое пользователем, которое можно использовать с одной или несколькими службами Azure переносимо.
Используйте
az identity create
для создания управляемого удостоверения, назначаемого пользователем, в группе ресурсов Azure.az identity create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-managed-identity>"
Получение списка управляемых удостоверений, назначенных пользователем, в группе ресурсов с помощью
az identity list
az identity list \ --resource-group "<name-of-existing-resource-group>"
Просмотрите выходные данные команды. Запишите значение
id
поля, так как этот полный идентификатор ресурса используется для назначения управляемого удостоверения, назначаемого пользователем, ресурсу Azure.{ "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" }
Примечание.
В этом примере
id
значение будет./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера.
Создайте файл Bicep, чтобы определить управляемое удостоверение, назначаемое пользователем, и назовите управляемое пользователем удостоверение.bicep. Задайте следующие минимальные свойства:
Значение name
Использование необязательного параметра с именем identityName
и создание уникального значения по умолчаниюlocation
Установка расположения группы ресурсов 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
Разверните шаблон Bicep с помощью
az deployment group create
. Укажите имя шаблона Bicep и группы ресурсов Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --template-file "user-assigned-managed-identity.bicep"
Просмотрите выходные данные развертывания. Выходные данные содержат уникальный идентификатор управляемого удостоверения в свойстве
properties.outputs.name.value
. Запишите это значение, так как оно необходимо использовать при создании нового ресурса Azure далее в этом руководстве.{ "type": "String", "value": "msdocs-identity-example-user-assigned" }
Примечание.
В этом примере
name.value
будет.msdocs-identity-example-user-assigned
В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера.
Введите управляемое удостоверение в глобальной строке поиска.
В службах выберите управляемые удостоверения.
В области "Экземпляры контейнеров" нажмите кнопку "Создать".
В области "Основные сведения" настройте следующие параметры и нажмите кнопку "Проверить и создать".
Значение Подписка Выберите подписку Azure. Группа ресурсов Создание новой группы ресурсов или выбор существующей группы ресурсов Регион Выбор поддерживаемого региона Azure для подписки Имя Укажите глобально уникальное имя На панели "Проверка и создание" дождитесь успешной проверки учетной записи и нажмите кнопку "Создать".
Портал автоматически переходит в область развертывания . Дождитесь завершения развертывания.
Дождитесь завершения развертывания управляемого удостоверения.
Создайте управляемое удостоверение, назначаемое пользователем, с помощью
New-AzUserAssignedIdentity
группы ресурсов Azure.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-managed-identity>" Location = "<azure-region>" } New-AzUserAssignedIdentity @parameters
Используйте
Get-AzUserAssignedIdentity
для получения списка управляемых удостоверений, назначаемых пользователем, в группе ресурсов.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" } Get-AzUserAssignedIdentity @parameters | Format-List Name, Id
Просмотрите выходные данные команды. Запишите значение
Id
поля, так как этот полный идентификатор ресурса используется для назначения управляемого удостоверения, назначаемого пользователем, ресурсу Azure.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
Примечание.
В этом примере
Id
значение будет./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.ManagedIdentity/userAssignedIdentities/msdocs-identity-example-user-assigned
В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера.
Создание службы Azure с управляемым удостоверением, назначаемое пользователем
Назначьте ранее созданное управляемое удостоверение, назначаемое пользователем, новой службе узлов Azure. В этом разделе создается ресурс веб-приложения служб приложение Azure.
Создание нового плана службы приложений с помощью
az appservice plan create
.az appservice plan create \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-new-plan>"
Назначьте управляемое удостоверение, назначаемое пользователем, новому веб-приложению
az webapp create
.id
Используйте поле, записанное ранее в этом руководстве, в качестве значенияssign-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>"
Получите сведения обо всех удостоверениях, назначенных этой учетной записи, с помощью
az webapp show
запроса JMESPath.az webapp show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-account>" \ --query "identity"
Просмотрите выходные данные команды. Он должен включать управляемое удостоверение, назначаемое пользователем.
{ "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" } } }
Создайте другой файл Bicep с именем app-service-web-app.bicep и определите план службы приложение Azure и веб-приложение. Задайте эти свойства для этих ресурсов:
Ресурс Значение name
Существующее управляемое удостоверение Использование параметра с именем identityName
name
План службы приложений Использование параметра с именем planName
location
План службы приложений Установка расположения группы ресурсов name
Веб-приложение Использование параметра с именем webAppName
location
Веб-приложение Установка расположения группы ресурсов 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
Создайте файл параметров Bicep с именем app-service-web-app.
bicepparam
. В этом файле параметров создайте уникальное имя веб-приложения и запланируйте их с помощьюplanName
параметров иwebAppName
параметров соответственно. Затем укажите имя управляемого удостоверения, назначаемого пользователем, в качестве значенияidentityName
параметра.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>'
Разверните шаблон Bicep с помощью
az deployment group create
. Укажите имя шаблона Bicep, файла параметров и группы ресурсов Azure.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters "app-service-web-app.bicepparam" \ --template-file "app-service-web-app.bicep"
Просмотрите выходные данные развертывания. Выходные данные содержат объект удостоверения из экземпляра контейнера в свойстве
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" } } }
Введите веб-приложение в глобальной строке поиска.
В службах выберите Служба приложений.
В области Служба приложений выберите "Создать" и "Веб-приложение".
В области "Основные сведения" настройте следующие параметры и нажмите кнопку "Проверить и создать".
Значение Подписка Выберите подписку Azure. Группа ресурсов Создание новой группы ресурсов или выбор существующей группы ресурсов Имя Укажите глобально уникальное имя План Создание нового плана или выбор существующего плана На панели "Проверка и создание" дождитесь успешной проверки учетной записи и нажмите кнопку "Создать".
Портал автоматически переходит в область развертывания . Дождитесь завершения развертывания.
После завершения развертывания выберите "Перейти к ресурсу", чтобы перейти к новому ресурсу Экземпляры контейнеров Azure.
В области нового экземпляра контейнера выберите "Удостоверение " в разделе "Параметры " меню службы.
В области удостоверений выберите параметр "Назначаемый пользователем".
Выберите "Добавить ", чтобы открыть диалоговое окно, чтобы назначить существующие управляемые удостоверения, назначенные пользователем. В диалоговом окне выберите существующее управляемое удостоверение, назначаемое пользователем, и нажмите кнопку "Добавить".
Наконец, просмотрите список управляемых удостоверений, назначенных пользователем, связанных с веб-приложением. Он должен содержать имя удостоверения, имя группы ресурсов и идентификатор подписки.
Используется
New-AzWebApp
для создания веб-приложения службы приложение Azure.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-new-web-app>" Location = "<azure-region>" } New-AzWebApp @parameters
Исправьте только что созданное веб-приложение, чтобы задать
identity.type
свойствоUserAssigned
и добавить существующее управляемое удостоверение, назначаемое пользователем, вidentity.userAssignedIdentities
свойство. Чтобы выполнить эту задачу, сначала укажитеid
поле, записанное ранее в этом руководстве, в качестве значения переменнойidentityId
оболочки. Затем создайте объект полезных данных и преобразуйте его в JSON. Наконец, используйтеInvoke-AzRestMethod
командуPATCH
HTTP для обновления существующего веб-приложения.$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
Получите сведения для всех удостоверений, назначенных веб-приложению, с помощью
Get-AzWebApp
Select-Object
, иConvertTo-Json
выберите толькоIdentity
свойство.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-web-app>" } Get-AzWebApp @parameters | Select-Object Identity | ConvertTo-Json -Depth 3
Просмотрите выходные данные команды. Он должен содержать уникальные идентификаторы для удостоверения и клиента.
{ "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" } } } }