Azure API Management でクライアント証明書認証を使用してバックエンド サービスを保護する

適用対象: すべての API Management レベル

API Management には、クライアント証明書と相互 TLS 認証を使用して API のバックエンド サービスへのアクセスを保護する機能があります。 このガイドでは、Azure portal を使用して Azure API Management サービス インスタンスで証明書を管理する方法について説明します。 また、証明書を使用してバックエンド サービスにアクセスするように API を構成する方法についても説明します。

API Management REST APIを使用して API Management 証明書を管理することもできます。

証明書のオプション

API Management には、バックエンド サービスへのアクセスをセキュリティで保護するために使用される証明書を管理するためのオプションが 2 つあります。

  • Azure Key Vault で管理される証明書を参照する
  • API Management で証明書ファイルを直接追加する

API Management のセキュリティ向上に役立つため、キー コンテナー証明書を使用することをお勧めします。

  • キー コンテナーに格納されている証明書は、サービス間で再利用できます
  • キー コンテナーに格納されている証明書には、きめ細かいアクセス ポリシーを適用できます
  • キー コンテナーで更新された証明書は、API Management で自動的にローテーションされます。 キー コンテナー内で更新が行われると、4 時間以内に API Management 内の証明書が更新されます。 また、Azure portal または管理 REST API を使用して、証明書を手動で更新することもできます。

前提条件

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

  • API Management サービス インスタンスをまだ作成していない場合は、API Management サービス インスタンスの作成に関するページを参照してください。

  • バックエンド サービスがクライアント証明書の認証用にが構成されている必要があります。 Azure App Service で証明書認証を構成する場合は、この記事を参照してください。

  • Azure キー コンテナーでの管理用の証明書とパスワードにアクセスするか、API Management サービスにアップロードする必要があります。 証明書は、PFX 形式でなければなりません。 自己署名証明書も許可されます。

    自己署名証明書を使用する場合は、以下を行います。

キー コンテナー統合の前提条件

  1. まだキー コンテナーがない場合は作成します。 キー コンテナーを作成する手順については、「クイックスタート: Azure portal を使用してキー コンテナーを作成する」を参照してください。

    キー コンテナーに証明書を作成またはインポートする方法については、「クイック スタート: Azure portal を使用して Azure Key Vault から証明書の設定と取得を行う」を参照してください。

  2. API Management インスタンスで、システムによって割り当てられた、またはユーザーが割り当てたマネージド ID を有効にします。

キー コンテナーへのアクセスを構成する

  1. ポータルで、キー コンテナーに移動します。

  2. 左側のメニューで [アクセス構成] を選択し、構成されているアクセス許可モデルをメモします。

  3. アクセス許可モデルに応じて、API Management マネージド ID のキー コンテナー アクセス ポリシーまたは Azure RBAC アクセスを構成します。

    キー コンテナー アクセス ポリシーを追加する手順は、以下のとおりです。

    1. 左側のメニューで、[アクセス ポリシー] を選択します。
    2. [アクセス ポリシー] ページで、[+ 作成] を選択します。
    3. [アクセス許可] タブの [シークレットのアクセス許可] で、[取得][リスト] を選択し、[次へ] を選択します。
    4. [プリンシパル] タブの [Select principal] (プリンシパルの選択) で、マネージド ID のリソース名を検索し、[次へ] を選択します。 システムによって割り当てられた ID を使用している場合、プリンシパルは API Management インスタンスの名前です。
    5. もう一度 [次へ] を選択します [確認および作成] タブで、 [作成] を選択します。

    Azure RBAC アクセスを構成する手順は、以下のとおりです。

    1. 左側のメニューで [アクセス制御 (IAM)] を選択します。
    2. [アクセス制御 (IAM)] ページで、[ロールの割り当てを追加] を選択します。
    3. [ロール] タブで [キー コンテナー シークレット ユーザー] を選択します。
    4. [メンバー] タブで、[マネージド ID]>[+ Select members] (+ メンバーの選択) を選択します。
    5. [Select managed identity] (マネージド ID の選択) ページで、API Management インスタンスに関連付けられているシステム割り当てマネージド ID またはユーザー割り当てマネージド ID を選択し、[選択] を選択します。
    6. [レビューと割り当て] を選択します。

Key Vault ファイアウォールの要件

キー コンテナーで Key Vault ファイアウォールが有効になっている場合、追加要件は次のとおりです。

  • キー コンテナーにアクセスするには、API Management インスタンスのシステムによって割り当てられたマネージド ID を使用する必要があります。

  • Key Vault ファイアウォールで、 [Allow Trusted Microsoft Services to bypass this firewall](信頼された Microsoft サービスがこのファイアウォールをバイパスすることを許可する) オプションを有効にします。

  • Azure API Management に追加する証明書またはシークレットを選択するときに、ローカル クライアントの IP アドレスがキー コンテナーへの一時的なアクセスを許可されるようにする必要があります。 詳細については、「Azure Key Vault のネットワーク設定を構成する」を参照してください。

    構成が完了したら、キー コンテナーのファイアウォールでクライアント アドレスをブロックできます。

