演習 - Azure API Management でサブスクリプションを作成する

完了

Azure portal の Azure API Management (APIM) ユーザー インターフェイスを使用して、サブスクリプションを作成し、クライアント アプリで使用するサブスクリプション キーを取得できます。

気象会社で、このサービスをサブスクライブし、料金を支払っているクライアントが気象データを使用できるようにしたとします。 重要な要件は、キーが割り当てられたクライアントにのみアクセスを許可することです。 あなたは開発リーダーとして、API ゲートウェイを作成する必要があります。 ゲートウェイを使用して、OpenAPI エンドポイントを公開する RESTful Weather API を発行します。 その後、エンドポイントをセキュリティで保護し、クライアント キーを割り当てます。

このユニットでは、次のことを行います。

  • RESTful Weather API を発行する
  • API Management ゲートウェイをデプロイする
  • ゲートウェイ エンドポイントを介して Weather API を公開する
  • サブスクリプション キーに基づいてアクセスを制限する

Weather Web API をデプロイする

あなたは気象情報を返す .NET Core アプリを開発しました。 アプリには、OpenAPI のドキュメントを生成するための Swashbuckle が含まれています。

時間を節約するために、API を Azure でホストするためのスクリプトの実行から始めましょう。 このスクリプトでは、次の手順を行います。

  • 無料レベルの Azure App Service プランを作成する
  • ローカル リポジトリからの Git デプロイ向けに構成された Azure App Service 内に、Web API を作成する
  • アプリ用にアカウント レベルのデプロイ資格情報を設定する
  • Git をローカルで構成する
  • Web API を App Service インスタンスにデプロイする
  1. Azure Cloud Shell で次の git clone コマンドを実行して、アプリのソースと GitHub からのセットアップ スクリプトを含むリポジトリを複製します。

    git clone https://github.com/MicrosoftDocs/mslearn-control-authentication-with-apim.git
    
  2. 次の cd コマンドを実行して、ローカルのリポジトリ フォルダー ディレクトリに移動します。

    cd mslearn-control-authentication-with-apim
    
  3. setup.sh は、その名前からわかるように、API を作成するために実行するスクリプトです。 これにより、OpenAPI インターフェイスを公開するパブリックな Web アプリが生成されます。

    bash setup.sh
    

    このスクリプトは 7 つの部分で構成され、実行に約 1 分かかります。 デプロイの間に、アプリの実行に必要なすべての依存関係がリモートの App Service に自動的にインストールされることを確認します。

    スクリプトが完了すると、Swagger URL とサンプル URL の 2 つの URL が出力されます。 これらの URL を使用して、アプリのデプロイをテストできます。

  4. アプリが正常にデプロイされたことをテストするには、Azure Cloud Shell の出力から Swagger URL をコピーして、お好きなブラウザーに貼り付けます。 ブラウザーにアプリの Swagger UI が表示され、次の RESTful エンドポイントが宣言されるはずです。

    • api/weather/{latitude}/{longitude}。指定した緯度と経度 (倍精度値) に基づいて当日の気象データが返されます。
    • api/weather/{date}/{latitude}/{longitude}。指定された緯度と経度 (倍精度値) で指定された日 (日付値) の気象データが返されます。

    Swagger の表示。

  5. 最後に、Azure Cloud Shell 出力からサンプル URL をコピーします。 この場所は、Swagger JSON URL です。 これはこの演習で後から必要になります。

API ゲートウェイをデプロイする

