次の方法で共有


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 を使用して認証します。

  1. 次のいずれかの方法を使用して、マネージド ID が構成されていることを確認します。

  2. システム 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)")
    
  3. 現在のリソース グループ '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 
    
  4. Marketplace の測定サービス API を使用して、使用状況を出力します。

Kubernetes アプリ オファーの場合は、次の手順に従ってアプリから認証トークンを取得します。 詳細については、 サンプル コードを参照してください。

  1. アプリケーションのマネージド サービス 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()
    
  2. Marketplace 測定サービス API を使用して使用状況を出力する