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


Как проверить, вызывает ли мое приложение API с минимальными разрешениями

Когда вы создаёте своё приложение, вы, вероятно, интегрируетесь с несколькими API и операциями. Чтобы убедиться, что ваше приложение безопасно и соответствует принципу наименьших привилегий, необходимо проверить, вызывает ли ваше приложение API с минимальными разрешениями. Используя минимальные разрешения, вы снижаете риск несанкционированного доступа к данным и ресурсам.

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

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

Снимок экрана командной строки с прокси-сервером для разработки, который проверяет, используют ли записанные запросы API минимальные API-разрешения токенов.

Перед началом работы

Чтобы проверить, вызывает ли ваше приложение API с минимальными разрешениями, необходимо иметь экземпляр Центра API Azure со сведениями об API, используемых в вашей организации.

Совет

Скачайте предустановку для этой статьи, выполнив команду в командной строке devproxy config get demo-apicenter-minimalpermissions.

Создание экземпляра Центра API Azure

Прежде чем начать, создайте экземпляр Центра API Azure и зарегистрируйте API, которые вы используете в организации. Для каждого API отправьте файл спецификации OpenAPI, описывающий операции и разрешения API.

Снимок экрана: Центр API Azure с API и его спецификацией OpenAPI с информацией о безопасности.

Эти ApiCenterMinimalPermissionsPlugin сведения используются для проверки того, вызывает ли приложение API с минимальными разрешениями.

Скопировать информацию центра API

На странице обзора экземпляра Центра API Azure скопируйте имя экземпляра Центра API, имя группы ресурсов и идентификатор подписки. Вам необходима эта информация для настройки ApiCenterMinimalPermissionsPlugin таким образом, чтобы он мог подключиться к вашему экземпляру Центра API Azure.

Снимок экрана: страница обзора Центра API Azure с выделенными свойствами.

Настройка прокси-сервера разработки

Чтобы проверить, использует ли ваше приложение API с минимальными разрешениями, необходимо включить ApiCenterMinimalPermissionsPlugin в файле конфигурации Dev Proxy. Чтобы создать отчет о разрешениях, которые использует приложение, добавьте репортера.

Включите ApiCenterMinimalPermissionsPlugin

devproxyrc.json В файле добавьте следующую конфигурацию:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "ApiCenterMinimalPermissionsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "apiCenterMinimalPermissionsPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.northwind.com/*"
  ],
  "apiCenterMinimalPermissionsPlugin": {
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "resourceGroupName": "demo",
    "serviceName": "contoso-api-center",
    "workspaceName": "default"
  }
}

В свойствах subscriptionId, resourceGroupName и serviceName укажите сведения о вашем экземпляре Центра API Azure.

В свойстве urlsToWatch укажите URL-адреса, которые использует приложение.

Совет

Используйте расширение Visual Studio Code Dev Proxy Toolkit для простого управления конфигурацией Dev Proxy.

Добавление репортера

Создает отчет API, которые ваше приложение использует, и минимальные разрешения, необходимые для их вызова. Чтобы просмотреть этот отчет, добавьте репортера в файл конфигурации прокси-сервера разработки. Dev Proxy предлагает несколько репортеров. В этом примере используется репортер обычного текста.

Обновите devproxyrc.json файл, добавив ссылку на обработчик обычного текста:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "ApiCenterMinimalPermissionsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "apiCenterMinimalPermissionsPlugin"
    },
    {
      "name": "PlainTextReporter",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ],
  "urlsToWatch": [
    "https://api.northwind.com/*"
  ],
  "apiCenterMinimalPermissionsPlugin": {
    "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
    "resourceGroupName": "demo",
    "serviceName": "contoso-api-center",
    "workspaceName": "default"
  }
}

Проверьте, вызывает ли приложение API с минимальными разрешениями

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

Подключение к подписке Azure

В прокси-сервере разработки используются сведения из Центра API Azure, чтобы определить, вызывает ли приложение API с минимальными разрешениями. Чтобы получить эти сведения, он должен подключиться к вашей подписке Azure. Вы можете подключиться к подписке Azure несколькими способами.

Запуск прокси-сервера разработки

После подключения к подписке Azure запустите Dev Proxy. Если вы запускаете Dev Proxy из той же папки, где находится ваш файл devproxyrc.json, он автоматически загружает конфигурацию. В противном случае укажите путь к файлу конфигурации с помощью --config-file параметра.

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

 info    Plugin ApiCenterMinimalPermissionsPlugin connecting to Azure...
 info    Listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

Нажмите клавишу R , чтобы начать запись запросов API из приложения.

Используйте ваше приложение

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

@readwriteToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJzY3AiOlsiY3VzdG9tZXIucmVhZHdyaXRlIl19.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

GET https://api.northwind.com/customers/ALFKI
Authorization: Bearer {{readwriteToken}}

Прокси-сервер разработки перехватывает запросы API и сохраняет сведения о них в памяти. В командной строке, в которой выполняется прокси-сервер разработки, вы увидите сведения о запросах API, выполняемых приложением.

 info    Plugin ApiCenterMinimalPermissionsPlugin connecting to Azure...
 info    Listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

◉ Recording... 

 req   ╭ GET https://api.northwind.com/customers/ALFKI
 mock  ╰ 200 /{customer-id}

Проверка разрешений

Остановите запись, нажав клавишу S. Прокси-сервер разработки подключается к экземпляру Центра API и сравнивает сведения о запросах с информацией из Центра API.

 info    Plugin ApiCenterMinimalPermissionsPlugin connecting to Azure...
 info    Listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

◉ Recording... 

 req   ╭ GET https://api.northwind.com/customers/ALFKI
 mock  ╰ 200 /{customer-id}
○ Stopped recording
 info    Checking if recorded API requests use minimal permissions as defined in API Center...
 info    Loading APIs from API Center...
 info    Loading API definitions from API Center...
 info    Checking minimal permissions for API https://api.northwind.com...
 info    Analyzing recorded requests...
 warn    Calling API Northwind with excessive permissions: customer.readwrite. Minimal permissions are: customer.read
 info    DONE

Когда прокси-сервер разработки завершит анализ, он создает отчет в файле с именем ApiCenterMinimalPermissionsPlugin_PlainTextReporter.txt со следующим содержимым:

Azure API Center minimal permissions report

APIS

Northwind

x Called using excessive permissions

Permissions

- Minimal permissions: customer.read
- Permissions on the token: customer.readwrite
- Excessive permissions: customer.readwrite

Requests

- GET https://api.northwind.com/customers/ALFKI

UNMATCHED REQUESTS

No unmatched requests found.

ERRORS

No errors occurred.

Итоги

ApiCenterMinimalPermissionsPluginС помощью этой функции можно проверить, вызывает ли приложение API с минимальными разрешениями. Подключаемый модуль сравнивает сведения о запросах API из приложения с информацией из Центра API Azure и сообщает о чрезмерных разрешениях. Он также рекомендует минимальные разрешения, необходимые для вызова API- интерфейсов, которые вы используете в приложении. Убедитесь, что приложение вызывает API с минимальными разрешениями, помогает повысить безопасность приложения. Эту проверку можно запустить вручную или интегрировать с конвейером CI/CD, чтобы убедиться, что приложение вызывает API с минимальными разрешениями перед выпуском в рабочую среду.

Дополнительные сведения