次の方法で共有


Azure Load Testing を使用してセキュリティで保護されたエンドポイントをロード テストする

この記事では、認証を必要とするアプリケーション エンドポイントで Azure Load Testing を使用する方法について説明します。 アプリケーションの実装によっては、アクセス トークン、ユーザー資格情報、マネージド ID、またはクライアント証明書を使用して要求を認証できます。

Azure Load Testing では、認証済みエンドポイントに対して次のオプションがサポートされています。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、始める前に無料アカウントを作成してください。
  • Azure ロード テスト リソース。 ロード テストのリソースを作成するには、「ロード テストの作成と実行」を参照してください。

共有シークレットまたは資格情報を使用して認証する

このシナリオでは、アプリケーション エンドポイントにより、アクセス トークン、API キー、ユーザー資格情報などの共有シークレットを使用した認証を求められます。

次の図は、ロード テストにおいて共有シークレットまたは資格情報を使用してアプリケーション エンドポイントで認証する方法を示しています。

Azure Load Testing で共有シークレット認証を使用する方法を示す図。

共有シークレットまたはユーザー資格情報を使用して認証するフローでは:

  1. シークレットまたは資格情報 を安全に格納します (Azure Key Vault や CI/CD シークレット ストアなど)。
  2. ロード テスト構成でシークレットを参照します。
  3. JMeter ベースのテストの場合は、 GetSecret 関数を使用してシークレット値を取得します。 Locust ベースのテストの場合は、getenv 関数を使用してシークレットを取得します。 シークレット値をアプリケーション要求に渡します。

シークレットを安全に格納する

セキュリティ情報をテスト スクリプトに格納して公開しないように、シークレットを Azure Key Vault または CI/CD シークレット ストアに安全に格納できます。

次の 2 つの方法のいずれかでシークレット ストアにセキュリティ情報を追加できます。

ロード テスト構成でシークレットを参照する

JMeter テスト スクリプトでシークレット値を取得する前に、ロード テスト構成でシークレットを参照する必要があります。

Azure portal では、Azure Key Vault に格納されたシークレットを参照できます。 Azure portal でロード テスト シークレットを追加して構成するには:

  1. Azure portal でロード テスト リソースに移動し、[テスト] を選択してロード テストの一覧を表示します。

  2. 一覧からテストを選択し、[編集] を選択してロード テスト構成を編集します。

    Azure portal 内でロード テストを編集する方法を示すスクリーンショット。

  3. [パラメーター] タブで、シークレットの詳細を入力します。

    フィールド
    名前 シークレットの名前。 この名前を GetSecret 関数に指定して、テスト スクリプトのシークレット値を取得します。
    価値 Azure Key Vault シークレット識別子と一致します。

    Azure portal 内でロード テストにシークレットを追加する方法を示すスクリーンショット。

  4. [適用] を選択して、ロード テスト構成の変更を保存します。

JMeter スクリプトでシークレット値を取得して更新する

これで、JMeter スクリプトで GetSecret カスタム関数を使用してシークレット値を取得し、アプリケーション要求に渡せるようになりました。 たとえば、Authorization HTTP ヘッダーを使用して、OAuth トークンを要求に渡します。

  1. まず、GetSecret カスタム関数を使用してシークレット値を取得するユーザー定義変数を作成します。

    GetSecret 関数は、Azure Key Vault または CI/CD シークレット ストアからの値の取得を抽象化します。

    JMeter で GetSecret 関数を使用するユーザー定義変数を追加する方法を示すスクリーンショット。

  2. JMeter サンプラー コンポーネントを更新して、要求にシークレットを渡します。

    たとえば、OAuth2 アクセス トークンを指定するには、次のように Authorization を追加して HTTP Header Manager HTTP ヘッダーを構成します。

    JMeter で要求に承認ヘッダーを追加する方法を示すスクリーンショット。

Locust スクリプトでシークレット値を取得して使用する

