セキュリティで保護された API ゲートウェイに Microsoft Azure Data Manager for Energy API を公開する

Azure API Management は、クライアント アプリケーションとバックエンド API の間の重要な仲介役として機能します。 これにより、技術的な詳細を非表示にし、組織が API セキュリティを制御できるようにすることで、クライアントがサービスに簡単にアクセスできるようになります。

Azure API Management を使用して Azure Data Manager for Energy API を発行することで、プライベート トラフィック向けの Azure Data Manager for Energy のプライベート リンク機能を使用し、インスタンスへの直接パブリック アクセスを完全に削除できます。

この記事では、Azure Data Manager for Energy API をセキュリティで保護するために Azure API Management を設定する方法について説明します。

前提条件

このチュートリアルを完了するには、次のコンポーネント、ツール、および情報が必要です。

  • 2 つのサブネットを使用できる仮想ネットワーク。1 つは Azure Data Manager for Energy プライベート エンドポイント用、もう 1 つは Azure API Management 仮想ネットワーク インジェクション用です。

  • サブネットに配置されたプライベート リンクで構成された Azure Data Manager for Energy。

  • 仮想ネットワーク インジェクションを使用して、仮想ネットワークにプロビジョニングおよび配置された Azure API Management。 [外部] モードを選択するか、[内部] モードの [その他のオプション] セクションを参照してください。

  • 発行される各 API の Azure Data Manager for Energy OpenAPI 仕様を変更するための Visual Studio Code などのコード エディター。

  • adme-samples GitHub リポジトリから Azure Data Manager for Energy OpenAPI 仕様をダウンロードします。 rest-apis ディレクトリに移動し、アプリケーションに適したバージョンを選択します。

  • プロビジョニング時に使用された Azure Data Manager for Energy アプリのアプリ登録から、テナント IDクライアント ID をメモしておいてください。

    [アプリの登録] 詳細のスクリーンショット。

API Management インスタンスを準備する

Azure API Management インスタンスの構成を変更するには、次の手順に従います。

  1. [すべてのリソース] ウィンドウで、このチュートリアルで使用する Azure API Management インスタンスを選択します。

  2. API 設定グループから選択して、[製品の設定] ページに移動します。

    API Management インスタンスの [製品] タブのスクリーンショット。

  3. [製品] ページで、[追加] ボタンを選択して新しい製品を作成します。 Azure API Management 製品を使用すると、一緒に管理および管理できる API の疎結合グループを作成できます。 Azure Data Manager for Energy API 用の製品を作成します。

  4. [製品の追加] ページで、以下の表に記載されている値を入力して製品を作成します。

    API Management インスタンスの [製品の追加] ページのスクリーンショット。

    設定
    表示名 "Azure Data Manager for Energy 製品"
    ID "adme-product"
    説明 どの API をグループ化するのかを開発者に示す説明を入力します
    公開 作成した製品を発行するには、このチェック ボックスをオンにします
    サブスクリプションを要求する API に対し基本的な承認を提供するには、このチェック ボックスをオンにします
    承認が必要 この製品に対するサブスクリプションの申し込みを管理者の審査の下で承認または拒否する場合はオンにします。 オフの場合、サブスクリプションの申し込みは自動承認されます。
    サブスクリプション数の制限 必要に応じて、複数同時に利用できるサブスクリプションの数を制限します。
    法的条項 必要な場合は、サブスクライバーが製品を使用するにあたって同意する必要がある製品の使用条件を入力できます。
    API この機能は無視できます。 この記事の後半で API を関連付けます
  5. [作成] を選択して新しい製品を作成します。

  6. 製品の作成が完了すると、ポータルから [製品] ページに戻ります。 新しく作成した製品 Azure Data Manager for Energy 製品を選択して、[製品リソース] ページに移動します。 [設定] メニューから [ポリシー] 設定メニュー項目を選択します。

    API Management インスタンスの [製品ポリシーの構成] ページのスクリーンショット。

  7. [受信処理] ウィンドウで、</> アイコンを選択すると、製品のポリシーを変更できます。 ソリューションのセキュリティを強化するために、次の 3 つのポリシー セットを追加します。

    • Entra ID トークンを検証して、認証されていない要求は API ゲートウェイで検出されることを確認する
    • 要求のレートと転送された要求/データの合計を制御するためのクォータレート制限
    • バックエンド API によって返されるヘッダーを削除するようにヘッダーを設定します。このヘッダーでは、潜在的な悪意のアクターに機密性の高い詳細が開示される可能性があります
  8. 次の validate-azure-ad-token ポリシーを、[受信] タグ内、[基本] タグの下の構成に追加します。 前提条件に記載されている Microsoft Entra ID アプリの詳細を使用して、テンプレートを更新してください。

    <validate-azure-ad-token tenant-id="INSERT_TENANT_ID">
        <client-application-ids>
            <application-id>INSERT_APP_ID</application-id>
        </client-application-ids>
    </validate-azure-ad-token>
    
  9. validate-azure-ad-token ポリシーの下に、次のクォータレート制限ポリシーを追加します。 コンシューマーに合わせてポリシー構成値を更新します。

    <rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
    <quota calls="10000" bandwidth="40000" renewal-period="3600" />
    
  10. ポリシー エディターの[送信]セクションで、[ベース]タグの下に、次の set-header ポリシーを追加します。

    <set-header name="x-envoy-upstream-service-time" exists-action="delete" />
    <set-header name="x-internal-uri-pattern" exists-action="delete" />
    
  11. 保存を選択して変更をコミットします。

    ポリシー ドキュメント全体のスクリーンショット。

  12. Azure portal で API Management リソースに戻ります。 [バックエンド] メニュー項目を選択し、 [+追加] ボタンを選択します。

    [バックエンド] ページのスクリーンショット。

  13. [バックエンド] モーダルで、次の表で説明する値を入力してバックエンドを作成します。

    設定
    名前 "adme-backend"
    説明 このバックエンドが Azure Data Manager for Energy API に関連していることを開発者に示す説明を入力します
    Type カスタム URL
    ランタイム URL Azure Data Manager for Energy URI _exを入力します。 https://INSERT_ADME_NAME.energy.azure.com/
    証明書チェーンを検証する オン
    証明書名を検証する オン

    バックエンド モーダルのスクリーンショット。

  14. [作成] を選択してユーザーを作成してください。 この新しく作成されたバックエンドは、API を発行するときに、次のセクションで使用されます。

