Поделиться через


Библиотека разгрузки TLS управляемого модуля HSM Azure

Управляемый HSM Azure предлагает библиотеку разгрузки TLS, которая соответствует PKCS#11 версии 2.40. Управляемый HSM Azure не поддерживает все функции, перечисленные в спецификации PKCS#11; Вместо этого библиотека разгрузки TLS поддерживает ограниченный набор механизмов и функций интерфейса для разгрузки SSL/TLS только с помощью F5 (BigIP) и Nginx, в основном для создания ключей сертификатов сервера TLS и создания цифровых подписей во время подтверждения TLS.

Дополнительные сведения см. в статье о разгрузке библиотеки GitHub для управляемого HSM TLS Azure.

Библиотека разгрузки TLS внутренне использует REST API Azure Key Vault для взаимодействия с управляемым HSM Azure.

Начало работы

Атрибуты PKCS#11

Для правильной интеграции с PKCS#11 создание ключей (с помощью C_GenerateKeyPair) и поиск ключевых объектов (через C_FindObjectsInit/C_FindObjects) требуется решение для хранения атрибутов PKCS#11 в объекте ключа Azure Key Vault. Библиотека разгрузки TLS преобразует эти необходимые атрибуты PKCS#11 в теги Azure Key Vault.

Эти теги атрибутов имеют специальный префикс:

  • p11_pri_{имя атрибута P11} — атрибуты закрытого ключа
  • p11_pub_{имя атрибута P11} — атрибуты открытого ключа

Библиотека разгрузки TLS правильно задает атрибуты ключей Azure Key Vault и времени существования ключей, чтобы служба правильно применяла эти ограничения для созданных ключей. Эти атрибуты также хранятся в виде тегов, таких как другие атрибуты PKCS#11 для поддержки возможностей запросов.

Приложения, использующие библиотеку разгрузки TLS, используют один или несколько атрибутов PKCS#11 для поиска и использования ключевых объектов.

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

Ключи, созданные библиотекой разгрузки TLS, и их теги доступны через REST API Azure Key Vault. Управление этими тегами атрибутов P11 с помощью REST API Azure Key Vault может нарушить приложения библиотеки разгрузки TLS.

Создание ключей

Библиотека разгрузки TLS включает средство создания ключа mhsm_p11_create_key. Запуск средства без аргументов командной строки показывает правильное использование средства.

Для создания ключа требуется субъект-служба, которому назначена роль "Управляемый пользователь шифрования HSM" в области "/ключи".

Средство создания ключа считывает учетные данные субъекта-службы из переменных среды MHSM_CLIENT_ID и MHSM_CLIENT_SECRET:

  • MHSM_CLIENT_ID — необходимо задать идентификатор приложения (клиента) субъекта-службы.
  • MHSM_CLIENT_SECRET — необходимо задать пароль субъекта-службы (секрет клиента)

Для управляемых удостоверений указанные выше переменные среды не требуются.

  • --identity Используйте аргумент для включения управляемого удостоверения с помощью средства mhsm_p11_create_key.
  • Управляемое client_id удостоверение, назначаемое пользователем, должно быть приведено в файле конфигурации MHSM (mhsm-pkcs11.conf). client_id Если управляемое удостоверение, назначаемое пользователем, не предоставлено, оно будет считаться управляемым удостоверением, назначаемое системой.

Средство создания ключа случайным образом создает имя ключа во время создания. Полный идентификатор ключа Azure Key Vault и имя ключа печатаются в консоли для удобства.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully. \
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

Аргумент --label средства создания ключа указывает необходимые CKA_LABEL для созданных закрытых и открытых ключей. Эти атрибуты обычно необходимы для настройки поддерживаемых решений разгрузки TLS (например, параметра конфигурации SSL nginx "ssl_certificate_key").

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

Управление доступом

Библиотека разгрузки TLS преобразует C_FindObjectsInit в вызов REST API Azure Key Vault, который работает в области /key. Служба MHSM требует разрешения на чтение в этой области для пользователя библиотеки разгрузки TLS, чтобы авторизовать операцию поиска ключей, созданных с помощью средства создания ключа.

Дополнительные сведения о локальном RBAC управляемого модуля HSM в Azure см. в следующем разделе:

В следующем разделе описаны различные подходы к реализации управления доступом для субъекта-службы библиотеки разгрузки TLS и управляемого удостоверения.

