Предотвращение авторизации общим ключом для учетной записи Службы хранилища Azure

Каждый защищенный запрос к учетной записи Службы хранилища Azure должен быть авторизован. По умолчанию запросы можно авторизовать с помощью учетных данных Microsoft Entra или с помощью ключа доступа к учетной записи для авторизации общего ключа. Из этих двух типов авторизации идентификатор Microsoft Entra обеспечивает более высокую безопасность и удобство использования по общему ключу и рекомендуется корпорацией Майкрософт. Чтобы клиенты использовали идентификатор Microsoft Entra для авторизации запросов, вы можете запретить запросы к учетной записи хранения, авторизованной с общим ключом.

Если запретить авторизацию с общим ключом для учетной записи хранения, служба хранилища Azure будет отклонять все последующие запросы к этой учетной записи, которые авторизованы с помощью ключей доступа к учетной записи. Только защищённые запросы, авторизованные с помощью Microsoft Entra ID, выполняются успешно. Дополнительные сведения об использовании идентификатора Microsoft Entra см. в статье "Авторизация доступа к данным в служба хранилища Azure".

Свойство AllowSharedKeyAccess учетной записи хранения не задано по умолчанию и не возвращает значение, пока не будет явно задано. Учетная запись хранения разрешает запросы, которые были авторизованы с помощью общего ключа, если это свойство имеет значение null или true.

В этой статье описывается, как использовать платформу DRAG (Detection-Remediation-Audit-Governance) для непрерывного управления авторизацией общего ключа для учетной записи хранения.

Предварительные условия

Прежде чем запретить доступ к общему ключу для любой из учетных записей хранения:

Как запрет использования общего ключа влияет на токены SAS

Когда вы запрещаете доступ к Shared Key для аккаунта хранения, служба хранилища Azure обрабатывает токены SAS в зависимости от типа SAS и сервиса, на который нацелен запрос. В следующей таблице показано, как авторизован каждый тип SAS и как служба хранилища Azure обрабатывает этот SAS, если свойство AllowSharedKeyAccess для аккаунта хранения является ложным.

Тип SAS Тип авторизации Поведение, если AllowSharedKeyAccess имеет значение false
Делегация пользователей SAS (только Хранилище BLOB-объектов) Microsoft Entra ID Запрос разрешен. Microsoft рекомендует по возможности использовать SAS с делегированием пользователей для повышения безопасности.
Сервис SAS Общий ключ Запрос запрещен для всех Служб хранилища Azure.
SAS для учетной записи Общий ключ Запрос запрещен для всех Служб хранилища Azure.

Метрики и журналы Azure в Azure Monitor не различают типы подписей для общего доступа (SAS). И фильтр SAS в обозревателе метрик Azure, и поле SAS в журналах службы хранилища Azure в Azure Monitor сообщают о запросах, авторизованных с помощью любого типа SAS. Однако для разных типов подписей для общего доступа авторизация выполняется по-разному и работают по-другому, если доступ по общему ключу запрещен.

  • Токен SAS службы или токен SAS учетной записи авторизуется с помощью Shared Key и не допускается в запросе к Хранилище BLOB-объектов, если свойство AllowSharedKeyAccess имеет значение false.
  • Пользовательская делегация SAS авторизована с помощью Microsoft Entra ID и допускается при запросе в Хранилище BLOB-объектов, когда свойство AllowSharedKeyAccess установлено как false.

При оценке трафика для вашей учетной записи хранения метрики и журналы, описанные в разделе Определение типа авторизации, используемого клиентскими приложениями, могут включать запросы, выполненные с использованием SAS делегирования пользователей.

Для получения дополнительных сведений о подписях общего доступа, см. статью Предоставление ограниченного доступа к ресурсам хранилища Azure с помощью подписей общего доступа (SAS).

Учитывайте совместимость с другими инструментами и службами Azure

Основное множество служб Azure использует авторизацию по общему ключу для взаимодействия со Службой хранилища Azure. Если вы запретите авторизацию Shared Key для аккаунта хранения, эти сервисы не смогут получить доступ к данным в этой учетной записи, и ваши приложения могут перестать работать.

