Marketplace の測定サービスの認証方法
Marketplace の測定サービスでは、次の 2 つの認証方法をサポートしています。
この記事では、さまざまな認証戦略を使用して、Marketplace 測定サービスを使用してカスタム メーターを安全に送信するタイミングと方法について説明します。
Microsoft Entra セキュリティ トークンの使用
適用可能なオファーの種類は、処理可能な SaaS と、マネージド アプリケーション プラン タイプ対応の Azure アプリケーションです。
定義済みの固定 Microsoft Entra アプリケーション ID を使用してカスタム メーターを送信して認証します。
SaaS オファーの場合は、これが唯一使用可能なオプションです。 これは、「SaaS アプリケーションを登録する」で説明されているように、SaaS オファーを発行するための必須の手順です。
マネージド アプリケーション プラン対応の Azure アプリケーションの場合、次のケースでこの方法の使用を検討する必要があります。
- バックエンド サービスと通信するためのメカニズムが既にあり、中央のサービスからカスタム メーターを出力できるようにこのメカニズムを拡張する必要がある場合。
- 複雑なカスタム メーター ロジックを使用している場合。 このロジックは、マネージド アプリケーションのリソースではなく、中央の場所で実行してください。
アプリケーションを登録するときに、プログラムによって Microsoft Entra セキュリティ トークンを要求できます。 発行元は、このトークンを使用し、それを解決するための要求を行うことが期待されます。
これらのトークンの詳細については、「 Microsoft Entra アクセス トークンを参照してください。
Microsoft Entra アプリに基づいてトークンを取得する
HTTP メソッド
投稿
要求 URL
https://login.microsoftonline.com/*{tenantId}*/oauth2/token
URI パラメーター
パラメーター名 | 必須 | 説明 |
---|---|---|
tenantId |
True | 登録済みの Microsoft Entra アプリケーションのテナント ID。 |
要求ヘッダー
ヘッダー名 | 必須 | 説明 |
---|---|---|
Content-Type |
True | 要求に関連付けられたコンテンツの種類。 既定値は application/x-www-form-urlencoded です。 |
要求本文
プロパティ名 | 必須 | 説明 |
---|---|---|
Grant_type |
True | 付与タイプです。 client_credentials を使用してください。 |
Client_id |
True | Microsoft Entra アプリに関連付けられているクライアント/アプリ識別子。 |
client_secret |
True | Microsoft Entra アプリに関連付けられているシークレット。 |
Resource |
True | トークンを要求されたターゲット リソース。 20e940b3-4c77-4b0b-9a53-9e16a1b010a7 を使用してください。 |
回答
名前 | タイプ | 説明 |
---|---|---|
200 OK |
TokenResponse |
要求成功。 |
TokenResponse
サンプル応答トークン:
{
"token_type": "Bearer",
"expires_in": "3600",
"ext_expires_in": "0",
"expires_on": "15251…",
"not_before": "15251…",
"resource": "20e940b3-4c77-4b0b-9a53-9e16a1b010a7",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9…"
}
Azure マネージド ID トークンの使用
適用可能なオファーの種類は、Kubernetes アプリ オファーと、マネージド アプリケーション プランの種類を持つ Azure アプリケーションです。
この方法を使用すると、デプロイされたリソース ID を認証して、カスタム メーターの使用状況イベントを送信できます。 デプロイの境界内で使用状況を出力するコードを埋め込むことができます。
Note
発行元は、使用状況を出力するリソースがロックされていることを確認し、リソースが改ざんされないようにする必要があります。
マネージド アプリケーションには、Virtual Machines から Azure Functions まで、さまざまな種類のリソースを含めることができます。 さまざまなサービスでマネージド ID を使用して認証する方法の詳細については、Azure リソース用マネージド ID を使用する方法に関するセクションを参照してください)。
たとえば、次の手順を使用して Windows VM を使用して認証します。
次のいずれかの方法を使用して、マネージド ID が構成されていることを確認します。
システム ID を使用して Marketplace 測定サービス アプリケーション ID (
20e940b3-4c77-4b0b-9a53-9e16a1b010a7
) のアクセス トークンを取得し、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 = '20e940b3-4c77-4b0b-9a53-9e16a1b010a7' 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 を使用して使用状況を出力する