Субъект-служба разгрузки TLS

Субъект-служба разгрузки TLS используется приложением, использующим библиотеку разгрузки TLS для доступа к ключам, и должно иметь как минимум следующее разрешение с помощью назначений ролей:

  • Разрешение KeyRead для всех ключей в управляемом HSM
  • Разрешение KeySign на ключи, необходимые для разгрузки TLS

Администратор

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

  • Специалист по системе шифрования управляемого устройства HSM
  • Администратор политики управляемого устройства HSM
  • администратор Управляемого устройства HSM;

Субъект-служба создания ключей

Субъект-служба создания ключей используется с средством создания ключей (mhsm_p11_create_key) для создания ключей разгрузки TLS. Этот субъект-служба должен быть назначен роли "Управляемый пользователь шифрования HSM" в области "/ключи".

Azure CLI

Azure CLI можно использовать для выполнения таких задач, как назначение ролей.

Неизрешительный подход

Более простой подход подходит и подходит, если управляемый HSM Azure используется исключительно для разгрузки TLS.

Назначьте роль пользователя шифрования субъекту-службе разгрузки TLS в области "/ключи". Это дает субъекту-службе разгрузки TLS разрешение на создание ключей и их поиск для разгрузки TLS.

az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

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

az keyvault role assignment create --hsm-name ContosoMHSM \
      --role "Managed HSM Crypto User"  \
       --assignee-object-id <object_id>  \
       --assignee-principal-type MSI \
       --scope /keys

Детализированный подход

Детальный подход реализует детальное управление доступом. Для этого требуется два субъекта-службы (субъект-служба разгрузки TLS и субъект-служба создания ключей) и пользователь администратора.

Цель — ограничить разрешения субъекта-службы разгрузки TLS для поддержки минимального необходимого для разгрузки TLS. Пользователь должен иметь разрешение на чтение для других ключей для поддержки функции C_FindObject* библиотеки.

Роль чтения пользователей библиотеки TLS

Первым шагом в реализации детализированного подхода является создание пользовательской роли. Эта операция должна выполняться только один раз.

Пользователь администратора (с управляемым сотрудником по шифрованию HSM или администратором управляемой политики HSM или ролью администратора управляемой политики HSM) создает пользовательское определение роли чтения пользователей библиотеки TLS:

az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
"roleName": "TLS Library User Read Role", \
"description": "Grant Read access to keys", \
"actions": [], \
"notActions": [], \
"dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
"notDataActions": [] \
}'

Создание ключей

Ключи можно создать с помощью субъекта-службы создания ключей с помощью средства создания ключей (mhsm_p11_create_key).

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

Пользователь администратора назначает следующие роли субъекту-службе разгрузки TLS.

  • Назначение роли "Роль чтения пользователя библиотеки TLS" в области "/ключи"
  • Назначьте роль "Управляемый пользователь шифрования HSM" в области "/ключи/{имя ключа}"

В следующем примере имя ключа — p11-6a215dc40c94367a0f97ab452dc216f.

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "TLS Library User Read Role"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys

az keyvault role assignment create --hsm-name ContosoMHSM  \
--role "Managed HSM Crypto User"  \
--assignee TLSOffloadServicePrincipal@contoso.com  \
--scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f

Кэширование подключений

Чтобы повысить производительность вызовов подписи в управляемой службе HSM, библиотека разгрузки TLS кэширует подключения TLS к серверам служб управляемого HSM. По умолчанию библиотека разгрузки TLS кэширует до 20 подключений TLS. Кэширование подключений можно контролировать с помощью файла конфигурации MHSM (mhsm-pkcs11.conf).

"ConnectionCache": {
        "Disable": false, 
        "MaxConnections": 20
}

Отключить

Если это значение равно true, кэширование подключений будет отключено. Он включен по умолчанию.

MaxConnections

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

Запрос подписывания в секунду (RPS) зависит от количества одновременных запросов и количества кэшированных подключений. Указание большего числа или даже ограничения по умолчанию не улучшит число запросов подписывания, если число одновременных запросов подписывания PKCS11 ниже этого ограничения. Максимальное количество одновременных подключений для обеспечения режима ускорения пула HSM уровня "Стандартный" B1 составляет около 30 в зависимости от типа экземпляра. Но следует попробовать использовать разные числа, чтобы определить оптимальное число одновременных подключений.

