サブスクリプションを使用して API をセキュリティで保護する
API Management を介して API を公開する場合、これらの API へのアクセスをセキュリティで保護する簡単で一般的な方法は、サブスクリプション キーを使用することです。 公開された API を使用する必要がある開発者は、これらの API を呼び出すときに、有効なサブスクリプション キーを HTTP 要求に含める必要があります。 API Management ゲートウェイは、サブスクリプション キーのない呼び出しを拒否し、それらの呼び出しはバックエンド サービスに転送されません。
API にアクセスするためのサブスクリプション キーを取得するには、サブスクリプションが必要です。 サブスクリプションは、基本的にサブスクリプション キーのペアの名前付きコンテナーです。 公開されている API を使用する必要がある開発者は、サブスクリプションを取得できます。 API の公開元による承認は必要ありません。 API の公開元は、API ユーザー用のサブスクリプションを直接作成することもできます。
Note
また、API Management では、OAuth 2.0、クライアント証明書、IP 許可リストなど、API へのアクセスをセキュリティで保護するための他のメカニズムもサポートされています。
サブスクリプションとキー
サブスクリプション キーは一意の自動生成されたキーであり、クライアント要求のヘッダーで、またはクエリ文字列パラメーターとして渡すことができます。 キーはサブスクリプションに直接関連しており、さまざまな領域をスコープにすることができます。 サブスクリプションでは、アクセス許可とポリシーを細かく制御することができます。
3 つの主なサブスクリプションのスコープは次のとおりです。
スコープ | 詳細 |
---|---|
すべての API | ゲートウェイからアクセス可能なすべての API に適用されます |
単一の API | このスコープは、インポートされた単一の API と、そのすべてのエンドポイントに適用されます |
成果物 | 成果物は、API Management で構成する 1 つまたは複数の API のコレクションです。 複数の成果物に API を割り当てることができます。 成果物には、さまざまなアクセス ルール、使用量クォータ、使用条件を含めることができます。 |
保護された API を呼び出すアプリケーションでは、すべての要求にキーを含める必要があります。
これらのサブスクリプション キーはいつでも再生成できます。たとえば、キーが承認されていないユーザーと共有された可能性がある場合です。
すべてのサブスクリプションには 2 つのキーがあります。プライマリとセカンダリです。 2 つのキーがあることで、必要に応じてキーを再生成しやすくなります。 たとえば、プライマリ キーを変更し、ダウンタイムを回避したい場合は、アプリ内でセカンダリ キーを使用します。
サブスクリプションが有効になっている成果物の場合、クライアントはその成果物内の API を呼び出すときにキーを指定する必要があります。 開発者は、サブスクリプション要求を送信することでキーを取得できます。 要求を承認する場合は、サブスクリプション キーを (暗号化されたメッセージなどで) 安全に送信する必要があります。 この手順は、API Management ワークフローの中核です。
サブスクリプション キーを使用して API を呼び出す
アプリケーションからサブスクリプションによって保護されている API エンドポイントへの呼び出しを行う場合は、すべての HTTP 要求に有効なキーを含める必要があります。 キーは、要求ヘッダー内で、または URL のクエリ文字列として渡すことができます。
既定のヘッダー名は Ocp-Apim-Subscription-Key で、既定のクエリ文字列は subscription-key です。
API の呼び出しをテストする場合は、開発者ポータル、またはコマンドライン ツール (curl など) を使用できます。 サブスクリプション キーのヘッダーを示す、開発者ポータルを使用した GET
要求の例を次に示します。
curl を使って要求ヘッダーでキーを渡す方法を次に示します。
curl --header "Ocp-Apim-Subscription-Key: <key string>" https://<apim gateway>.azure-api.net/api/path
URL 内でクエリ文字列としてキーを渡す curl コマンドの例を次に示します。
curl https://<apim gateway>.azure-api.net/api/path?subscription-key=<key string>
ヘッダーまたは URL のクエリ文字列でキーが渡されない場合、API ゲートウェイから 401 アクセス拒否応答を受け取ります。