Azure API Management のサブスクリプション

Azure API Management での "サブスクリプション" は、API コンシューマーが API Management インスタンスを通じて公開された API にアクセスするための最も一般的な方法です。 この記事では、この概念の概要について説明します。

サブスクリプションとは

API Management を通じて API を公開することで、サブスクリプション キーを用いて API アクセスを簡単に保護できます。 公開された API を使用する必要がある開発者は、これらの API を呼び出すときに、有効なサブスクリプション キーを HTTP 要求に含める必要があります。 有効なサブスクリプション キーがない場合、呼び出しは次のようになります。

  • API Management ゲートウェイによって直ちに拒否されます。
  • バックエンド サービスに転送されません。

API にアクセスするには、開発者にサブスクリプションとサブスクリプション キーが必要です。 サブスクリプションは、基本的にサブスクリプション キーのペアの名前付きコンテナーです。

さらに、次の点も考慮する必要があります。

  • 開発者は、API 発行元の承認なしにサブスクリプションを取得できます。
  • API の公開元は、API コンシューマー用のサブスクリプションを直接作成することもできます。

ヒント

API Management では、API へのアクセスをセキュリティで保護するための他のメカニズムもサポートしています。たとえば、以下があります。

サブスクリプション キーを管理する

定期的なキーの再生成は、一般的なセキュリティ対策です。 サブスクリプション キーを必要とする Azure サービスと同様に、API Management でもキーをペアで生成します。 サービスを利用する各アプリケーションは、キー A からキー B に切り替え、最小限の中断で鍵 A を再生成できます。その逆も同様です。

Note

  • API Management には、有効期限の設定やキーの自動ローテーションなど、サブスクリプション キーのライフサイクルを管理するための組み込み機能は用意されていません。 Azure PowerShell や Azure SDK などのツールを使用して、これらのプロセスを自動化するワークフローを開発できます。
  • API への時間制限付きアクセスを強制するために、API 発行元はサブスクリプション キーを含むポリシーを使用したり、トークンベースの認証などの組み込みの有効期限を提供するメカニズムを使用したりできます。

サブスクリプションの範囲

サブスクリプションは、製品、すべての API、または個々の API というさまざまな範囲に関連付けることができます。

製品のサブスクリプション

従来、API Management のサブスクリプションは、常に 1 つの 製品のスコープに関連付けられていました。 開発者 :

  • 開発者ポータルで製品の一覧を確認していました。
  • 使用する製品のサブスクリプション要求を送信します。
  • これらのサブスクリプションのキー (自動的に承認または API 発行元によって承認) を使用して、製品内のすべての API にアクセスします。

現時点では、製品をスコープとするサブスクリプションは、開発者ポータルのユーザー プロファイル セクションにのみ表示されます。

製品のサブスクリプション

すべての API または個々の API のサブスクリプション

次のいずれかへのアクセスを許可するキーを作成することもできます。

  • 1 つの API、または
  • API Management インスタンス内のすべての API。

このような場合、最初に、製品を作成してそれに API を追加する必要はありません。

すべてのアクセス許可を持つサブスクリプション

各 API Management インスタンスには、不変の全 API サブスクリプション ("すべてのアクセス許可を持つサブスクリプション" とも呼ばれる) が付属しています。 この組み込みサブスクリプションにより、テスト コンソール内での API のテストとデバッグがより簡単になります。

警告

すべてのアクセス許可を持つサブスクリプションを使用すると、API Management インスタンス内のすべての API へのアクセスが可能になります。これは、承認されたユーザーのみが使用する必要があります。 このサブスクリプションを定期的な API アクセスに使用したり、クライアント アプリにすべてのアクセス許可を持つサブスクリプションのキーを埋め込んだりしないでください。

Note

API スコープのサブスクリプションまたはすべてのアクセス許可を持つサブスクリプションを使用している場合、製品スコープで構成されているポリシーは、そのサブスクリプションからの要求には適用されません。

スタンドアロン サブスクリプション

API Management では、開発者アカウントに関連付けられない "スタンドアロン" サブスクリプションも許可します。 この機能は、サブスクリプションを共有する複数の開発者やチームと同様のシナリオで役立ちます。

所有者を割り当てずにサブスクリプションを作成すると、サブスクリプションはスタンドアロン サブスクリプションになります。 開発者とチームの残りの部分にスタンドアロン サブスクリプション キーへのアクセスを許可するには、次のいずれかを実行します。

  • サブスクリプション キーを手動で共有します。
  • カスタム システムを使用して、サブスクリプション キーをチームで使用できます。

Azure portal でサブスクリプションを作成して管理する

API の公開元は、Azure portal で直接サブスクリプションを作成できます。

ポータルで作成すると、サブスクリプションはアクティブ状態になります。つまり、サブスクライバーは、有効なサブスクリプション キーを使用して関連する API を呼び出すことができます。 サブスクリプションの状態は必要に応じて変更できます。たとえば、API アクセスを防ぐ目的でサブスクリプションを中断、取り消し、または削除することができます。

API または製品アクセスのサブスクリプション要件を有効または無効にする

API を作成する際、既定では API アクセスにサブスクリプション キーが必要です。 同様に、製品を作成する場合、既定では、製品に追加する API にアクセスするためにサブスクリプション キーが必要です。 シナリオによっては、API 公開元は、サブスクリプションを必要としない製品または特定の API を公開することがあります。 公開元は特定の API への、セキュリティで保護されていない (匿名) アクセスを有効にできますが、クライアント アクセスをセキュリティで保護するために別のメカニズムを構成することが推奨されています。

