앱이 최소한의 권한으로 API를 호출하는지 확인하는 방법

앱을 빌드할 때 여러 API 및 작업과 통합할 수 있습니다. 앱이 안전하고 최소 권한 원칙을 따르도록 하려면 앱이 최소한의 권한으로 API를 호출하는지 확인해야 합니다. 최소한의 사용 권한을 사용하여 데이터 및 리소스에 대한 무단 액세스 위험을 줄입니다.

앱이 최소한의 권한으로 API를 호출하는지 확인하기 어려운 점은 새 작업을 통합할 때마다 앱에서 사용하는 사용 권한 집합을 평가해야 한다는 것입니다. 모든 작업 및 사용 권한을 수동으로 추적하면 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 개발자 프록시 및 Azure API 센터를 사용하면 앱이 최소한의 권한으로 API를 호출하는지 여부를 자동으로 확인할 수 있습니다.

앱이 최소 사용 권한을 사용하여 API를 호출하는지 확인하려면 플러그 인을 ApiCenterMinimalPermissionsPlugin 사용할 수 있습니다. 이 플러그 인은 앱에서 사용하는 사용 권한을 Azure API 센터에 정의된 권한과 비교하고 과도한 사용 권한에 대해 보고합니다. 또한 사용해야 하는 최소 사용 권한 집합을 권장합니다.

기록된 API 요청이 토큰을 최소 API 권한으로 사용하는지 여부를 확인하는 개발자 프록시를 보여 주는 명령 프롬프트의 스크린샷

시작하기 전에

앱이 최소한의 권한을 사용하여 API를 호출하는지 확인하려면 조직에서 사용하는 API에 대한 정보가 포함된 Azure API 센터 인스턴스가 있어야 합니다.

명령 프롬프트 devproxy preset get demo-apicenter-minimalpermissions에서 실행하여 이 방법에 대한 사전 설정을 다운로드합니다.

Azure API Center 인스턴스 만들기

시작하기 전에 Azure API 센터 인스턴스를 만들고 조직에서 사용하는 API를 등록합니다. 각 API에 대해 API 작업 및 권한을 설명하는 OpenAPI 사양 파일을 업로드합니다.

API 및 보안 정보가 포함된 OpenAPI 사양이 있는 Azure API 센터의 스크린샷

ApiCenterMinimalPermissionsPlugin 정보를 사용하여 앱이 최소 사용 권한을 사용하여 API를 호출하는지 확인합니다.

API 센터 정보 복사

Azure API Center 인스턴스 개요 페이지에서 API 센터 인스턴스의 이름, 리소스 그룹의 이름 및 구독 ID복사합니다. Azure API Center 인스턴스에 ApiCenterMinimalPermissionsPlugin 연결할 수 있도록 구성하려면 이 정보가 필요합니다.

여러 속성이 강조 표시된 Azure API Center 개요 페이지의 스크린샷.

개발 프록시 구성

앱이 최소 사용 권한을 사용하여 API를 호출하는지 확인하려면 개발자 프록시 구성 파일에서 사용하도록 설정 ApiCenterMinimalPermissionsPlugin 해야 합니다. 앱에서 사용하는 사용 권한 보고서를 만들려면 기자를 추가합니다.

다음을 사용하도록 설정합니다. ApiCenterMinimalPermissionsPlugin

파일에서 devproxyrc.json 다음 구성을 추가합니다.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
  "plugins": [
    {
      "name": "ApiCenterMinimalPermissionsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "configSection": "apiCenterMinimalPermissionsPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.northwind.com/*"
  ],
  "apiCenterMinimalPermissionsPlugin": {
    "subscriptionId": "00000000-0000-0000-0000-000000000000",
    "resourceGroupName": "demo",
    "serviceName": "contoso-api-center",
    "workspaceName": "default"
  }
}

subscriptionIdresourceGroupNameserviceName 속성에서 Azure API Center 인스턴스에 대한 정보를 제공합니다.

속성에서 urlsToWatch 앱에서 사용하는 URL을 지정합니다.

개발자 프록시 도구 키트 Visual Studio Code 확장을 사용하여 개발자 프록시 구성을 쉽게 관리할 수 있습니다.

기자 추가

ApiCenterMinimalPermissionsPlugin 에서 사용 중인 API 보고서와 이를 호출하는 데 필요한 최소 권한을 생성합니다. 이 보고서를 보려면 개발자 프록시 구성 파일에 기자를 추가합니다. 개발자 프록시는 여러 기자를 제공합니다. 이 예제에서는 일반 텍스트 기자사용합니다.

일반 텍스트 기자에 대한 참조로 파일을 업데이트합니다 devproxyrc.json .

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/rc.schema.json",
  "plugins": [
    {
      "name": "ApiCenterMinimalPermissionsPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
      "configSection": "apiCenterMinimalPermissionsPlugin"
    },
    {
      "name": "PlainTextReporter",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll"
    }
  ],
  "urlsToWatch": [
    "https://api.northwind.com/*"
  ],
  "apiCenterMinimalPermissionsPlugin": {
    "subscriptionId": "00000000-0000-0000-0000-000000000000",
    "resourceGroupName": "demo",
    "serviceName": "contoso-api-center",
    "workspaceName": "default"
  }
}

앱이 최소 사용 권한을 사용하여 API를 호출하는지 확인합니다.

앱이 최소 권한을 사용하여 API를 호출하는지 확인하려면 Azure 구독에 연결하고, 개발 프록시를 실행하고, 앱에서 API 요청을 가로채도록 해야 합니다. 그런 다음 개발자 프록시는 API 요청에 대한 정보를 Azure API Center의 정보와 비교하고 최소한의 권한에 대한 보고서를 보고합니다.

Azure 구독에 연결

개발자 프록시는 Azure API 센터의 정보를 사용하여 앱이 최소한의 권한을 사용하여 API를 호출하는지 확인합니다. 이 정보를 얻으려면 Azure 구독에 연결해야 합니다. 여러 가지 방법으로 Azure 구독에 연결할 수 있습니다.

개발 프록시 실행

Azure 구독에 연결한 후 개발자 프록시를 시작합니다. 파일이 있는 devproxyrc.json 동일한 폴더에서 Dev Proxy를 시작하면 구성이 자동으로 로드됩니다. 그렇지 않은 경우 옵션을 사용하여 구성 파일의 경로를 지정합니다 --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 요청에 대한 정보와 Azure API Center의 정보 및 과도한 권한에 대한 보고서를 비교합니다. 또한 앱에서 사용 중인 API를 호출하는 데 필요한 최소 권한을 권장합니다. 앱이 최소한의 사용 권한을 사용하여 API를 호출하고 있는지 확인하면 앱의 보안을 높이는 데 도움이 됩니다. 이 검사를 수동으로 실행하거나 CI/CD 파이프라인과 통합하여 앱이 프로덕션 환경에 릴리스하기 전에 최소한의 사용 권한을 사용하여 API를 호출하는지 확인할 수 있습니다.

자세한 정보