この演習の次の手順は、Azure portal で API ゲートウェイを作成することです。 次の演習では、このゲートウェイを使って API を発行します。

  1. サンドボックスをアクティブ化したときと同じアカウントを使用して、Azure portal にサインインします。

  2. Azure のリソース メニュー、または Azure サービス[ホーム] ページから、[リソースの作成] を選択します。 [リソースの作成] ウィンドウが表示されます。

  3. "検索サービスとマーケットプレース" の検索バーに「API Management」と入力し、Enter キーを押します。 [API Management] ペインが表示されます。

  4. [作成] を選択します。 [API Management の作成] ウィンドウが表示されます。

  5. [基本] タブで、各設定に対して次の値を入力します。

    設定
    プロジェクトの詳細
    サブスクリプション コンシェルジェ サブスクリプション (既定)
    リソース グループ ドロップダウン リストから、[サンドボックス リソース グループ名] を選択します
    インスタンスの詳細
    リージョン 次のいずれかを選択します。米国中北部、米国西部、西ヨーロッパ、北ヨーロッパ、東南アジア、オーストラリア東部。 この演習で使用する従量課金レベルは、これらのリージョンでのみ使用できます。
    リソース名 apim-WeatherData<random number>」と入力します。乱数は、名前がグローバルに一意であることを確保するためのものです。 このリソース名をメモします。これは、後でこの演習で必要になる API ゲートウェイ名になります。
    組織名 Weather-Company」と入力します。
    管理者のメール アドレス 自分のメール アドレスを入力します。
    価格レベル
    価格レベル ドロップダウン リストから、Consumption を選択します。
  6. [確認および作成] を選択し、検証に成功したら [作成] を選択します。

    注意

    従量課金 レベルを使用するのは、テスト中にはるかに高速に作成できるためです。 エクスペリエンス全体は他の価格レベルとよく似ています。

デプロイの進行状況と、作成されているリソースを表示できます。

API をインポートする

デプロイが完了したら、次の手順を使用して、API Management ゲートウェイに Weather API をインポートします。

  1. [リソースに移動] を選択します。 リソースの [API Management サービス] の [概要] ペインが表示されます。

  2. 左側のメニュー ペインの [API] で、[API] を選択します。 API Management サービスの [API] ペインが表示され、API を作成または表示するためのテンプレートが選択されています。

  3. [Create from definition](定義から作成) で、[OpenAPI] を選択します。 [OpenAPI 仕様から作成する] ダイアログ ボックスが表示されます。

  4. [OpenAPI 仕様] フィールドに、この演習で先ほど保存した Swagger JSON URL を貼り付けます。 Enter キーを押すか、ダイアログ ボックスの別の領域を選択すると、他のフィールドが自動的に設定されます。 このデータは、Swagger で作成された OpenAPI 仕様からインポートされます。

  5. 他のすべての設定については、既定値をそのまま使用し、[作成] を選択します。

    swagger.json url が強調表示されているダイアログ ox のスクリーンショット。

Weather Data API の [デザイン] タブに、2 つの GET 操作で構成されるすべての操作が表示されます。

Weather API にアクセスするためにサブスクリプション キーを追加する

最後の手順で、Weather Data API のサブスクリプション キーを追加します。

  1. 左側のメニュー ペインの [API] で、[サブスクリプション] を選択します。 ご使用の API Management サービスの [サブスクリプション] ペインが表示されます。

  2. 上部のメニュー バーで、[サブスクリプションの追加] を選択します。 [新しいサブスクリプション] ペインが表示されます。

    新しいサブスクリプションの追加方法を示すスクリーンショット。

  3. 各設定に対して次の値を入力します。

    設定
    名前 weather-data-subscription
    Display name Weather Data Subscription
    トレースを許可 チェックマークなし
    Scope ドロップダウン リストから、[API] を選択します。
    API ドロップダウン リストから、[Weather Data](気象データ) を選択します。
  4. [作成] を選択します。 [サブスクリプション] ペインの一覧に、"組み込みのすべてのアクセス サブスクリプション" とご自分の Weather Data Subscription の 2 つのサブスクリプションが表示されます。

  5. [Weather Data Subscription](気象データのサブスクリプション) 行の末尾にある省略記号を選択し、コンテキスト メニューで [キーの表示/非表示] を選択します。 プライマリおよびセカンダリ キーの値が表示されます。

  6. [Weather Data Subscription](気象データのサブスクリプション) の [プライマリ キー] をクリップボードにコピーします。 このキーは次の手順で必要になります。

サブスクリプション キーをテストする

API はキーで保護されています。 ここでは、キーを使用せずに、またキーを使用して、API をテストし、セキュリティで保護されたアクセスを実証します。

  1. サブスクリプション キーを渡さずに要求を行うには、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." }
    
  2. ここで、次のコマンドを実行します。このとき、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}