演習 - Azure API Management でサブスクリプションを作成する
Azure portal の Azure API Management ユーザー インターフェイスを使用して、サブスクリプションを作成し、クライアント アプリで使用するためのサブスクリプション キーを取得することができます。
気象会社で、このサービスをサブスクライブし、料金を支払っているクライアントが気象データを使用できるようにしたとします。 重要な要件は、キーが割り当てられたクライアントにのみアクセスを許可することです。 あなたは開発リーダーとして、API ゲートウェイを作成する必要があります。 ゲートウェイを使用して、OpenAPI エンドポイントを公開する RESTful Weather API を発行します。 その後、エンドポイントをセキュリティで保護し、クライアント キーを割り当てます。
このユニットでは、次のことを行います。
- RESTful Weather API を発行する
- API Management ゲートウェイをデプロイする
- ゲートウェイ エンドポイントを介して Weather API を公開する
- サブスクリプション キーに基づいてアクセスを制限する
重要
この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Weather Web API をデプロイする
あなたは気象情報を返す .NET Core アプリを開発しました。 アプリには、OpenAPI のドキュメントを生成するための Swashbuckle が含まれています。
時間を節約するために、API を Azure でホストするためのスクリプトの実行から始めましょう。 このスクリプトでは、次の手順を行います。
- 無料レベルの Azure App Service プランを作成する
- ローカル リポジトリからの Git デプロイ向けに構成された Azure App Service 内に、Web API を作成する
- アプリ用にアカウント レベルのデプロイ資格情報を設定する
- Git をローカルで構成する
- Web API を App Service インスタンスにデプロイする
Azure portal にサインインします。
Azure タスク バーにある Cloud Shell アイコンを選んで Azure Cloud Shell を開きます。
Azure Cloud Shell で次の git clone コマンドを実行して、アプリのソースと GitHub からのセットアップ スクリプトを含むリポジトリを複製します。
git clone https://github.com/MicrosoftDocs/mslearn-control-authentication-with-apim.git
次の cd コマンドを実行して、ローカルのリポジトリ フォルダー ディレクトリに移動します。
cd mslearn-control-authentication-with-apim
setup.sh
は、その名前からわかるように、API を作成するために実行するスクリプトです。 これにより、OpenAPI インターフェイスを公開するパブリックな Web アプリが生成されます。bash setup.sh
このスクリプトは 7 つの部分で構成され、実行に約 1 分かかります。 デプロイの間に、アプリの実行に必要なすべての依存関係がリモートの App Service に自動的にインストールされることを確認します。
スクリプトが完了すると、Swagger URL とサンプル URL の 2 つの URL が出力されます。 これらの URL を使用して、アプリのデプロイをテストできます。
アプリが正常にデプロイされたことをテストするには、Azure Cloud Shell の出力から Swagger URL をコピーして、お好きなブラウザーに貼り付けます。 ブラウザーにアプリの Swagger UI が表示され、次の RESTful エンドポイントが宣言されるはずです。
- api/weather/{latitude}/{longitude}。指定した緯度と経度 (倍精度値) に基づいて当日の気象データが返されます。
- api/weather/{date}/{latitude}/{longitude}。指定された緯度と経度 (倍精度値) で指定された日 (日付値) の気象データが返されます。
最後に、Azure Cloud Shell 出力からサンプル URL をコピーして保存します。 この場所は、Swagger JSON URL です。 これはこの演習で後から必要になります。
API ゲートウェイをデプロイする
この演習の次の手順は、Azure portal で API ゲートウェイを作成することです。 次の演習では、このゲートウェイを使って API を発行します。
Azure Portal にサインインします。
Azure のリソース メニュー、または Azure サービスの [ホーム] ページから、[リソースの作成] を選択します。 [リソースの作成] ウィンドウが表示されます。
リソース メニューで [統合] を選び、結果で [API Management] を選びます。 [API Management ゲートウェイのインストール] ペインが表示されます。
[基本] タブで、各設定に対して次の値を入力します。
設定 値 プロジェクトの詳細 サブスクリプション サブスクリプションを選択します。 Resource group 新規または既存のリソース グループを選択します。 リソース グループは、Azure ソリューションの関連リソースを保持する論理コンテナーです。 インスタンスの詳細 リージョン 使用可能なリージョンを選択します。 リソース名 「 apim-WeatherData<random number>
」と入力します。乱数は、名前がグローバルに一意であることを確保するためのものです。 このリソース名をメモします。これは、後でこの演習で必要となる API ゲートウェイ名になります。ワークスペース名 「 Weather-Company
」と入力します。管理者のメール アドレス すべてのシステム通知を受信するメール アドレス。 価格レベル 価格レベル ドロップダウン リストから、 Consumption
を選択します。[確認および作成] を選択し、検証に成功したら [作成] を選択します。
Note
Consumption レベルにはテスト用の高速デプロイが提供され、従量課金制の価格モデルがあります。 全体的な API Management エクスペリエンスは他の価格レベルと同様です。
デプロイの進行状況と、作成されているリソースを表示できます。
API をインポートする
デプロイが完了したら、次の手順を使用して、API Management ゲートウェイに Weather API をインポートします。
[リソースに移動] を選択します。 リソースの [API Management サービス] の [概要] ペインが表示されます。
左側のメニュー ペインの [API] で、[API] を選択します。 API Management サービスの [API] ペインが表示され、API を作成または表示するためのテンプレートが選択されています。
[Create from definition](定義から作成) で、[OpenAPI] を選択します。 [OpenAPI 仕様から作成する] ダイアログ ボックスが表示されます。
[OpenAPI 仕様] フィールドに、この演習で先ほど保存した Swagger JSON URL を貼り付けます。 Enter キーを押すか、ダイアログ ボックスの別の領域を選択すると、他のフィールドが自動的に設定されます。 このデータは、Swagger で作成された OpenAPI 仕様からインポートされます。
他のすべての設定については、既定値をそのまま使用し、[作成] を選択します。
Weather Data API の [デザイン] タブに、2 つの GET 操作で構成されるすべての操作が表示されます。
Weather API にアクセスするためにサブスクリプション キーを追加する
最後の手順で、Weather Data API のサブスクリプション キーを追加します。
左側のメニュー ペインの [API] で、[サブスクリプション] を選択します。 ご使用の API Management サービスの [サブスクリプション] ペインが表示されます。
上部のメニュー バーで、[サブスクリプションの追加] を選択します。 [新しいサブスクリプション] ペインが表示されます。
各設定に対して次の値を入力します。
設定 値 名前 weather-data-subscription
Display name Weather Data Subscription
トレースを許可 チェックマークなし Scope ドロップダウン リストから、[API] を選択します。 API ドロップダウン リストから、[Weather Data](気象データ) を選択します。 [作成] を選択します。 [サブスクリプション] ペインの一覧に、"組み込みのすべてのアクセス サブスクリプション" とご自分の Weather Data Subscription の 2 つのサブスクリプションが表示されます。
[Weather Data Subscription](気象データのサブスクリプション) 行の末尾にある省略記号を選択し、コンテキスト メニューで [キーの表示/非表示] を選択します。 プライマリおよびセカンダリ キーの値が表示されます。
[Weather Data Subscription] (気象データのサブスクリプション) の [プライマリ キー] をクリップボードにコピーし、メモ帳などで保存します。 このキーは次の手順で必要になります。
サブスクリプション キーをテストする
API はキーで保護されています。 ここでは、キーを使用せずに、またキーを使用して、API をテストし、セキュリティで保護されたアクセスを実証します。
サブスクリプション キーを渡さずに要求を行います。 Azure Cloud Shell で、次の cURL コマンドを実行します。 [Name Of Gateway] プレースホルダーを、前のタスクで作成した API ゲートウェイのリソース名 (apim-WeatherDataNNNN) に置き換えてください。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1
このコマンドにはサブスクリプション キーがないので、以下のような、401 アクセス拒否エラーが返されるはずです。
{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }
そして、次のコマンドを実行します。 Name Of Gateway プレースホルダーを、API ゲートウェイのリソース名 (apim-WeatherDataNNNN) に置き換えてください。 また、Primary Key プレースホルダーを、表示/非表示ステップからコピーした主キーに置き換えてください。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1 \ -H 'Ocp-Apim-Subscription-Key: [Primary Key]'
終了引用符を含めた場合、このコマンドを実行すると、次のコードのように正常な応答が返されます。
{"mainOutlook":{"temperature":32,"humidity":34},"wind":{"speed":11,"direction":239.0},"date":"2019-05-16T00:00:00+00:00","latitude":53.0,"longitude":-1.0}