Azure API Management でサブスクリプションを作成する
API Management を使用して API を発行するときに、ゲートウェイを介して API にアクセスできるユーザーを定義します。
気象アプリでは、サービスにサブスクライブしている顧客のみが API にアクセスして予測データを使用できるようにする必要があります。 このアクセスの制御を実現するには、サブスクリプション キーを発行します。
重要
ここで述べるサブスクリプションは、Azure アカウントの管理に使用される Azure サブスクリプションとは関係ありません。
ここでは、サブスクリプション キーを使って API をセキュリティで保護する方法を学習します。
サブスクリプションとキー
API とそれらに含まれる情報を無料で利用できるようにすることを選択できます。 しかし、通常は、有料のユーザー、または仕事上の関係がある組織にアクセスを制限する必要があります。 API へのアクセスを制御する方法としては、サブスクリプションの利用があります。 サブスクリプションは、API へのユーザー アクセスをセグメント化するために使用されます。
サブスクリプション キーによって、これらのサブスクリプションへのアクセスを有効にする承認が形成されます。 クライアントが保護された API に対して要求を行う場合は常に、有効なサブスクリプション キーを HTTP 要求に含める必要があります。それ以外の場合、呼び出しは拒否されます。
サブスクリプション キーは、API 呼び出しの一部として渡すことができる一意の自動生成されたキーです。 キーはサブスクリプションに直接関連しており、さまざまな領域をスコープにすることができます。 サブスクリプションでは、アクセス許可とポリシーを細かく制御することができます。
3 つの主なサブスクリプションのスコープは次のとおりです。
スコープ | 詳細 |
---|---|
すべての API | ゲートウェイからアクセス可能なすべての API に適用されます。 |
単一の API | インポートされた単一の API と、そのすべてのエンドポイントに適用されます。 |
成果物 | 成果物は、API Management で構成する 1 つまたは複数の API のコレクションです。 複数の成果物に API を割り当てることができます。 成果物には、さまざまなアクセス ルール、使用量クォータ、使用条件を含めることができます。 そのため、パートナーとサプライヤーに WeatherData API への異なるアクセス権を付与する場合は、API を製品に割り当ててから、Azure portal を使用して API を製品に関連付けます。 |
保護された API を呼び出すアプリケーションでは、すべての要求にサブスクリプション キーを含める必要があります。
これらのサブスクリプション キーはいつでも再生成できます。たとえば、キーが、許可されていないユーザーと共有されていると疑う場合は、新規に作成できます。
すべてのサブスクリプションには、主キーとセカンダリ キーの 2 つのキーがあります。 2 つのキーがあることで、必要に応じてキーを再生成しやすくなります。 たとえば、プライマリ キーを変更し、ダウンタイムを回避したい場合は、アプリ内でセカンダリ キーを使用します。
サブスクリプションが有効になっている成果物の場合、クライアントはその成果物内の API を呼び出すときにキーを指定する必要があります。 開発者は、サブスクリプション要求を送信することでキーを取得できます。 要求を承認する場合は、サブスクリプション キーを安全に送信する必要があります。たとえば、暗号化されたメッセージ内などです。 この手順は、API Management ワークフローの中核です。
サブスクリプション キーを使用して API を呼び出す
アプリケーションで、サブスクリプションによって保護されている API エンドポイントを呼び出すすべての HTTP 要求に、有効なキーを含める必要があります。 キーは、要求ヘッダーに含めるか、URL のクエリ文字列パラメーターとして渡すことができます。
既定のサブスクリプション キー ヘッダー名は Ocp-Apim-Subscription-Key で、既定のクエリ文字列名は subscription-key です。
API 呼び出しをテストするには、Azure portal のテスト コンソール、開発者ポータル、または curl などのコマンド ライン ツールを使用できます。 サブスクリプション キーのヘッダーを示す、開発者ポータルを使用した GET
要求の例を次に示します。
curl を使用して要求ヘッダーにキーを渡す方法の例を次に示します。
curl --header "Ocp-Apim-Subscription-Key: <key string>" https://<apim gateway>.azure-api.net/api/path
curl コマンドを使用して URL のクエリ文字列としてキーを渡す方法の例を次に示します。
curl https://<apim gateway>.azure-api.net/api/path?subscription-key=<key string>
必要なキーがヘッダーに渡されない場合、または URL のクエリ文字列として渡されない場合は、API ゲートウェイから 401 Access Denied 応答が返されます。