Некоторые инструменты Azure предоставляют возможность авторизоваться через Microsoft Entra для доступа к хранилищу Azure. В следующей таблице перечислены некоторые популярные инструменты Azure, а также указано, могут ли они использовать Microsoft Entra ID для авторизации запросов к хранилищу Azure.

Инструмент Azure Авторизация Microsoft Entra для хранилища Azure
Портал Azure Поддерживается. Сведения об авторизации с помощью учетной записи Microsoft Entra из портала Azure см. в статье "Выбор способа авторизации доступа к данным BLOB-объектов в портале Azure".
AzCopy Поддерживается для хранилища BLOB-объектов. Сведения об авторизации операций AzCopy см. в разделе Выбор порядка предоставления учетных данных авторизации в документации AzCopy.
Обозреватель службы хранилища Azure Поддерживается для хранилища BLOB-данных, хранилища очередей, хранилища таблиц и хранилища данных Azure Data Lake. Доступ к хранилищу файлов Microsoft Entra ID не поддерживается. Убедитесь, что выбран правильный клиент Microsoft Entra. Дополнительные сведения см. в разделе Начало работы с Обозревателем службы хранилища.
Azure PowerShell Поддерживается. Для получения информации о том, как авторизовать команды PowerShell для операций с BLOB или очередями с помощью Microsoft Entra ID, см. разделы "Запуск команд PowerShell с учетными данными Microsoft Entra для доступа к данным BLOB" или "Запуск команд PowerShell с учетными данными Microsoft Entra для доступа к данным очереди".
Azure CLI Поддерживается. Сведения о том, как авторизовать команды Azure CLI с помощью учетных данных Microsoft Entra для доступа к данным блобов и очередей, см. в руководстве Запуск команд Azure CLI с учетными данными Microsoft Entra для доступа к данным блобов или очередей.
Центр Интернета вещей Azure Поддерживается. Дополнительные сведения см. в разделе Поддержка Центра Интернета вещей для виртуальных сетей.
Azure Cloud Shell Azure Cloud Shell — это интегрированная оболочка на портале Azure. Azure Cloud Shell размещает файлы для хранения в общей папке Azure в учетной записи хранения. Эти файлы становятся недоступными, если авторизация общего ключа запрещена для этого аккаунта хранения. Дополнительные сведения см. в статье Сохранение файлов в Azure Cloud Shell.

Чтобы выполнить команды в Azure Cloud Shell для управления аккаунтами хранения, для которых доступ к Shared Key запрещён, сначала убедитесь, что вам предоставлены необходимые права на эти аккаунты через Azure RBAC. Общие сведения см. в статье Что такое управление доступом на основе ролей в Azure (Azure RBAC)?

Запретить авторизацию общего ключа для использования условного доступа Microsoft Entra

Чтобы защитить учетную запись хранилища Azure с помощью политик условного доступа Microsoft Entra, необходимо отключить авторизацию с общим ключом для учетной записи хранения.

Разрешение доступа к данным файлов или переход рабочих нагрузок на Файлы Azure.

служба хранилища Azure поддерживает авторизацию Microsoft Entra для запросов на Файлы Azure, хранилище BLOB-объектов, хранилище очередей и хранилище таблиц. Однако по умолчанию портал Azure использует авторизацию общего ключа для доступа к общим папкам Azure. Если вы запрещаете авторизацию Shared Key для учетной записи хранилища, не настроенного с соответствующими RBAC-назначениями, запросы на Файлы Azure не работают, и вы не сможете получить доступ к файловым ресурсам Azure в портале Azure.

Чтобы устранить эту проблему, рекомендуется использовать один из трех подходов:

  1. Следуйте этим шагам для авторизации доступа к файлам с помощью вашей учетной записи Microsoft Entra.
  2. Перенесите любые данные Файлы Azure в отдельную учетную запись хранения перед запретом доступа к учетной записи с помощью общего ключа или
  3. Не применяйте этот параметр к учетным записям хранения, поддерживающим рабочие нагрузки Файлы Azure.

Определение учетных записей хранения, разрешающих доступ к общему ключу

Существует два способа идентификации учетных записей хранения, которые разрешают доступ к общему ключу:

