アプリが最小限のアクセス許可で API を呼び出しているかどうかを確認する方法
アプリを構築するときに、多くの場合はさまざまな API や操作との統合を行います。 自分のアプリが安全で最小限の特権の原則に従っていることを確実にするには、そのアプリが最小限のアクセス許可のみを指定して API を呼び出しているかどうかを確認する必要があります。 使用するアクセス許可が最小限ならば、データとリソースへの未認可アクセスのリスクを縮小できます。
アプリが最小限のアクセス許可のみを指定して API を呼び出しているかどうかを確認することについての難題は、新しい操作を統合するたびに、アプリで使用する一連のアクセス許可を評価する必要があることです。 すべての操作とアクセス許可を手動で追跡するには時間がかかり、エラーが発生しやすくなります。 Dev Proxy と Azure API Center を使用すると、アプリが最小限のアクセス許可のみを指定して API を呼び出しているかどうかの確認を自動化できます。
アプリが最小限のアクセス許可を使用して API を呼び出しているかどうかを確認するには、 ApiCenterMinimalPermissionsPlugin
プラグインを使用できます。 このプラグインは、アプリが使用するアクセス許可と Azure API Center で定義されているアクセス許可を比較し、過剰なアクセス許可について報告します。 また、使用する必要がある最小限のアクセス許可セットも推奨されます。
開始する前に
最小限のアクセス許可を使用してアプリが API を呼び出しているかどうかを確認するには、組織内で使用する API に関する情報を含む Azure API Center インスタンスが必要です。
ヒント
この使い方の記事用のプリセットをダウンロードするには、コマンド プロンプトで devproxy preset get demo-apicenter-minimalpermissions
を実行してください。
Azure API Center インスタンスを作成する
開始する前に、Azure API Center インスタンスを作成し、組織内で使用する API を登録します。 API のそれぞれについて、API の操作とアクセス許可を記述した OpenAPI 仕様ファイルをアップロードします。
ApiCenterMinimalPermissionsPlugin
では、この情報を使用して、アプリが最小限のアクセス許可を使用して API を呼び出しているかどうかを確認します。
API Center の情報をコピーする
Azure API Center インスタンスの [概要] ページから、その API Center インスタンスの名前、リソース グループの名前、サブスクリプション ID をコピーします。 この情報は、Azure API Center インスタンスに接続できるように ApiCenterMinimalPermissionsPlugin
を構成するために必要です。
Dev Proxy を構成する
自分のアプリが最小限のアクセス許可のみを使用して API を呼び出しているかどうかを確認するには、Dev Proxy 構成ファイル内で 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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default"
}
}
プロパティ subscriptionId
、resourceGroupName
、serviceName
で Azure API Center インスタンスに関する情報を指定します。
urlsToWatch
プロパティで、アプリで使用される URL を指定します。
ヒント
Dev Proxy Toolkit という Visual Studio Code 拡張機能を使用すると、Dev Proxy の構成を簡単に管理できます。
レポーターを追加する
アプリで使用されている API と、その呼び出しに必要な最小限のアクセス許可のレポートが ApiCenterMinimalPermissionsPlugin
によって生成されます。 このレポートを見るには、Dev Proxy 構成ファイルにレポーターを追加します。 Dev Proxy には、さまざまなレポーターがあります。 この例では、プレーンテキスト レポーターを使用します。
プレーンテキスト レポーターへの参照を指定して 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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"resourceGroupName": "demo",
"serviceName": "contoso-api-center",
"workspaceName": "default"
}
}
アプリが最小限のアクセス許可のみを使用して API を呼び出しているかどうかを確認する
自分のアプリが最小限のアクセス許可のみを使用して API を呼び出しているかどうかを確認するには、Azure サブスクリプションに接続し、Dev Proxy を実行してアプリからの API 要求をインターセプトする必要があります。 Dev Proxy によって、この API 要求に関する情報と Azure API Center からの情報が比較され、最小限のアクセス許可についてのレポートが生成されます。
Azure サブスクリプションへの接続
Dev Proxy は、アプリが最小限のアクセス許可のみを使用して API を呼び出しているかどうかを Azure API Center からの情報を使用して判断します。 この情報を得るには、Azure サブスクリプションへの接続が必要です。 Azure サブスクリプションに接続するには、さまざまな方法があります。
Dev Proxy を実行する
Azure サブスクリプションに接続した後に、Dev Proxy を起動します。 devproxyrc.json
ファイルが存在するフォルダーから Dev Proxy を起動する場合は、構成が自動的に読み込まれます。 それ以外の場合は、--config-file
オプションを使用して構成ファイルへのパスを指定します。
Dev Proxy は起動時に、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}}
Dev Proxy によって API 要求がインターセプトされ、その要求に関する情報がメモリに格納されます。 Dev Proxy を実行しているコマンド ラインに、アプリからの 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 キーを押して記録を停止します。 Dev Proxy が API Center インスタンスに接続して、要求に関する情報を API Center からの情報と比較します。
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
Dev Proxy による分析が完了すると、次の内容のレポートが 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 を呼び出していることを確認してからアプリを運用環境にリリースできるようになります。
詳細
Dev Proxy