Azure Load Testing を使用してセキュリティで保護されたエンドポイントをロード テストする
この記事では、認証を必要とするアプリケーション エンドポイントで Azure Load Testing を使用する方法について説明します。 アプリケーションの実装に応じて、認証要求にアクセス トークン、ユーザー資格情報、またはクライアント証明書を使用できます。
Azure Load Testing では、認証済みエンドポイントに対して次のオプションがサポートされています。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 Azure サブスクリプションをお持ちでない場合は、始める前に無料アカウントを作成してください。
- Azure ロード テスト リソース。 ロード テストのリソースを作成するには、「ロード テストの作成と実行」を参照してください。
共有シークレットまたは資格情報を使用して認証する
このシナリオでは、アプリケーション エンドポイントにより、アクセス トークン、API キー、ユーザー資格情報などの共有シークレットを使用した認証を求められます。
次の図は、ロード テストにおいて共有シークレットまたは資格情報を使用してアプリケーション エンドポイントで認証する方法を示しています。
共有シークレットまたはユーザー資格情報を使用して認証するフローでは:
- シークレットまたは資格情報 を安全に格納します (Azure Key Vault や CI/CD シークレット ストアなど)。
- ロード テスト構成でシークレットを参照します。
- JMeter スクリプトで、
GetSecret
関数を使用してシークレット値を取得し、シークレット値をアプリケーション要求に渡します。
シークレットを安全に格納する
セキュリティ情報を JMeter スクリプトに格納して開示することを避けるために、Azure Key Vault または CI/CD シークレット ストアにシークレットを安全に格納できます。
次の 2 つの方法のいずれかでシークレット ストアにセキュリティ情報を追加できます。
Azure Key Vault にシークレット情報を追加します。 シークレットを使用したロード テストのパラメーター化の手順に従ってシークレットを格納し、ロード テスト リソースでその値を読み取ることを承認します。
シークレット情報を CI/CD (GitHub Actions シークレットまたは Azure Pipelines シークレット変数) にシークレットとして追加します。
ロード テスト構成でシークレットを参照する
JMeter テスト スクリプトでシークレット値を取得する前に、ロード テスト構成でシークレットを参照する必要があります。
Azure portal では、Azure Key Vault に格納されたシークレットを参照できます。 Azure portal でロード テスト シークレットを追加して構成するには:
JMeter スクリプトでシークレット値を取得して更新する
これで、JMeter スクリプトで GetSecret
カスタム関数を使用してシークレット値を取得し、アプリケーション要求に渡せるようになりました。 たとえば、Authorization
HTTP ヘッダーを使用して、OAuth トークンを要求に渡します。
まず、
GetSecret
カスタム関数を使用してシークレット値を取得するユーザー定義変数を作成します。GetSecret
関数は、Azure Key Vault または CI/CD シークレット ストアからの値の取得を抽象化します。JMeter サンプラー コンポーネントを更新して、要求にシークレットを渡します。
たとえば、OAuth2 アクセス トークンを指定するには、次のように
HTTP Header Manager
を追加してAuthorization
HTTP ヘッダーを構成します。
クライアント証明書による認証
このシナリオでは、アプリケーション エンドポイントは、認証にクライアント証明書を使用することを要求します。 Azure Load Testing では、Public Key Certificate Standard #12 (PKCS12) タイプの証明書がサポートされています。 ロード テストで使用できるクライアント証明書は 1 つだけです。
次の図は、ロード テストにおいてクライアント証明書を使用してアプリケーション エンドポイントで認証する方法を示しています。
クライアント証明書を使用して認証するフローでは:
- クライアント証明書を Azure Key Vault に安全に格納します。
- ロード テスト構成で証明書を参照します。
- Azure Load Testing では、JMeter 内のすべてのアプリケーション要求に証明書が透過的に渡されます。
クライアント証明書を 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 ロード テスト リソースに付与するには:
Azure portal で Azure キー コンテナー リソースに移動します。
キー コンテナーがない場合は、「Azure Key Vault のクイックスタート」の手順に従って作成します。
左側のウィンドウで、[アクセス ポリシー] を選択し、[+ 作成] を選択します。
[アクセス許可] タブの [シークレットのアクセス許可] で、[取得] を選択し、[次へ] を選択します。
Note
Azure Load Testing では、証明書の秘密キーが使用可能であることを確認するために、証明書がシークレットとして取得されます。
[プリンシパル] タブで、ロード テスト リソースのマネージド ID を検索して選択し、[次へ] を選択します。
システム割り当てマネージド ID を使用している場合、マネージド ID 名は Azure ロード テスト リソースの名前と一致します。
次へを再度選択します。
テストの実行時に、ロード テスト リソースに関連付けられているマネージド ID で、キー コンテナーからロード テストのシークレットまたは証明書が読み取れるようになりました。
ロード テスト構成で証明書を参照する
クライアント証明書をアプリケーション要求に渡すには、ロード テスト構成で証明書を参照する必要があります。
Azure portal 内でロード テストにクライアント証明書を追加するには:
Azure portal のロード テスト リソースに移動します。 ロード テストがまだない場合は、JMeter スクリプトを使用して新しいロード テストを作成します。
左側のウィンドウで [テスト] を選択して、ロード テストの一覧を表示します。
一覧からテストを選択し、[編集] を選択してロード テスト構成を編集します。
[パラメーター] タブで、証明書の詳細を入力します。
フィールド 値 名前 証明書の名前。 Value 証明書の Azure Key Vault シークレット識別子と一致します。 [適用] を選択して、ロード テスト構成の変更を保存します。
ロード テストを実行すると、Azure Load Testing によって Azure Key Vault からクライアント証明書が取得され、各 JMeter Web 要求に自動的に挿入されます。
関連するコンテンツ
- ロード テストをパラメーター化する方法を確認します。