Проверка настройки доступа по общему ключу для нескольких учетных записей

Чтобы проверить настройку доступа по общему ключу в наборе учетных записей хранения с оптимальной производительностью, используйте Azure Resource Graph Explorer на портале Azure. Дополнительные сведения об использовании Azure Resource Graph Explorer см. в статье Краткое руководство: выполнение первого запроса по Azure Resource Graph с помощью Azure Resource Graph Explorer.

Выполнение следующего запроса в Resource Graph Explorer возвращает список учетных записей хранения с параметром доступа по общему ключу для каждой учетной записи:

resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| extend allowSharedKeyAccess = parse_json(properties).allowSharedKeyAccess
| project subscriptionId, resourceGroup, name, allowSharedKeyAccess

Настройте политику Azure для доступа к общему ключу в режиме аудита

Политика Azure "Учетные записи хранения должны запрещать доступ по общему ключу" предотвращает возможность для пользователей с соответствующими разрешениями настраивать новые или существующие учетные записи хранения для разрешения авторизации общего ключа. Настройте эту политику в режиме аудита, чтобы определить учетные записи хранения, в которых разрешена авторизация общего ключа. После изменения приложений на использование Microsoft Entra вместо общего ключа для авторизации можно обновить политику, чтобы запретить доступ к общему ключу.

Дополнительные сведения о встроенной политике см. в статье "Учетные записи хранения" должны препятствовать доступу к общему ключу в списке встроенных определений политик.

Назначьте встроенную политику для области ресурсов

Чтобы назначить встроенную политику для соответствующей области на портале Azure, выполните следующие действия:

  1. На портале Azure выполните поиск по слову Политика, чтобы найти панель мониторинга "Политика Azure".

  2. В разделе Создание выберите Задания.

  3. Выберите Назначить политику.

  4. На вкладке Основные сведения страницы Назначение политики в разделе Область укажите область назначения политики. Нажмите кнопку "Дополнительно " (...), чтобы выбрать подписку и необязательную группу ресурсов.

  5. В поле определения политики нажмите кнопку "Дополнительно" (...) и введите общий доступ к ключу в поле поиска. Выберите определение политики с именем учетные записи хранения должны предотвратить доступ по общему ключу.

    Скриншот того, как выбрать встроенную политику, чтобы предотвратить доступ к Shared Key для ваших аккаунтов хранения.

  6. Выберите Просмотреть и создать.

  7. На вкладке "Просмотр и создание" просмотрите назначение политики, а затем нажмите кнопку "Создать ", чтобы назначить определение политики указанной области.

Мониторинг соответствия политике

Чтобы отслеживать учетные записи хранения для соответствия политике доступа к общему ключу, выполните следующие действия.

  1. На панели мониторинга Политика Azure в разделе "Создание" выберите "Назначения".

  2. Найдите и выберите назначение политики, созданное в предыдущем разделе.

  3. Выберите вкладку "Просмотр соответствия".

  4. Все учетные записи хранения в пределах назначения политики, которые не соответствуют требованиям политики, отображаются в отчете о соответствии.

    Скриншот того, как просмотреть отчёт о соблюдении для встроенной политики доступа Shared Key.

Чтобы получить дополнительные сведения о том, почему учетная запись хранения не соответствует требованиям, выберите "Сведения " по причине соответствия требованиям.

Определение типа авторизации, используемой клиентскими приложениями

Чтобы понять, как запрета авторизации Shared Key может повлиять на клиентские приложения, включите логирование и метрики для аккаунта хранения. Затем вы можете проанализировать закономерности запросов на ваш аккаунт со временем, чтобы определить, как авторизованы запросы. Для обнаружения используются два независимых инструмента: метрики Azure Monitor для агрегированных метрик запросов и журналы ресурсов Azure Monitor для получения подробных данных по каждому клиенту. Журналы ресурсов требуют диагностической настройки на аккаунте хранения.

Используйте метрики для определения количества запросов, которые получает учетная запись хранения и которые авторизованы с помощью общего ключа или общей подписи доступа (SAS). Используйте журналы, чтобы определить, какие клиенты отправляют эти запросы.