Azure Data Manager for Energy API のインポート

次の手順を使用して、Azure Data Manager for Energy API を Azure API Management ゲートウェイにインポート、構成、発行します。

  1. 前のセクションで使用した Azure API Management インスタンスに戻ります。

  2. メニューから [API] メニュー項目を選択し、[+ API の追加] ボタンを選択します。

  3. [定義から作成] 見出しの下の [OpenAPI] を選択します。

    OpenAPI インポート画面のスクリーンショット。

  4. [OpenAPI 仕様から作成] モーダル ウィンドウで、[完全] トグルを選択します。

  5. 前提条件の一部としてダウンロードした OpenAPI 仕様を見つけ、任意のコード エディターを使用してスキーマ仕様を開きます。 "server" という単語を検索し、ファイル内のサーバー URL をメモします (例: /api/schema-service/v1/)。

  6. [ファイルの選択] を選択し、[スキーマ] API 仕様を選択します。 アップロードが完了すると、モーダル ウィンドウによって仕様からいくつかの値が読み込まれます。

  7. その他のフィールドには、次の表で説明する値を入力します。

    設定 Value
    操作テンプレートに必要なクエリ パラメーターを含める オン
    [表示名] アプリ開発者 にとって意味のある表示名を入力します。例Azure Data Manager for Energy スキーマ サービス
    名前 API Management では、ケバブケースで大文字と小文字を区別した名前を提案します。 名前は必要に応じて変更できますが、インスタンスに対して一意である必要があります
    説明 OpenAPI 仕様では、説明が定義される場合があります。その場合、説明は自動的に設定されます。 必要に応じて、ユース ケースごとに説明を更新します。
    URL スキーム "両方" を選択
    API URL サフィックス すべての Azure Data Manager for Energy API (例えば、adme など) のサフィックスを入力します。 次に、手順 5. のサーバー URL を入力します。 最終的な値は、/adme/api/schema-service/v1/ のようになります。 サフィックスを使用すると、通常は Azure Data Manager for Energy API に直接接続する既存のクライアントとソフトウェア開発キットに準拠できます
    タグ 必要に応じてタグを入力する
    製品 前のセクションで作成した "Azure Data Manager for Energy" 製品を選択します

    重要

    API URL サフィックスを検証します。これは、Azure Data Manager for Energy API の発行でエラーが発生する一般的な原因です

  8. [作成] を選択して、API ファサードを作成します。

    [OpenAPI 仕様から作成] 画面のスクリーンショット。

  9. API の一覧から新しく作成したスキーマ API ファサードを選択し、操作の一覧で [すべての操作] を選択します。 [受信処理] ウィンドウで、</> アイコンを選択してポリシー ドキュメントを編集します。

    API ポリシー画面のスクリーンショット。

  10. API を構成するには、次の 2 つのポリシー セットを追加します。

    • バックエンド サービスを設定して Azure Data Manager for Energy インスタンスに要求をルーティングする
    • URI を書き換えてadme プレフィックスを削除し、バックエンド API への要求をビルドします。 このポリシー ステートメントでは、ポリシー式を使用して、現在の操作の URL テンプレートの値をサーバー URL に動的に追加します。
  11. 手順 5 のサーバー URL をメモしておきます。 [基本] タグの下にある [受信] セクションに、次の 2 つのポリシー ステートメントを挿入します。

    <set-backend-service backend-id="adme-backend" />
    
    <!-- replace the '/api/schema-service/v1' with the server URL for this API specification you noted in step 5 -->
    <rewrite-uri template="@{return "/api/schema-service/v1"+context.Operation.UrlTemplate;}" />
    
  12. 保存を選択して変更をコミットします。

  13. 操作の一覧から GET バージョン情報操作を選択して、API をテストします。 次に、[テスト] タブを選択して、Azure API Management テスト コンソールに移動します。

  14. 次の表で説明する値を入力します。 Azure Data Manager for Energy の認証トークンを生成します。 [送信] を選択して API をテストします。

    設定 Value
    data-partition-id Azure Data Manager for Energy インスタンスのデータ パーティション ID
    Product 前に作成した Azure Data Manager for Energy 製品を選択する
    承認 "ベアラー" と生成した認証トークン

    [API から作成] テスト コンソールのスクリーンショット。

  15. API が正しく構成されている場合は、スクリーンショットのような HTTP 200 - OK 応答が表示されます。 そうでない場合は、「トラブルシューティング」セクションを確認してください。

  16. Azure Data Manager for Energy API および関連する仕様のそれぞれに対し、上記の手順を繰り返します。

