Управление секретами в Контейнерах приложений Azure
Статья
Контейнеры приложений Azure позволяют приложению безопасно хранить конфиденциальные значения конфигурации. После определения секретов на уровне приложения защищенные значения доступны для редакций в приложениях контейнеров. Кроме того, можно ссылаться на защищенные значения внутри правил масштабирования. Сведения об использовании секретов с Dapr см. в статье об интеграции Dapr.
Секреты ограничены приложением за пределами какой-либо конкретной редакции приложения.
Новые редакции не создаются путем добавления, удаления или изменения секретов.
Каждая редакция приложения может ссылаться на один или несколько секретов.
Несколько редакций могут ссылаться на одни и те же секреты.
Обновленный или удаленный секрет не влияет на существующие редакции в приложении. При обновлении или удалении секрета можно ответить на изменения одним из двух способов:
Развертывание новой редакции.
Перезапуск существующей редакции.
Перед удалением секрета разверните новую редакцию, которая больше не ссылается на старый секрет. Затем деактивируйте все редакции, ссылающиеся на секрет.
Определение секретов
Секреты определяются как набор пар name/value. Значение каждого секрета указывается непосредственно или в качестве ссылки на секрет, хранящийся в Azure Key Vault.
Примечание.
Избегайте указания значения секрета непосредственно в рабочей среде. Вместо этого используйте ссылку на секрет, хранящийся в Azure Key Vault, как описано в разделе "Секрет Магазина" в разделе "Приложения контейнеров".
Сохранение значения секрета в приложениях-контейнерах
При определении секретов на портале или с помощью различных параметров командной строки.
Здесь строка подключения к учетной записи Хранилища очередей объявляется в массиве secrets. В этом примере вы замените <MY-CONNECTION-STRING-VALUE> значением строка подключения.
При создании приложения-контейнера секреты определяются с помощью --secrets параметра.
Параметр принимает разделенный пробелом набор пар name/value.
Здесь строка подключения к учетной записи Хранилища очередей объявляется в параметре --secrets. Замените <CONNECTION_STRING> значением строка подключения.
При создании приложения-контейнера секреты определяются как один или несколько объектов Secret, передаваемых через ConfigurationSecrets параметр.
Здесь объявляется строка подключения учетной записи хранения очереди. Значение queue-connection-string, полученное из переменной среды с именем $QueueConnectionString.
Справочный секрет из Key Vault
При определении секрета создается ссылка на секрет, хранящийся в Azure Key Vault. Контейнерные приложения автоматически извлекают значение секрета из Key Vault и делают его доступным в качестве секрета в приложении контейнера.
Чтобы ссылаться на секрет из Key Vault, необходимо сначала включить управляемое удостоверение в приложении контейнера и предоставить удостоверению доступ к секретам Key Vault.
Сведения о включении управляемого удостоверения в приложении-контейнере см. в разделе "Управляемые удостоверения".
Чтобы предоставить доступ к секретам Key Vault, создайте политику доступа в Key Vault для созданного управляемого удостоверения. Включите в этой политике разрешения "Get" на получение секретов.
На вкладке Назначено системой для параметра Состояние установите значение Вкл.
Нажмите кнопку "Сохранить", чтобы включить управляемое удостоверение, назначенное системой.
Появится всплывающее окно, чтобы убедиться, что вы хотите включить управляемое удостоверение, назначенное системой, и зарегистрировать приложение контейнера с помощью идентификатора Microsoft Entra. Выберите Да.
В разделе "Параметры" выберите "Секреты".
Выберите Добавить.
В области "Добавление секрета" введите следующие сведения:
Имя: имя секрета.
Тип: ссылка на Key Vault.
URL-адрес секрета Key Vault: универсальный код ресурса (URI) секрета в Key Vault. Этот универсальный код ресурса (URI) имеет следующую форму: https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
Удостоверение: выбор назначенной системы.
Выберите Добавить.
Секреты определяются на уровне приложения в разделе resources.properties.configuration.secrets.
Здесь строка подключения к учетной записи Хранилища очередей объявляется в массиве secrets. Его значение автоматически извлекается из Key Vault с помощью указанного удостоверения. Чтобы использовать управляемое удостоверение пользователя, замените system его идентификатором ресурса.
Замените <KEY_VAULT_SECRET_URI> URI секрета в Key Vault.
При создании приложения-контейнера секреты определяются с помощью --secrets параметра.
Параметр принимает разделенный пробелом набор пар name/value.
Знак равенства (=) разделяет каждую пару.
Чтобы указать ссылку на Key Vault, используйте формат <SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Например, queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
Здесь строка подключения к учетной записи Хранилища очередей объявляется в параметре --secrets. Замените <KEY_VAULT_SECRET_URI> URI секрета в Key Vault. Замените <USER_ASSIGNED_IDENTITY_ID> идентификатором ресурса назначаемого пользователем удостоверения.
Примечание.
Удостоверение, назначаемое пользователем, должно иметь доступ к секрету в Key Vault. Назначенное системой удостоверение нельзя использовать с командой создания, так как она недоступна до создания приложения контейнера.
Ссылки на Key Vault секретов не поддерживаются в PowerShell.
Универсальный код ресурса (URI) секрета Key Vault и смена секретов
URI секрета Key Vault должен находиться в одном из следующих форматов:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: ссылка на определенную версию секрета.
https://myvault.vault.azure.net/secrets/mysecret: ссылка на последнюю версию секрета.
Если версия не указана в URI, приложение использует последнюю версию, которая существует в хранилище ключей. Когда новые версии становятся доступными, приложение автоматически извлекает последнюю версию в течение 30 минут. Все активные редакции, ссылающиеся на секрет в переменной среды, автоматически перезапускается для получения нового значения.
Для полного управления версией секрета укажите версию в URI.
Ссылка на секреты в переменных среды
После объявления секретов на уровне приложения, как описано в разделе определения секретов , вы можете ссылаться на них в переменных среды при создании новой редакции в приложении контейнера. Если переменная среды ссылается на секрет, его значение заполняется значением, определенным в секрете.
Пример
В следующем примере показано приложение, которое объявляет строка подключения на уровне приложения. Это подключение ссылается в переменной среды контейнера и в правиле масштабирования.
Здесь переменная среды с именем connection-string получает значение из секрета уровня приложения queue-connection-string. Кроме того, конфигурация проверки подлинности в службе хранилища очередей Azure использует queue-connection-string секрет для определения его подключения.
Чтобы избежать фиксации секретных значений в системе управления версиями с помощью шаблона ARM, передайте значения секретов в качестве параметров шаблона ARM.
В этом примере вы создадите приложение-контейнер с помощью Azure CLI с секретом, на который ссылается переменная среды. Чтобы ссылаться на секрет в переменной среды в Azure CLI, задайте для нее значение secretref:, а затем имя секрета.
Здесь переменная среды с именем connection-string получает значение из секрета уровня приложения queue-connection-string.
Ссылки на Key Vault секретов не поддерживаются в PowerShell.
В этом примере вы создадите контейнер с помощью Azure PowerShell с секретом, на который ссылается переменная среды. Чтобы ссылаться на секрет в переменной среды в PowerShell, задайте для нее значение secretref:, за которым следует имя секрета.
Здесь переменная среды с именем ConnectionString получает значение из секрета уровня приложения $QueueConnectionString.
Подключение секретов в томе
После объявления секретов на уровне приложения, как описано в разделе определения секретов , вы можете ссылаться на них в подключениях томов при создании новой редакции в приложении контейнера. При подключении секретов в томе каждый секрет подключается в виде файла в томе. Имя файла — это имя секрета, а содержимое файла — значение секрета. Вы можете загрузить все секреты в подключение тома или загрузить определенные секреты.
В разделе "Приложение" выберите "Редакции" и "реплики".
На странице "Редакции и реплики" выберите "Создать новую редакцию".
На странице "Создание и развертывание новой редакции" на вкладке "Контейнер" в разделе "Образ контейнера" выберите контейнер.
Выберите Изменить.
В области контекста контейнера выберите вкладку "Подключение тома".
Выберите "Создать новый том".
В области контекста добавления тома введите следующие сведения:
Тип тома: выберите Secret.
Имя: mysecrets
Подключение всех секретов: включено
Примечание.
Если вы хотите загрузить определенные секреты, отключите все секреты и выберите секреты, которые вы хотите загрузить.
Выберите Добавить.
В области контекста контейнера в разделе "Имя тома" выберите mysecrets.
В разделе "Путь подключения" введите /mnt/secrets.
Выберите Сохранить.
На странице "Создание и развертывание новой редакции" выберите "Создать", чтобы создать новую редакцию с подключением тома.
В этом примере два секрета объявляются на уровне приложения. Эти секреты подключены в томе с именем mysecrets типа Secret. Том подключается по пути /mnt/secrets. Затем приложение может ссылаться на секреты в подключении тома.
Чтобы загрузить определенные секреты и указать пути в подключенном томе, определите секреты в secrets массиве объекта тома. В следующем примере показано, как загрузить только queue-connection-string секрет в подключении тома mysecrets с именем connection-string.txtфайла.
В приложении вы можете прочитать секрет из файла, расположенного по адресу /mnt/secrets/connection-string.txt.
В этом примере два секрета объявляются на уровне приложения. Эти секреты подключены в томе с именем mysecrets типа Secret. Том подключается по пути /mnt/secrets. Затем приложение может считывать секреты в виде файлов в подключении тома.