SAS может быть авторизован с помощью общего ключа или идентификатора Microsoft Entra. Дополнительные сведения об интерпретации запросов, выполняемых с помощью подписей совместного доступа, см. статью Как запрет использования общего ключа влияет на маркеры SAS.

Определение количества и частоты запросов, авторизованных с помощью общего ключа

Для отслеживания авторизации запросов к учетной записи хранения используйте обозреватель метрик Azure на портале Azure. Дополнительные сведения об обозревателе метрик см. в статье "Анализ метрик" с помощью обозревателя метрик Azure Monitor.

Чтобы создать метрику, которая отслеживает запросы, авторизованные с помощью общего ключа или SAS, выполните следующие действия.

  1. Войдите в свою учетную запись хранения на портале Azure. В разделе Мониторинг выберите Метрики.

  2. Появится новое поле метрик:

    Скриншот нового диалога метрик для отслеживания запросов по общим ключам.

    Если это не так, нажмите кнопку "Добавить метрику".

  3. В диалоговом окне Metric (Метрики) укажите следующие значения.

    1. В поле Scope оставьте значение имени учетной записи хранения.
    2. Задайте для пространства имен метрик значение Account (Учетная запись). Эта метрика отражает все запросы к аккаунту хранения.
    3. В поле Metric (Метрика) задайте значение Transactions (Транзакции).
    4. В поле Aggregation (Агрегат) задайте значение Sum (Сумма).

    Новая метрика отображает сумму количества транзакций по счёту хранения за определённый промежуток времени. В результате эта метрика должна выглядеть, как показано на рисунке:

    Снимок экрана: настройка метрики для суммирования транзакций с общим ключом или SAS.

  4. Затем нажмите кнопку Add filter (Добавить фильтр), чтобы создать фильтр по метрике для типа авторизации.

  5. В диалоговом окне фильтра укажите следующие значения.

    1. В поле Property (свойство) задайте значение Authentication (Авторизация).
    2. В поле Operator (Оператор) укажите знак равенства (=).
    3. В поле Values (Значения) выберите Account Key (Ключ учетной записи) и SAS.
  6. В правом верхнем углу выберите диапазон времени, для которого хотите просматривать метрику. Можно также указать, степень детализации агрегирования запросов, задав интервалы от 1 минуты до 1 месяца. Например, чтобы просмотреть запросы за последние 30 дней, агрегированные по дням, задайте в параметре Time range (Диапазон времени) 30 дней, а в параметре Time granularity (Степень детализации времени) — 1 день.

После настройки метрики на графике появляются запросы на ваш аккаунт хранения. На следующем рисунке показаны запросы, которые были авторизованы с помощью общего ключа или с помощью маркера SAS. Запросы агрегируются по дням за последние 30 дней.

Скриншот агрегированных запросов, авторизованных с помощью Shared Key или SAS token в течение 30 дней.

Вы также можете настроить правило генерации оповещений, чтобы получать уведомления, когда к учетной записи хранения будет сделано определенное количество запросов, авторизованных с помощью общего ключа. Дополнительные сведения см. в статье Создание и просмотр оповещений метрик, а также управление ими с помощью Azure Monitor.

Анализ журналов для выявления клиентов, авторизующих запросы с помощью общего ключа или SAS

Журналы Службы хранилища Azure записывают сведения о запросах к учетной записи хранения, в том числе о том, как был авторизован запрос. Вы можете проанализировать журналы, чтобы определить, какие клиенты авторизуют запросы с помощью общего ключа, а какие — с помощью маркера SAS.

Чтобы регистрировать запросы к учетной записи службы хранилища Azure и оценивать, как они авторизованы, вы можете использовать ведение журнала хранилища Azure в Azure Monitor. Дополнительные сведения см. в разделе Мониторинг службы хранилища Microsoft Azure.

Ведение журнала служба хранилища Azure в Azure Monitor поддерживает запросы к журналам для анализа данных журнала. Для запроса к логам используйте Azure Log Analytics workspace. Дополнительные сведения о запросах журналов см. в разделе Руководство: начало работы с запросами Log Analytics.

Создание параметра диагностики на портале Azure

