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