トラブルシューティング

Azure API Management を使用した API のテスト中にエラーが発生した場合、通常は構成の問題を示しています。 エラーに基づいて、考えられる解決策の手順を確認します。

コード エラー メッセージ 詳細
HTTP 401 Unauthorized Invalid Azure AD JWT Azure Data Manager for Energy インスタンスの Microsoft Entra ID テナントとクライアント アプリの有効な認証ヘッダーがあることを確認します。
HTTP 401 Unauthorized Azure AD JWT not present 認証ヘッダーがテスト要求に追加されていることを確認します。
HTTP 404 Not Found 通常、このエラーは、バックエンド API への要求が間違った URL に対して行われていることを意味します。 API Management で API 要求をトレースして、バックエンド要求に対して生成される URL を確認し、それが有効であることを確認します。 そうでない場合は、url-rewrite ポリシーまたはバックエンドを再確認します。
HTTP 500 Internal Server Error Internal server error このエラーは、通常、バックエンド API への要求に関する問題を反映しています。 通常、このシナリオでは、問題はドメイン ネーム サービス (DNS) 関連です。 仮想ネットワークにプライベート DNS ゾーンが構成されているか、カスタム DNS 解決に適切なフォワーダーがあることを確認します。 API Management で API 要求をトレースして、バックエンド要求が行われた内容と、要求を試行したときに API Management が報告したエラーを把握します。

その他の考慮事項

API Management の内部仮想ネットワーク モード

内部モード では、パブリック IP アドレスを介してエンドポイントを公開するのではなく、Azure API Management を完全に分離します。 この構成では、組織は、すべての Azure Data Manager for Energy を確実に内部におくことができます。 Azure Data Manager for Energy はパートナーや顧客と連携するためのコラボレーション ソリューションであるため、このシナリオは、そのままでは役に立たない可能性があります。

Web アプリケーション ファイアウォールを使用した App Gateway

多くの組織では、内部仮想ネットワーク モードのみを使用する代わりに、セキュリティで保護されたリバース プロキシ メカニズムを適用して、内部モードの Azure API Management インスタンスを外部のパートナーや顧客に公開することを選択しています。 内部モード インスタンスは、プロキシを "必ず" 経由する必要がある厳密に制御されたイングレスで完全に分離された状態を維持します。

Azure App Gateway は、リバース プロキシとして使用する一般的なサービスです。 Azure App Gateway には、アプリケーションと API の脆弱性に対する潜在的な攻撃を積極的に検出する Web アプリケーション ファイアウォール (WAF) 機能もあります。

カスタム ドメインを使用した Azure API Management の構成

このアーキテクチャのもう 1 つの一般的な機能は、API にカスタム ドメインを適用することです。 Azure Data Manager for Energy ではこの機能はサポートされていませんが、代わりに Azure API Management でカスタム ドメインを構成できます。

ドメインの証明書が前提条件です。 ただし、Azure API Management では、カスタム ドメイン用の無料のマネージド証明書の作成がサポートされています。