Чтобы регистрировать в журнале данные службы хранилища Azure с помощью Azure Monitor и анализировать их с помощью Azure Log Analytics, необходимо сначала создать параметр диагностики, который указывает, данные каких типов запросов для каких служб хранилища следует регистрировать в журнале. После настройки ведения журнала для учетной записи хранения журналы доступны в рабочей области Log Analytics. Чтобы создать рабочую область, см. Создание рабочей области Log Analytics в портале Azure.

Сведения о создании параметра диагностики в портал Azure см. в статье "Создание параметров диагностики" в Azure Monitor.

Для справки по полям, доступным в журналах службы хранилища Azure в Azure Monitor, см. журналы ресурсов.

Журналы запросов для запросов, выполненных с использованием общего ключа или SAS

Журналы службы хранилища Azure в Azure Monitor включают тип авторизации, который использовался для выполнения запроса к учетной записи хранения. Чтобы получить журналы для запросов, выполненных за последние семь дней, которые были авторизованы с помощью общего ключа или SAS, откройте рабочую область Log Analytics. Затем вставьте следующий запрос в поле создания запроса к журналу и запустите его. Этот запрос отображает десять IP-адресов, с которых чаще всего отправлялись запросы, авторизованные с помощью общего ключа или SAS:

StorageBlobLogs
| where AuthenticationType in ("AccountKey", "SAS") and TimeGenerated > ago(7d)
| summarize count() by CallerIpAddress, UserAgentHeader, AccountName
| top 10 by count_ desc

Вы также можете настроить на основе этого запроса правило генерации оповещений, чтобы получать уведомления о запросах, авторизованных с помощью общего ключа или SAS. Дополнительные сведения см. в статье Создание и просмотр оповещений журналов, а также управление ими с помощью Azure Monitor.

Исправление авторизации с помощью общего ключа

После того как вы проанализируете способы авторизации запросов к учетной записи хранения, можно предпринять действия по запрету доступа с помощью общего ключа. Но сначала необходимо обновить все приложения, использующие авторизацию общего ключа для использования идентификатора Microsoft Entra. Вы можете отслеживать журналы и метрики, как описано в разделе Определение типа авторизации, используемой клиентскими приложениями, чтобы наблюдать за переходом. Дополнительные сведения об использовании идентификатора Microsoft Entra для доступа к данным в учетной записи хранения см. в статье "Авторизация доступа к данным в служба хранилища Azure".

Когда вы будете уверены, что можете безопасно отклонять запросы, авторизованные с помощью общего ключа, задайте для свойства AllowSharedKeyAccess учетной записи хранения значение false.

Предупреждение

Если какие-либо клиенты в настоящее время получают доступ к данным в учетной записи хранения с общим ключом, корпорация Майкрософт рекомендует перенести эти клиенты в идентификатор Microsoft Entra ID, прежде чем запретить доступ к учетной записи хранения с общим ключом.

Привилегии, позволяющие разрешать или запрещать доступ по общему ключу