これで、Locustスクリプトでシークレット値を取得し、アプリケーションリクエストに渡すことができます。 たとえば、Authorization HTTP ヘッダーを使用して、OAuth トークンを要求に渡します。

ロード テスト構成で構成されたシークレットには、環境変数としてアクセスできます。

  1. ロード テスト構成で指定されたシークレットを使用して変数を初期化します。
my_secret = os.getenv("appToken")
  1. Azure KeyVault に格納されているシークレット値を使用するには、テスト スクリプトの変数を参照します。

クライアント証明書による認証

このシナリオでは、アプリケーション エンドポイントは、認証にクライアント証明書を使用することを要求します。 Azure Load Testing では、Public Key Certificate Standard #12 (PKCS12) タイプの証明書がサポートされています。 ロード テストで 複数のクライアント証明書を使用 することもできます。

次の図は、ロード テストにおいてクライアント証明書を使用してアプリケーション エンドポイントで認証する方法を示しています。

Azure Load Testing でクライアント証明書認証を使用する方法を示す図。

クライアント証明書を使用して認証するフローでは:

  1. クライアント証明書を Azure Key Vault に安全に格納します。
  2. ロード テスト構成で証明書を参照します。
  3. JMeter ベースのテストの場合、Azure Load Testing はすべてのアプリケーションに証明書を透過的に渡します。 Locustベースのテストの場合は、テストスクリプトで証明書を取得し、要求に渡すことができます。

クライアント証明書を Azure Key Vault に格納する

クライアント証明書を JMeter スクリプトと一緒に保存して開示することを避けるには、Azure Key Vault に証明書を格納します。

証明書のインポートの手順に従って、Azure Key Vault に証明書を格納します。

重要

Azure Load Testing では、PKCS12 証明書のみがサポートされます。 クライアント証明書を PFX ファイル形式でアップロードします。

Azure Key Vault にアクセス権を付与する

ロード テスト シークレットまたは証明書を Azure Key Vault に格納すると、ロード テスト リソースでは、キー コンテナーにアクセスするためにマネージド IDが使用されます。 マネージド ID を構成したら、ロード テスト リソースのマネージド ID に、キー コンテナーからこれらの値を読み取るアクセス許可を付与する必要があります。

Azure Key Vault からシークレットまたは証明書を読み取るアクセス許可を Azure ロード テスト リソースに付与するには:

  1. Azure portal で、Azure Key Vault リソースに移動します。

    キー コンテナーがない場合は、「Azure Key Vault のクイックスタート」の手順に従って作成します。

  2. 左側のウィンドウで、[アクセス ポリシー] を選択し、[+ 作成] を選択します。

  3. [アクセス許可] タブの [シークレットのアクセス許可] で、[取得] を選択し、[次へ] を選択します。

    Azure Load Testing では、証明書の秘密キーが使用可能であることを確認するために、証明書がシークレットとして取得されます。

  4. [プリンシパル] タブで、ロード テスト リソースのマネージド ID を検索して選択し、[次へ] を選択します。

    システム割り当てマネージド ID を使用している場合、マネージド ID 名は Azure ロード テスト リソースの名前と一致します。

  5. 次へを再度選択します。

    テストの実行時に、ロード テスト リソースに関連付けられているマネージド ID で、キー コンテナーからロード テストのシークレットまたは証明書が読み取れるようになりました。

ロード テスト構成で証明書を参照する

クライアント証明書をアプリケーション要求に渡すには、ロード テスト構成で証明書を参照する必要があります。

Azure portal 内でロード テストにクライアント証明書を追加するには:

  1. Azure portal のロード テスト リソースに移動します。 ロード テストがまだない場合は、JMeter スクリプトを使用して新しいロード テストを作成します。

  2. 左側のウィンドウで [テスト] を選択して、ロード テストの一覧を表示します。

  3. 一覧からテストを選択し、[編集] を選択してロード テスト構成を編集します。

    Azure portal 内でロード テストを編集する方法を示すスクリーンショット。

  4. [パラメーター] タブで、証明書の詳細を入力します。

    フィールド
    名前 証明書の名前。
    価値 証明書の Azure Key Vault シークレット識別子と一致します。
  5. [適用] を選択して、ロード テスト構成の変更を保存します。

