0Pricing
Azure Fundamentals · Урок

Управляемое удостоверение для аутентификации без паролей

Назначьте VM или App Service управляемое удостоверение, назначенное системой, предоставьте ему доступ RBAC к Key Vault и Blob Storage и удалите секреты из кода приложения.

«Управляемое удостоверение для аутентификации без паролей» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.

Проблемы хранения учётных данных

Традиционно приложения подключаются к службам Azure, таким как Storage или Key Vault, используя строки подключения или ключи API, хранящиеся в конфигурационных файлах или переменных среды. Эти учётные данные могут случайно попасть в систему управления исходным кодом, раскрыться в журналах или быть украдены при взломе. Управляемое удостоверение полностью устраняет необходимость хранить учётные данные в приложениях — вместо этого Azure самостоятельно выдаёт и обновляет токен от имени ресурса, а приложение просто запрашивает у Azure актуальный токен во время выполнения.

Что такое управляемое удостоверение

Управляемое удостоверение — это автоматически управляемый субъект-служба в Microsoft Entra ID, связанный с ресурсом Azure (например, виртуальной машиной, App Service или Function App). Платформа Azure создаёт учётные данные удостоверения и управляет ими, регулярно обновляя их, поэтому Ваш код никогда не работает с паролем или секретом. Приложения, выполняющиеся на ресурсе, обращаются к конечной точке Azure Instance Metadata Service (IMDS) по адресу http://169.254.169.254, чтобы получить короткоживущий токен OAuth, который затем предъявляют службам Azure.

# Get a token from IMDS (runs inside an Azure VM or App Service)
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://storage.azure.com/' \
  -H 'Metadata: true'

Удостоверение, назначаемое системой, и удостоверение, назначаемое пользователем

Существует два типа управляемых удостоверений: назначаемое системой связано с одним ресурсом Azure; оно создаётся при включении этой функции для ресурса и автоматически удаляется вместе с ресурсом. Назначаемое пользователем — это независимое удостоверение Entra ID, которое создаётся отдельно, а затем подключается к одному или нескольким ресурсам Azure. Удостоверения, назначаемые пользователем, полезны, когда нескольким службам (например, нескольким Function App) нужно совместно использовать одно удостоверение и разрешения RBAC, что позволяет избежать дублирования назначений ролей.

# Enable system-assigned managed identity on an App Service
az webapp identity assign \
  --resource-group myRG \
  --name myWebApp

# Create and assign a user-assigned identity
az identity create --name mySharedIdentity --resource-group myRG
az webapp identity assign \
  --resource-group myRG \
  --name myWebApp \
  --identities mySharedIdentity

Предоставление разрешений RBAC

После включения управляемого удостоверения необходимо предоставить ему разрешения RBAC для целевого ресурса Azure. Например, чтобы разрешить App Service читать большие двоичные объекты, назначьте роль Storage Blob Data Reader управляемому удостоверению App Service в учётной записи хранения. Назначения RBAC следуют принципу минимальных привилегий — предоставляйте только минимально необходимые разрешения. Никогда не назначайте управляемому удостоверению роли Owner или Contributor, если в этом нет крайней необходимости.

# Get the managed identity object ID
PRINCIPAL_ID=$(az webapp identity show \
  --resource-group myRG --name myWebApp \
  --query principalId --output tsv)

# Assign Storage Blob Data Reader role
az role assignment create \
  --assignee $PRINCIPAL_ID \
  --role 'Storage Blob Data Reader' \
  --scope '/subscriptions/<sub>/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/mystorageacct'

Использование DefaultAzureCredential в коде

Azure SDK предоставляет класс DefaultAzureCredential, который автоматически последовательно пробует несколько методов аутентификации: переменные среды, удостоверение рабочей нагрузки, управляемое удостоверение, Azure CLI, Visual Studio и другие. Когда приложение выполняется в Azure (App Service, VM, Function App), DefaultAzureCredential автоматически использует управляемое удостоверение без изменений в коде. Локально разработчики проходят аутентификацию через сеанс Azure CLI. Этот единый класс учётных данных работает во всех средах без условной логики.

# Python example using DefaultAzureCredential
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

credential = DefaultAzureCredential()
client = BlobServiceClient(
  account_url='https://mystorageacct.blob.core.windows.net',
  credential=credential
)
blobs = client.get_container_client('mycontainer').list_blobs()
for blob in blobs:
    print(blob.name)

Управляемое удостоверение с Azure Key Vault

Распространённый подход — использовать управляемое удостоверение для доступа к секретам Azure Key Vault во время выполнения. Вместо хранения пароля базы данных в параметрах приложения сохраните его в Key Vault и предоставьте управляемому удостоверению приложения роль Key Vault Secrets User для этого хранилища. При запуске приложение получает секрет из Key Vault с помощью DefaultAzureCredential. Благодаря этому подходу секреты никогда не хранятся в коде, конфигурационных файлах или переменных среды — они существуют только в Key Vault и извлекаются на короткое время.

# Python: Read a Key Vault secret using managed identity
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(
  vault_url='https://mykeyvault.vault.azure.net/',
  credential=credential
)
secret = client.get_secret('DatabasePassword')
print('Secret value retrieved successfully')

Управляемое удостоверение для доступа к Azure SQL