Чтобы задать свойство AllowSharedKeyAccess для учетной записи хранения, пользователь должен иметь разрешения на создание учетных записей хранения и управление ими. Роли управления доступом на основе ролей Azure (Azure RBAC), предоставляющие эти разрешения, включают в себя действия Microsoft.Storage/storageAccounts/write или Microsoft.Storage/storageAccounts/*. Встроенные роли с этим действием:

Эти роли не предоставляют доступ к данным в учетной записи хранения с помощью идентификатора Microsoft Entra. Однако они включают в себя действие Microsoft.Storage/storageAccounts/listkeys/action, которое предоставляет доступ к ключам доступа к учетной записи. Пользователь с этим разрешением может использовать ключи доступа учетной записи для доступа ко всем данным в учетной записи хранения.

Назначение ролей должно охватывать область учетной записи хранения или выше, чтобы пользователи могли разрешать или запрещать доступ по общему ключу для этой учетной записи хранения. Дополнительные сведения об области роли см. в разделе Общие сведения об области для Azure RBAC.

Рекомендуется назначать эти роли только тем пользователям, которым необходима возможность создавать учетные записи хранения или обновлять их свойства. Используйте принцип наименьших привилегий, чтобы предоставлять пользователям минимальный набор разрешений, необходимый для выполнения их задач. Дополнительные сведения об управлении доступом с помощью Azure RBAC см. в разделе Рекомендации по использованию Azure RBAC.

Примечание.

Роли администратора классической подписки "администратор службы" и "соадминистратор" включают в себя эквивалент роли владельца Azure Resource Manager. Роль владельца включает в себя все действия, поэтому пользователь, которому назначена одна из этих административных ролей, также может создавать учетные записи хранения и управлять ими. Дополнительные сведения см. в статье о ролях Azure, ролях Microsoft Entra и классических ролях администратора подписки.

Отключение авторизации общего ключа

Используя учетную запись с необходимыми правами, отключите авторизацию Shared Key в портале Azure, с помощью PowerShell или Azure CLI.

Чтобы запретить авторизацию с помощью общего ключа для учетной записи хранения на портале Azure, выполните следующие действия.

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. Выберите параметр Configuration (Конфигурация) в разделе Settings (Параметры).

  3. Задайте для параметра Разрешить доступ с ключом к учетной записи хранения значение Отключено.

    Скриншот того, как запретить доступ к Shared Key для аккаунта хранения.

После запрета авторизации с общим ключом запрос к учетной записи хранения с использованием авторизации с общим ключом завершается ошибкой с кодом 403 (Forbidden). служба хранилища Azure выдаёт ошибку, указывающую на то, что авторизация на основе ключа не разрешена на аккаунте хранилища.

Свойство AllowSharedKeyAccess поддерживается только для учетных записей хранения, использующих модель развертывания с помощью Azure Resource Manager. Сведения о том, какие учетные записи хранения используют модель развертывания Azure Resource Manager, см. в разделе Типы учетных записей хранения.

Чтобы убедиться, что авторизация по общему ключу отключена, см. раздел «Проверьте, не разрешен ли доступ к общему ключу».

Проверка запрета доступа по общему ключу

Свойство возвращает allowSharedKeyAccess только после того, как вы отключите авторизацию с помощью общего ключа для учетной записи хранения. Чтобы убедиться, что авторизация Shared Key больше не разрешена, выполните запрос в настройки аккаунта служба хранилища Azure, используя следующую команду. Замените значения заполнителей в скобках своими собственными значениями.

az storage account show \
    --name <storage-account-name> \
    --resource-group <resource-group-name> \
    --query "allowSharedKeyAccess"

Команда возвращает значение false , если авторизация общего ключа запрещена для учетной записи хранения.

Примечание.

Анонимные запросы не требуют авторизации и выполняются, если вы настроили учётную запись хранения и контейнер для анонимного доступа для чтения. Дополнительные сведения см. в разделе "Настройка анонимного доступа на чтение" для контейнеров и блобов.

Отслеживать политику Azure на соответствие

После запрета доступа к общему ключу в нужных учетных записях хранения продолжайте отслеживать политику, созданную ранее для обеспечения постоянного соответствия. В зависимости от результатов мониторинга при необходимости выполните соответствующие действия, включая изменение области политики, запрет доступа к общему ключу для дополнительных учетных записей или разрешение учетных записей, в которых требуется больше времени для исправления.

Обновите Политика Azure, чтобы запретить доступ к общему ключу

Чтобы начать применять назначение политики Azure, которое вы ранее создали для политики Учетные записи хранилища должны предотвращать доступ по общему ключу, измените эффект назначения политики на Отклонить, чтобы предотвратить разрешение доступа по общему ключу в учетных записях хранилища. Чтобы изменить эффект политики, выполните следующие действия.

  1. На панели мониторинга Политика Azure найдите и выберите ранее созданное назначение политики.

  2. Выберите Изменить назначение.

  3. Перейдите на вкладку "Параметры ".

  4. Снимите флажок "Только показать параметры, которые нуждаются в вводе или проверке ".

  5. В раскрывающемся списке Эффект измените Аудит на Запрет, а затем нажмите Просмотр и сохранение.

  6. На вкладке "Рецензирование и сохранение " просмотрите изменения, а затем нажмите кнопку "Сохранить".

Примечание.

Чтобы изменения политики вступают в силу, может потребоваться до 30 минут.

Следующие шаги