Marketplace の使用状況測定サービスの認証戦略
Marketplace 測定サービスでは、次の 2 つの認証戦略がサポートされています。
この記事では、さまざまな認証戦略を使用して、Marketplace 測定サービスを使用してカスタム メーターを安全に送信するタイミングと方法について説明します。
適用可能なオファーの種類は、マネージド アプリケーション プランの種類を持つトランザクション可能な SaaS と Azure アプリケーションです。
定義済みの固定 Microsoft Entra アプリケーション ID を使用してカスタム メーターを送信して認証します。
SaaS オファーの場合、これが唯一使用可能なオプションです。 これは、SaaS アプリケーションを 登録に関するページで説明されているように、SaaS オファーを発行するための必須の手順です。
マネージド アプリケーション プランを使用する Azure アプリケーションの場合は、次の場合にこの戦略の使用を検討する必要があります。
- バックエンド サービスと通信するメカニズムが既にあり、このメカニズムを拡張して、中央サービスからカスタム メーターを出力する必要があります。
- 複雑なカスタム メーター ロジックがあります。 マネージド アプリケーション リソースではなく、中央の場所でこのロジックを実行します。
アプリケーションを登録するときに、プログラムによって Microsoft Entra セキュリティ トークンを要求できます。 発行元は、このトークンを使用し、それを解決するための要求を行う必要があります。
これらのトークンの詳細については、Microsoft Entra アクセス トークンの を参照してください。
POST
https://login.microsoftonline.com/*{tenantId}*/oauth2/token
パラメーター名 | 必須 | 説明 |
---|---|---|
tenantId |
本当 | 登録済みの Microsoft Entra アプリケーションのテナント ID。 |
ヘッダー名 | 必須 | 説明 |
---|---|---|
Content-Type |
本当 | 要求に関連付けられているコンテンツ タイプ。 既定値は application/x-www-form-urlencoded です。 |
プロパティ名 | 必須 | 説明 |
---|---|---|
Grant_type |
本当 | 許可の種類。 client_credentials を使用します。 |
Client_id |
本当 | Microsoft Entra アプリに関連付けられているクライアント/アプリ識別子。 |
client_secret |
本当 | Microsoft Entra アプリに関連付けられているシークレット。 |
Resource |
正しい | トークンが要求されるターゲット リソース。 00001111-aaaa-2222-bbbb-3333cccc4444 を使用します。 |
名前 | 種類 | 説明 |
---|---|---|
200 OK |
TokenResponse |
要求は成功しました。 |
応答トークンの例:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "15251…",
"not_before": "15251…",
"resource": "00001111-aaaa-2222-bbbb-3333cccc4444",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9…"
}
適用可能なオファーの種類は、Kubernetes アプリ オファーと、マネージド アプリケーション プランの種類を持つ Azure アプリケーションです。
この方法を使用すると、デプロイされたリソース ID を認証して、カスタム メーターの使用状況イベントを送信できます。 デプロイの境界内に使用状況を出力するコードを埋め込むことができます。
注意
発行元は、使用状況を出力するリソースがロックされていることを確認して、改ざんされないようにする必要があります。
マネージド アプリケーションには、Virtual Machines から Azure Functions まで、さまざまな種類のリソースを含めることができます。 さまざまなサービスのマネージド ID を使用して認証する方法の詳細については、Azure リソースのマネージド ID を使用する方法に関するページを参照してください。
たとえば、次の手順を使用して Windows VM を使用して認証します。
次のいずれかの方法を使用してマネージド ID が構成されていることを確認します。
システム ID を使用して Marketplace 測定サービス アプリケーション ID (
00001111-aaaa-2222-bbbb-3333cccc4444
) のアクセス トークンを取得し、VM に RDP 接続し、PowerShell コンソールを開き、コマンドを実行します。# curl is an alias to Web-Invoke PowerShell command # Get system identity access tokenn $MetadataUrl = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F" $Token = curl -H @{"Metadata" = "true"} $MetadataUrl | Select-Object -Expand Content | ConvertFrom-Json $Headers = @{} $Headers.Add("Authorization","$($Token.token_type) "+ " " + "$($Token.access_token)")
現在のリソース グループ 'ManagedBy' プロパティからマネージド アプリ ID を取得します (Kubernetes アプリ オファーでは必要ありません)。
# Get subscription and resource group $metadata = curl -H @{'Metadata'='true'} http://169.254.169.254/metadata/instance?api-version=2019-06-01 | select -ExpandProperty Content | ConvertFrom-Json # Make sure the system identity has at least reader permission on the resource group $managementUrl = "https://management.azure.com/subscriptions/" + $metadata.compute.subscriptionId + "/resourceGroups/" + $metadata.compute.resourceGroupName + "?api-version=2019-10-01" $resourceGroupInfo = curl -Headers $Headers $managementUrl | select -ExpandProperty Content | ConvertFrom-Json $managedappId = $resourceGroupInfo.managedBy
Marketplace 測定サービス API を使用して使用状況を出力します。
Kubernetes アプリ オファーの場合は、次の手順に従ってアプリから認証トークンを取得します。 詳細については、サンプル コード 参照してください。
アプリケーションのマネージド サービス ID (MSI) クライアント ID を使用して、Microsoft Marketplace Metering API と通信するための認証トークンを生成する必要があります。 詳細については、サンプル コード 参照してください。
# Audience for the token to be generated resource = '00001111-aaaa-2222-bbbb-3333cccc4444' clientId = <identity client id> url = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&clientId={0}&resource={1}".format(clientId,resource) headers = {'Metadata': 'true'} # Need to import requests module response = requests.get(url) response = requests.get(url, headers=headers) authToken = response.json()
Marketplace 測定サービス API を使用して使用状況を出力する