Ознакомьтесь с документацией по приложению или обратитесь к поставщику приложений, чтобы узнать больше о том, как приложение использует библиотеку PKCS11.

Использование библиотеки разгрузки TLS

Создание ключей

Библиотека разгрузки TLS включает средство создания ключа mhsm_p11_create_key. Запуск средства без аргументов командной строки показывает правильное использование средства.

Для создания ключа требуется субъект-служба, которому назначена роль "Управляемый пользователь шифрования HSM" в области "/ключи".

Средство создания ключа считывает учетные данные субъекта-службы из переменных среды MHSM_CLIENT_ID и MHSM_CLIENT_SECRET.

  • MHSM_CLIENT_ID — необходимо задать идентификатор приложения (клиента) субъекта-службы.
  • MHSM_CLIENT_SECRET — необходимо задать пароль субъекта-службы (секрет клиента)

Средство создания ключа случайным образом создает имя ключа во время создания. Полный идентификатор ключа Azure Key Vault и имя ключа печатаются в консоли для удобства.

MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey

Key is generated successfully.
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f

Аргумент --label средства создания ключа указывает необходимые CKA_LABEL для созданных закрытых и открытых ключей. Эти атрибуты обычно необходимы для настройки поддерживаемых решений разгрузки TLS (например, параметра конфигурации SSL nginx "ssl_certificate_key").

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

Реализация tls без ключей

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

Более простой подход

  1. Создайте субъект-службу для библиотеки разгрузки TLS (например, TLSOffload ServicePrincipal)
  2. Назначьте роль "Управляемый пользователь шифрования HSM" субъекту-службе разгрузки TLS в области "/ключи".
    az keyvault role assignment create --hsm-name ContosoMHSM \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys
    
  3. Создайте ключ с обязательной меткой, выполнив действия, описанные в разделе "Как создать ключи с помощью библиотеки разгрузки TLS".
  4. Настройка СЕРВЕРА TLS для использования библиотеки разгрузки управляемого протокола TLS HSM в качестве библиотеки интерфейса PKCS#11
  5. Настройте TLS-сервер (например, параметр конфигурации SSL nginx "ssl_certificate_key") с меткой ключа и учетными данными субъекта-службы разгрузки TLS.

Детализированный подход

  1. Создайте пользователя администратора (например, TLSOffloadAdminUser) со следующей ролью:
    • Роль "Управляемый сотрудник по шифрованию HSM" в области "/"
  2. Создайте субъект-службу создания ключей (например, TLSOffloadKeyGenServicePrincipal) для создания ключа разгрузки TLS и назначьте следующую роль:
    • Роль "Управляемый пользователь шифрования HSM" в области "/ключи".
  3. Создайте субъект-службу для разгрузки TLS (например, TLSOffload ServicePrincipal)
  4. Пользователь администратора создает следующее определение настраиваемой роли:
    az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
    "roleName": "TLS Library User Read Role", \
    "description": "Grant Read access to keys", \ 
    "actions": [], \
    "notActions": [], \
    "dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
    "notDataActions": []
    }'
    
  5. Создайте ключ с обязательной меткой ниже "Как создать ключи с помощью библиотеки разгрузки TLS". Используйте субъект-службу создания ключей (например, TLSOffloadKeyGenServicePrincipal) при создании ключей. Запишите метку ключа и имя ключа. Например:
    • Метка ключа: tlsKey
    • Имя ключа: p11-6a215dc40c94367a0f97ab452dc216f
  6. Администратор назначает следующие роли субъекту-службе разгрузки TLS.
    • Роль "Роль чтения пользователя библиотеки TLS" в области "/ключи"
    • Роль "Управляемый пользователь шифрования HSM" в области "/ключи/{имя ключа}"
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role " TLS Library User Read Role"  \
    --assignee TLSOffloadServicePrincipal @contoso.com  \
    --scope /keys
    
    az keyvault role assignment create --hsm-name ContosoMHSM  \
    --role "Managed HSM Crypto User"  \
    --assignee TLSOffloadServicePrincipal@contoso.com  \
    --scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f
    
  7. Настройка сервера TLS для использования библиотеки разгрузки TLS управляемого устройства HSM Azure в качестве библиотеки интерфейсов PKCS#11
  8. Настройте TLS-сервер (например, параметр конфигурации SSL nginx "ssl_certificate_key") с меткой ключа и учетными данными субъекта-службы разгрузки TLS.

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