ロード テストを実行すると、Azure Load Testing によって Azure Key Vault からクライアント証明書が取得され、各 JMeter Web 要求に自動的に挿入されます。

Locustベースのテストの場合は、証明書を取得してテストスクリプトで使用できます。 ロード テスト構成で構成された証明書は、 ALT_CERTIFICATES_DIRで使用できます。

cert_dir = os.getenv("ALT_CERTIFICATES_DIR")
cert_file = open(os.path.join(cert_dir), "cert_name_in_keyvault.pfx")

マネージド ID による認証

このシナリオでは、アプリケーション エンドポイントでは、 マネージド ID を使用して認証する必要があります。 システム割り当てマネージド ID とユーザー割り当てマネージド ID の両方を使用できます。

マネージド ID を使用して認証するフローは次のとおりです。

  1. ターゲット エンドポイントが識別するマネージド ID を Azure Load Testing リソースに割り当てます。
  2. ロード テスト構成でマネージド ID を選択します。

ロード テスト スクリプトを設定して 、マネージド ID を使用してアクセス トークンをフェッチ し、そのトークンを使用してターゲット エンドポイントに対する要求を認証する必要があります。 たとえば、Azure Instance Metadata Service (IMDS) エンドポイントへの HTTP REST 呼び出しを通じてトークンを取得し、 Authorization HTTP ヘッダーを使用して要求にトークンを渡すことができます。

マネージド ID を割り当てる

ターゲット エンドポイントへの必要なアクセス権を持つマネージド ID を Azure Load Testing リソースに割り当てます。 テストを実行すると、Azure Load Testing によってこの ID がエンジン インスタンスに割り当てられます。 これにより、マネージド ID を使用してアクセストークンを取得する要求が成功します。

システム割り当てマネージド ID またはユーザー割り当てマネージド ID のいずれかを使用できます。

  • システム割り当てマネージド ID を使用するには、まず、 システム割り当てマネージド ID を Azure Load Testing リソースに割り当てます。 有効になったら、ターゲット エンドポイントでこの ID に必要な RBAC アクセス許可を指定します。

  • ユーザー割り当てマネージド ID を使用するには、まず、 ユーザー割り当て ID を Azure Load Testing リソースに割り当てます。 この ID にターゲット エンドポイントに必要な RBAC アクセス許可がない場合は、必要なアクセス許可を指定します。 テスト スクリプトで複数のユーザー割り当て複数の ID を使用する場合は、リソースに複数の ID を割り当て、必要な RBAC アクセス許可があることを確認します。

ロード テスト構成でマネージド ID を選択する

Azure Load Testing でテストを作成または編集するときに、必要なマネージド ID を選択します。

Azure portal で認証用のマネージド ID を選択して構成するには:

  1. Azure portal でロード テスト リソースに移動し、[テスト] を選択してロード テストの一覧を表示します。

  2. 一覧からテストを選択し、[編集] を選択してロード テスト構成を編集します。

    Azure portal 内でロード テストを編集する方法を示すスクリーンショット。

  3. [ テスト 計画 ] タブで、 認証シナリオ用にマネージド ID を構成します。 必要に応じて、[システム割り当て ID] または [ユーザー割り当て ID] を選択します。

    Azure portal のロード テストで認証のマネージド ID を選択する方法を示すスクリーンショット。

  4. [ユーザー割り当て ID] を選択した場合は、[ ユーザー割り当て ID ] ドロップダウンから必要な ID を選択します。

  5. [適用] を選択して、ロード テスト構成の変更を保存します。

重要

マネージド ID を認証に使用する場合、リージョン間の負荷分散は有効になりません。