英語で読む

次の方法で共有


Marketplace の使用状況測定サービスの認証戦略

Marketplace 測定サービスでは、次の 2 つの認証戦略がサポートされています。

この記事では、さまざまな認証戦略を使用して、Marketplace 測定サービスを使用してカスタム メーターを安全に送信するタイミングと方法について説明します。

Microsoft Entra セキュリティ トークンの使用

適用可能なオファーの種類は、マネージド アプリケーション プランの種類を持つトランザクション可能な SaaS と Azure アプリケーションです。

定義済みの固定 Microsoft Entra アプリケーション ID を使用してカスタム メーターを送信して認証します。

SaaS オファーの場合、これが唯一使用可能なオプションです。 これは、SaaS アプリケーションを 登録に関するページで説明されているように、SaaS オファーを発行するための必須の手順です。

マネージド アプリケーション プランを使用する Azure アプリケーションの場合は、次の場合にこの戦略の使用を検討する必要があります。

  • バックエンド サービスと通信するメカニズムが既にあり、このメカニズムを拡張して、中央サービスからカスタム メーターを出力する必要があります。
  • 複雑なカスタム メーター ロジックがあります。 マネージド アプリケーション リソースではなく、中央の場所でこのロジックを実行します。

アプリケーションを登録するときに、プログラムによって Microsoft Entra セキュリティ トークンを要求できます。 発行元は、このトークンを使用し、それを解決するための要求を行う必要があります。

これらのトークンの詳細については、Microsoft Entra アクセス トークンの を参照してください。

Microsoft Entra アプリに基づいてトークンを取得する

HTTP メソッド

POST

要求 URL

https://login.microsoftonline.com/*{tenantId}*/oauth2/token

URI パラメーター

パラメーター名 必須 説明
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 要求は成功しました。

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…"
  }

Azure マネージド ID トークンの使用

適用可能なオファーの種類は、Kubernetes アプリ オファーと、マネージド アプリケーション プランの種類を持つ Azure アプリケーションです。

この方法を使用すると、デプロイされたリソース ID を認証して、カスタム メーターの使用状況イベントを送信できます。 デプロイの境界内に使用状況を出力するコードを埋め込むことができます。

注意

発行元は、使用状況を出力するリソースがロックされていることを確認して、改ざんされないようにする必要があります。

マネージド アプリケーションには、Virtual Machines から Azure Functions まで、さまざまな種類のリソースを含めることができます。 さまざまなサービスのマネージド ID を使用して認証する方法の詳細については、Azure リソースのマネージド ID を使用する方法に関するページを参照してください。

たとえば、次の手順を使用して Windows VM を使用して認証します。

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

  2. システム 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)")
    
  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 = '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()
    
  2. Marketplace 測定サービス API を使用して使用状況を出力する