Функциональные возможности операционной системы в службе приложение Azure
В этой статье описаны базовые функциональные возможности операционной системы, доступные для всех приложений Windows, работающих в службе приложение Azure. Эта функция включает доступ к файлам, сети и реестру, а также диагностика журналы и события.
Примечание.
Приложения Linux в Службе приложений работают в собственных контейнерах. У вас есть корневой доступ к контейнеру, но нет доступа к операционной системе узла. В случае с приложениями, работающими в контейнерах Windows, у вас есть административный доступ к контейнеру, но нет доступа к операционной системе хоста.
Уровни обслуживания плана службы приложений
Служба приложений запускает клиентские приложения в мультитенантной среде размещения. Приложения, развернутые на уровнях "Бесплатный" и "Общий", выполняются в рабочих процессах на общих виртуальных машинах. Приложения, развернутые на уровнях "Стандартный" и "Премиум", выполняются на виртуальных машинах, выделенных специально для приложений, связанных с одним клиентом.
Примечание.
Планы обслуживания Службы приложений Azure "Бесплатный" и "Общий" (предварительная версия) — это планы базового уровня, которые выполняются на той же виртуальной машине Azure, что и остальные приложения Службы приложений. Некоторые приложения могут принадлежать другим клиентам. Эти уровни предназначены только для целей разработки и тестирования.
Так как Служба приложений поддерживает простое масштабирование между уровнями, конфигурация безопасности, применяемая для приложений Служба приложений, остается одинаковой. Эта конфигурация гарантирует, что приложения не будут внезапно вести себя по-разному и завершаются непредвиденными способами, когда план Служба приложений переключается с одного уровня на другой.
Платформы разработки
От ценовых категорий службы приложений зависит объем доступных приложениям вычислительных ресурсов (ЦП, дисковое пространство, память и исходящий сетевой трафик). При этом спектр доступных приложениям функциональных возможностей платформы остается неизменным в любом уровне масштабирования.
Служба приложений поддерживает различные платформы разработки, включая ASP.NET, классический ASP, Node.js, PHP и Python. Чтобы упростить и нормализовать конфигурацию безопасности, Служба приложений приложения обычно выполняют платформы разработки с параметрами по умолчанию. Платформы и компоненты среды выполнения, которые предоставляет платформа, регулярно обновляются для удовлетворения требований к безопасности и соответствию требованиям. По этой причине мы не гарантируем определенные версии дополнительных или исправлений. Рекомендуется, чтобы клиенты нацелились на основные версии по мере необходимости.
В следующих разделах приведены общие виды функциональных возможностей операционной системы, доступных приложениям службы приложений.
Доступ к файлам
В службе приложений используются разные диски, включая локальные и сетевые диски.
Локальные диски
В основном Служба приложений — это служба, запущенная на вершине инфраструктуры Azure как услуга (PaaS). В результате локальные диски, связанные с виртуальной машиной, являются теми же типами дисков, которые доступны для любой рабочей роли, работающей в Azure. К ним относятся:
- Диск операционной системы (
%SystemDrive%
), размер которого зависит от размера виртуальной машины. - Диск ресурсов (
%ResourceDrive%
), который Служба приложений используется внутренне.
Рекомендуется всегда использовать переменные %SystemDrive%
среды и %ResourceDrive%
вместо жестко закодированных путей к файлам. Корневой путь, возвращаемый из этих двух переменных среды, сдвигался со временем в d:\
c:\
. Однако старые приложения, жестко закодированные со ссылками на путь к файлу, продолжают d:\
работать, так как Служба приложений автоматически переназначает d:\
на точкуc:\
. Как отмечалось ранее, настоятельно рекомендуется всегда использовать переменные среды при создании путей к файлам и избегать путаницы по поводу изменений платформы в пути корневого файла по умолчанию.
Важно отслеживать использование дисков по мере роста приложения. Достижение квоты диска может оказать негативное влияние на приложение. Например:
- Приложение может вызвать ошибку, указывающую, что на диске недостаточно места.
- При просмотре консоли Kudu могут возникнуть ошибки диска.
- Развертывание из Azure DevOps или Visual Studio может завершиться ошибкой
ERROR_NOT_ENOUGH_DISK_SPACE: Web deployment task failed. (Web Deploy detected insufficient space on disk)
. - Ваше приложение может иметь низкую производительность.
Сетевые диски (общие UNC-ресурсы)
Одним из уникальных аспектов Служба приложений, которые упрощают развертывание и обслуживание приложений, заключается в том, что все общие ресурсы содержимого хранятся в наборе общих папок UNC. Эта модель очень хорошо согласуется с распространенным шаблоном хранилища содержимого, который используется локальными средами размещения веб-сайтов, имеющими несколько серверов с балансировкой нагрузки.
В Служба приложений общие папки UNC создаются в каждом центре обработки данных. Процент содержимого пользователя для всех клиентов в каждом центре обработки данных выделяется каждому UNC-ресурсу. У каждой подписки клиента есть зарезервированная структура каталогов для определенной UNC-папки в центре обработки данных. У клиента может быть несколько приложений, созданных в определенном центре обработки данных, поэтому все каталоги, принадлежащие одной подписке клиента, создаются в одной UNC-папке.
Из-за того, как работают службы Azure, конкретная виртуальная машина, отвечающая за размещение изменений общего ресурса UNC со временем. Общие папки UNC подключены различными виртуальными машинами по мере их создания и уменьшения во время обычных операций Azure. По этой причине в приложениях никогда не следует жестко программировать предположение о том, что информация о машине в пути UNC со временем будет оставаться неизменной. Вместо этого они должны использовать удобный абсолютный путь%HOME%\site
, который Служба приложений предоставляет.
Абсолютный путь — это переносимый метод для ссылки на собственное приложение. Это не зависит от любого приложения или пользователя. С помощью %HOME%\site
можно передавать общие файлы из приложения в приложение без необходимости настраивать новый абсолютный путь для каждой передачи.
Типы доступа к файлам для приложения
Каталог %HOME%
в приложении сопоставляется с ресурсом содержимого в служба хранилища Azure, выделенном для этого приложения. Ценовая категория определяет его размер. Он может включать каталоги, такие как содержимое, журналы ошибок и диагностики, а также более ранние версии приложения, созданного системой управления версиями. Эти каталоги доступны для кода приложений во время выполнения для чтения и записи. Так как файлы не хранятся локально, они сохраняются во всех перезапусках приложений.
На системном диске Служба приложений резервирует %SystemDrive%\local
для временного локального хранилища под конкретное приложение. Изменения файлов в этом каталоге не сохраняются при перезапуске приложения. Хотя приложение имеет полный доступ на чтение и запись к собственному временному локальному хранилищу, это хранилище не предназначено для прямого использования кодом приложения. Наоборот, цель состоит в том, чтобы предоставить временное хранилище файлов для служб IIS и платформ веб-приложений.
Служба приложений ограничивает объем хранилища %SystemDrive%\local
для каждого приложения, чтобы предотвратить использование отдельных приложений чрезмерных объемов локального хранилища файлов. Для уровней Бесплатный, Общий и Потребление (Функции Azure) ограничение составляет 500 МБ. В следующей таблице перечислены другие уровни:
Уровень | Локальное хранилище файлов |
---|---|
B1/S1/P1 | 11 ГБ |
B2/S2/P2 | 15 ГБ |
B3/S3/P3 | 58 ГБ |
P0v3 | 11 ГБ |
P1v2/P1v3/P1mv3/Isolated1/Isolated1v2 | 21 GB |
P2v2/P2v3/P2mv3/Isolated2/Isolated2v2 | 61 ГБ |
P3v2/P3v3/P3mv3/Isolated3/Isolated3v2 | 140 ГБ |
Изоляция4v2 | 276 ГБ |
P4mv3 | 280 ГБ |
Изолированный 5v2 | 552 ГБ |
P5mv3 | 560 ГБ |
Изолированный 6v2 | 1104 ГБ |
Двумя примерами того, как служба приложений использует временное локальное хранилище, являются каталог для временных файлов ASP.NET и каталог для сжатых файлов IIS. Система компиляции ASP.NET использует каталог %SystemDrive%\local\Temporary ASP.NET Files
в качестве временного расположения кэша компиляции. Служба IIS использует каталог %SystemDrive%\local\IIS Temporary Compressed Files
для хранения сжатых выходных данных ответа. Оба этих типа использования файлов (вместе с другими) переназначаются в Служба приложений временным локальным хранилищем для каждого приложения. Это изменение помогает обеспечить, чтобы функции продолжались должным образом.
Каждое приложение в Служба приложений выполняется как случайное, уникальное, уникальное удостоверение рабочего процесса с низким уровнем привилегий, называемое удостоверением пула приложений. Код приложения использует это удостоверение для базового доступа только для чтения к диску операционной системы. Этот доступ означает, что код приложения может перечислять общие структуры каталогов и читать общие файлы на диске операционной системы. Хотя этот уровень доступа может оказаться широким, те же каталоги и файлы доступны при подготовке рабочей роли в размещенной в Azure службе и считывания содержимого диска.
Доступ к файлам в нескольких экземплярах
Каталог общего доступа к содержимому (%HOME%
) включает в себя содержимое приложения, и код приложения может в него записывать. Если приложение выполняется в нескольких экземплярах, каталог %HOME%
является общим для всех экземпляров, поэтому все экземпляры видят один и тот же каталог. Например, если приложение сохраняет отправленные файлы в %HOME%
каталог, эти файлы сразу же доступны всем экземплярам.
Временный локальный каталог хранилища (%SystemDrive%\local
) не является общим для экземпляров. Он также не предоставляет общий доступ между приложением и его приложением Kudu.
Доступ к сети
Код приложения может использовать протоколы на основе TCP/IP и UDP, чтобы сделать исходящие сетевые подключения к конечным точкам с доступом к Интернету, предоставляющим внешние службы. Приложения могут использовать эти же протоколы для подключения к службам в Azure, например путем установки подключений HTTPS к База данных SQL Azure.
Существует также ограниченная возможность для приложений установить одно локальное подключение к циклу и прослушивать это локальное сокет петли. Эта функция позволяет приложениям, которые прослушивают локальные сокеты loopback в рамках их функциональных возможностей. Каждое приложение имеет частное подключение к циклу. Одно приложение не может прослушивать локальный сокет цикла, установленный другим приложением.
Именованные каналы также поддерживаются в качестве механизма взаимодействия между процессами, которые совместно запускают приложение. Например, модуль FastCGI IIS использует именованные каналы для координации отдельных процессов, обеспечивающих работу страниц PHP.
Выполнение кода, процессы и память
Как отмечалось ранее, приложения выполняются внутри рабочих процессов с низким уровнем привилегий с помощью случайного удостоверения пула приложений. Код приложения имеет доступ к пространству памяти, связанному с рабочим процессом, а также к любым дочерним процессам, которые процессы CGI или другие приложения могут создаваться. Однако одно приложение не может получить доступ к памяти или данным другого приложения, даже если оно находится на одной виртуальной машине.
Приложения могут выполнять скрипты или страницы, созданные на базе поддерживаемых платформ веб-разработки. Служба приложений не настраивает параметры веб-платформ для получения более ограниченных режимов. Например, ASP.NET приложения, работающие в Служба приложений выполняются в полном доверии, в отличие от более ограниченного режима доверия. Веб-платформы, включая классические ASP и ASP.NET, могут вызывать компоненты COM процесса (например, объекты данных ActiveX), зарегистрированные по умолчанию в операционной системе Windows. Веб-платформы не могут вызывать компоненты COM из процесса.
Приложение может создать и запустить произвольный код, открыть командную оболочку или запустить скрипт PowerShell. Однако исполняемые программы и скрипты по-прежнему ограничены привилегиями, предоставленными родительскому пулу приложений. Например, приложение может создать исполняемую программу, которая выполняет исходящий HTTP-вызов, но эта исполняемая программа не может попытаться отменить привязку IP-адреса виртуальной машины из сетевого адаптера. Выполнение исходящего сетевого вызова разрешено для кода с низким уровнем привилегий, но при попытке перенастроить параметры сети на виртуальной машине требуются права администратора.
Журналы диагностики и события
Сведения журнала — это другой набор данных, к которым некоторые приложения пытаются получить доступ. Типы сведений журнала, доступные для кода, выполняемого в Служба приложений включают сведения о диагностике и журнале, которые приложение создает и может легко получить доступ.
Например, доступны журналы W3C HTTP, созданные приложением:
- В каталоге журнала в расположении сетевого ресурса, созданном для приложения
- При настройке ведения журнала W3C в хранилище BLOB-объектов
Последний вариант позволяет приложениям собирать большие объемы журналов без превышения ограничений хранилища файлов, связанных с сетевым ресурсом.
Аналогичным образом диагностика данные из приложений .NET в режиме реального времени можно регистрировать с помощью трассировки .NET и инфраструктуры диагностика. Затем можно записать сведения трассировки в сетевую папку приложения или в расположение хранилища BLOB-объектов.
Области диагностика ведения журнала и трассировки, недоступные для приложений, являются событиями трассировки событий Windows (ETW) и общими журналами событий Windows (например, системными, приложениями и журналами событий безопасности). Так как данные трассировки ETW могут быть доступны для просмотра на компьютере (с правильными списками управления доступом), доступ на чтение и запись к событиям ETW заблокирован. Вызовы API для чтения и записи событий ETW и распространенных журналов событий Windows могут работать, но в действительности код приложения не имеет доступа к данным этого события.
Доступ к реестру
Приложения имеют доступ только для чтения к многому (хотя и не всем) реестра виртуальной машины, на которую они работают. Этот доступ означает, что приложения могут получать доступ к разделам реестра, разрешающим доступ только для чтения к группе локальных пользователей. Одна из областей реестра, которая в настоящее время не поддерживается для доступа на чтение или запись, является HKEY\_CURRENT\_USER
кустом.
Доступ к реестру записи заблокирован, включая доступ к любым разделам реестра для каждого пользователя. С точки зрения приложения он не может полагаться на доступ на запись в реестр в среде Azure, так как приложения можно перенести на виртуальных машинах. Единственное постоянное записываемое хранилище, от которое может зависеть приложение, — это структура каталога содержимого для каждого приложения, хранящуюся на Служба приложений общих ресурсах UNC.
Доступ к удаленному рабочему столу
Служба приложений не предоставляет доступ по протоколу удаленного рабочего стола к экземплярам виртуальных машин.
Дополнительные сведения
Актуальные сведения о среде выполнения Служба приложений см. в песочнице службы приложение Azure. Команда разработчиков Служба приложений поддерживает эту страницу.