仮想ネットワークの要件

API Management インスタンスが仮想ネットワークにデプロイされている場合は、次のネットワーク設定も構成してください。

  • API Management サブネットで Azure Key Vault へのサービス エンドポイントを有効にします。
  • AzureKeyVault と AzureActiveDirectory のサービス タグへの送信トラフィックを許可するネットワーク セキュリティ グループ (NSG) 規則を構成します。

詳細については、VNet で Azure API Management を設定するときのネットワーク構成に関する記事を参照してください。

キー コンテナー証明書を追加する

キー コンテナー統合の前提条件」を参照してください。

重要

API Management インスタンスにキー コンテナー証明書を追加する場合は、キー コンテナーのシークレットを一覧表示するアクセス許可が必要です。

注意事項

API Management でキー コンテナー証明書を使用する場合は、証明書、キー コンテナー、またはキー コンテナーにアクセスするために使用するマネージド ID を削除しないように注意してください。

API Management にキー コンテナー証明書を追加するには、次の操作を行います。

  1. Azure portal で、API Management インスタンスに移動します。

  2. [セキュリティ][証明書] を選択します。

  3. [証明書]>[+ 追加] を選択します。

  4. [ID] に、希望の名前を入力します。

  5. [証明書] で、 [キー コンテナー] を選択します。

  6. キー コンテナー証明書の識別子を入力するか、 [選択] を選択してキー コンテナーから証明書を選択します。

    重要

    キー コンテナー証明書の識別子を自分で入力する場合は、バージョン情報が含まれていないことを確認してください。 そうしないと、キー コンテナーで更新が行われた後に証明書が API Management で自動的にローテーションされません。

  7. [クライアント ID] で、システムによって割り当てられた、または既存のユーザー割り当てのマネージド ID を選択します。 API Management サービスでのマネージド ID の追加または変更方法については、こちらを参照してください

    Note

    ID には、キー コンテナーから証明書を取得および一覧表示するためのアクセス許可が必要です。 キー コンテナーへのアクセスをまだ構成していない場合は、必要なアクセス許可を使用して ID を自動的に構成できるように、API Management によってプロンプトが表示されます。

  8. [追加] を選択します。

    ポータルでキー コンテナー証明書を API Management に追加するスクリーンショット。

  9. [保存] を選択します。

証明書のアップロード

API Management にクライアント証明書をアップロードするには、次の操作を行います。

  1. Azure portal で、API Management インスタンスに移動します。

  2. [セキュリティ][証明書] を選択します。

  3. [証明書]>[+ 追加] を選択します。

  4. [ID] に、希望の名前を入力します。

  5. [証明書] で、 [カスタム] を選択します。

  6. 証明書 .pfx ファイルを参照して選択し、そのパスワードを入力します。

  7. [追加] を選択します。

    ポータルでクライアント証明書を API Management にアップロードするスクリーンショット。

  8. [保存] を選択します。

証明書がアップロードされると、 [証明書] ウィンドウに表示されます。 証明書が多数ある場合は、ゲートウェイ認証にクライアント証明書を使用するように API を構成するために、必要な証明書の拇印をメモします。

ゲートウェイ認証にクライアント証明書を使用するように API を構成する

  1. Azure portal で、API Management インスタンスに移動します。

  2. [API][API] を選択します。

  3. 一覧から API を選びます。

  4. [デザイン] タブで、 [バックエンド] セクションのエディター アイコンを選択します。

  5. [ゲートウェイ資格情報][クライアント証明書] を選択し、ドロップダウンから証明書を選択します。

  6. [保存] を選択します。

    ゲートウェイ認証にクライアント証明書を使用する

注意事項

この変更は即時に有効になり、その API の操作の呼び出しは、証明書を使用してバックエンド サーバーを認証するようになります。

ヒント

API のバックエンド サービスのゲートウェイ認証に証明書を指定すると、その API のポリシーに追加され、ポリシー エディターで表示できるようになります。

自己署名証明書の証明書チェーン検証を無効にする

自己署名証明書を使用している場合は、API Management がバックエンド システムと通信するために、証明書チェーン検証を無効にする必要があります。 そうしないと、エラー コード 500 が返されます。 これを構成するには、New-AzApiManagementBackend (新しいバックエンド) またはSet-AzApiManagementBackend (既存のバックエンド) PowerShell コマンドレットを使用して、-SkipCertificateChainValidation パラメーターを True に設定します。

$context = New-AzApiManagementContext -resourcegroup 'ContosoResourceGroup' -servicename 'ContosoAPIMService'
New-AzApiManagementBackend -Context  $context -Url 'https://contoso.com/myapi' -Protocol http -SkipCertificateChainValidation $true

バックエンド REST API を使用して証明書チェーンの検証を無効にすることもできます。

クライアント証明書の削除

証明書を削除するには、それを選択して、コンテキスト メニュー ( ... ) から [削除] を選択します。

証明書を削除します

重要

証明書がポリシーによって参照されている場合、警告画面が表示されます。 証明書を削除するには、最初に、証明書を使用するように構成されたすべてのポリシーからそれを削除する必要があります。

次のステップ