Azure SQL Database поддерживает аутентификацию Entra ID, то есть управляемое удостоверение может проходить аутентификацию в SQL без имени пользователя и пароля. Для включения этой возможности: задайте администратора Entra ID на сервере SQL, затем выполните в целевой базе данных инструкцию CREATE USER для отображаемого имени управляемого удостоверения и предоставьте ему соответствующую роль базы данных. Приложение подключается с помощью DefaultAzureCredential из Azure SDK и токена доступа с областью действия https://database.windows.net/, полностью без пароля.

-- In Azure SQL: create a user for the managed identity
CREATE USER [myWebApp] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [myWebApp];
ALTER ROLE db_datawriter ADD MEMBER [myWebApp];

Управляемое удостоверение для рабочих нагрузок AKS

В Azure Kubernetes Service отдельные модули могут получать токены управляемого удостоверения с помощью удостоверения рабочей нагрузки — преемника AAD Pod Identity. Вы создаёте управляемое удостоверение, назначаемое пользователем, связываете его с издателем OIDC AKS, добавляете аннотацию к учётной записи службы Kubernetes, а веб-перехватчик Azure Workload Identity внедряет необходимые переменные среды, чтобы DefaultAzureCredential модуля мог получить токен. Это расширяет аутентификацию без паролей на контейнеризированные микрослужбы, не требуя хранения секретов в объектах Kubernetes Secrets.

# Create federated identity credential for AKS workload identity
az identity federated-credential create \
  --name myFederatedCredential \
  --identity-name mySharedIdentity \
  --resource-group myRG \
  --issuer $(az aks show --resource-group myRG --name myAKS --query 'oidcIssuerProfile.issuerUrl' -o tsv) \
  --subject 'system:serviceaccount:default:myapp-sa' \
  --audiences 'api://AzureADTokenExchange'

Аудит доступа управляемого удостоверения

Хотя учётные данные управляемого удостоверения невидимы для разработчиков, все события выдачи токенов и доступа к ресурсам записываются в журналы. Журналы входа Entra ID фиксируют каждый запрос токена управляемым удостоверением, включая доступаемый ресурс, время и результат запроса. Журналы действий Azure Storage и журналы аудита Key Vault фиксируют конкретные операции, выполненные с использованием токена. Эти журналы необходимы для проверок безопасности и расследования инцидентов, связанных с управляемыми удостоверениями.

# Query Entra ID sign-in logs for a managed identity
az monitor activity-log list \
  --resource-group myRG \
  --caller myWebApp \
  --start-time 2024-06-01 \
  --output table

Переход со строк подключения

Если Ваше приложение сейчас использует строки подключения или ключи API, перейдите на управляемое удостоверение в три этапа: Шаг 1 — включите управляемое удостоверение для вычислительного ресурса. Шаг 2 — назначьте удостоверению подходящие роли RBAC в каждой целевой службе. Шаг 3 — измените код приложения, чтобы использовать DefaultAzureCredential вместо строки подключения. После проверки миграции удалите строку подключения из конфигурации App Service и Key Vault. В современных приложениях Azure SDK такую миграцию обычно можно выполнить с минимальными изменениями кода.

Краткое описание преимуществ безопасности

Управляемое удостоверение обеспечивает четыре ключевых преимущества безопасности по сравнению с аутентификацией на основе учётных данных: отсутствие хранения учётных данных — нечего красть или случайно добавлять в систему управления исходным кодом; автоматическое обновление — Azure обновляет базовые сертификаты без простоя; разрешения с ограниченной областью действия — удостоверениям предоставляются только необходимые роли RBAC в соответствии с принципом минимальных привилегий; полный журнал аудита — все попытки доступа записываются в Entra ID и журналы аудита используемой службы. Для любой новой интеграции со службой Azure управляемое удостоверение должно быть стандартным подходом к аутентификации.

Быстрая проверка

Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900) из этого урока.

Итоги урока

В этом уроке Вы узнали, что управляемая идентификация устраняет необходимость в сохранённых учётных данных, предоставляя ресурсам Azure автоматически управляемую идентификацию Entra ID; DefaultAzureCredential в Azure SDK прозрачно использует управляемую идентификацию в Azure и учётные данные разработчика локально; а назначения ролей RBAC в целевых службах определяют, к чему может получить доступ идентификация. Далее мы рассмотрим Azure Service Bus для организации обмена сообщениями между компонентами приложения без их жёсткой связанности.

Часто задаваемые вопросы

Урок «Управляемое удостоверение для аутентификации без паролей» бесплатный?

Да — полный текст урока «Управляемое удостоверение для аутентификации без паролей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Управляемое удостоверение для аутентификации без паролей»?

Назначьте VM или App Service управляемое удостоверение, назначенное системой, предоставьте ему доступ RBAC к Key Vault и Blob Storage и удалите секреты из кода приложения. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Azure Fundamentals?

Предыдущий опыт не требуется. Azure Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Управляемое удостоверение для аутентификации без паролей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Azure Fundamentals?

Да. Каждый урок Azure Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Управляемое удостоверение для аутентификации без паролей
  2. Azure Service Bus для слабосвязанного обмена сообщениями
  3. Azure Container Apps
  4. Сквозной рабочий процесс разработчика
← Назад к Azure Fundamentals