注意事項

サブスクリプションを必要としない製品または API を構成する場合は注意が必要です。 この構成では制限が過度に緩められ、API が特定の API セキュリティの脅威に対してより脆弱になるおそれがあります。

サブスクリプション要件は、API または製品の作成時、または後日無効にすることができます。

ポータルを使用してサブスクリプション要件を無効にするには:

  • 製品の要件の無効化 - 製品の [設定] ページで [Requires subscription] (サブスクリプションを要求する) を無効にします
  • API の要件の無効化 - API の [設定] ページで [Subscription required] (サブスクリプションが必要) を無効にします。

サブスクリプション要件を無効にすると、選択した 1 つまたは複数の API にサブスクリプション キーなしでアクセスできます。

API Management でサブスクリプション キーを使用して、または使用しないで要求を処理する方法

サブスクリプション キーを使用した API 要求

API Management では、サブスクリプション キーを持つクライアントから API 要求を受信すると、次のルールに従ってその要求が処理されます。

  1. アクティブなサブスクリプションに関連する有効なキー (次のいずれか) かどうかの確認

    • API にスコープ指定されたサブスクリプション
    • API に割り当てられている製品にスコープ指定されたサブスクリプション
    • すべての API にスコープ指定されたサブスクリプション
    • サービス スコープ サブスクリプション (組み込みのすべてのアクセス サブスクリプション)

    適切なスコープでアクティブなサブスクリプションの有効なキーが指定されている場合は、アクセスが許可されます。 ポリシーは、そのスコープでのポリシー定義の構成に応じて適用されます。

  2. それ以外の場合、アクセスは拒否されます (401 アクセス拒否エラー)。

サブスクリプション キーを使用しない API 要求

API Management では、サブスクリプション キーのないクライアントから API 要求を受信すると、次のルールに従ってその要求を処理します。

  1. まず、API を含むがサブスクリプションを必要としない製品 ("オープンな" 製品) が存在するかどうかを確認します。 オープンな製品が存在する場合は、その製品用に構成された API、ポリシー、およびアクセス規則のコンテキストで要求を処理します。
  2. API を含むオープンな製品が見つからない場合は、API にサブスクリプションが必要かどうかを確認します。 サブスクリプションが必要ない場合は、その API と操作のコンテキストで要求を処理します。
  3. 構成済みの製品または API が見つからない場合、アクセスは拒否されます (401 アクセス拒否エラー)。

概要テーブル

次の表は、シナリオごとに、サブスクリプション キーの有無にかかわらず、ゲートウェイが API 要求を処理する方法をまとめたものです。 意図しない匿名 API アクセスが可能になる可能性のある構成に注目してください。

API に割り当てられているすべての製品でサブスクリプションが必要 API にサブスクリプションが必要 サブスクリプション キーを使用した API 呼び出し サブスクリプション キーを使用しない API 呼び出し 一般的なシナリオ
✔️ ✔️ アクセス許可

• 製品スコープ キー
• API スコープ キー
• すべての API スコープ キー
• サービス スコープ キー

アクセスが拒否されました:

• 該当する製品または API にスコープ指定されていないその他のキー
アクセスが拒否されました 製品スコープまたは API スコープのサブスクリプションを使用した保護された API アクセス
✔️ アクセス許可

• 製品スコープ キー
• API スコープ キー
• すべての API スコープ キー
• サービス スコープ キー

アクセスが拒否されました:

• 該当する製品または API にスコープ指定されていないその他のキー
アクセス許可 (API コンテキスト) • 製品スコープのサブスクリプションを使用した保護された API アクセス

• API への匿名アクセス 匿名アクセスを想定していない場合は、認証と認可を強制するように API レベルのポリシーを構成します。
1 ✔️ アクセス許可

• 製品スコープ キー
• API スコープ キー
• すべての API スコープ キー
• サービス スコープ キー

アクセスが拒否されました:

• 該当する製品または API にスコープ指定されていないその他のキー
アクセス許可 (オープンな製品のコンテキスト) • API スコープ サブスクリプションを使用した保護された API アクセス

• API への匿名アクセス 匿名アクセスを想定していない場合は、認証と認可を強制するように製品ポリシーを構成します。
1 アクセス許可

• 製品スコープ キー
• API スコープ キー
• すべての API スコープ キー
• サービス スコープ キー

アクセスが拒否されました:

• 該当する製品または API にスコープ指定されていないその他のキー
アクセス許可 (オープンな製品のコンテキスト) API への匿名アクセス。 匿名アクセスを想定していない場合は、認証と認可を強制するように製品ポリシーを構成します。

1 オープンな製品があります。

考慮事項

  • 製品が公開されているかどうかを問わず、製品コンテキストでの API アクセスは同じです。 製品の公開を解除すると、開発者ポータルで非表示になりますが、新規または既存のサブスクリプション キーが無効になるわけではありません。
  • 製品または API にサブスクリプションが必要ない場合でも、その製品または API へのアクセスを可能にするアクティブなサブスクリプションの有効なキーを引き続き使用できます。
  • API アクセスの "コンテキスト" とは、特定のスコープ (API や製品など) で適用されるポリシーとアクセス制御を意味します。

次の手順

API Management の詳細情報:

  • API Management ポリシーがさまざまなスコープでどのように適用されるかを確認します。
  • API Management の他の概念を確認します。
  • チュートリアルに従って API Management の詳細を確認します。
  • FAQ ページで一般的な質問を確認します。