セキュリティで保護されたアプリケーション モデル フレームワークの有効化

Microsoft は、Microsoft Entra 多要素認証 (MFA) アーキテクチャを通じてクラウド ソリューション プロバイダー (CSP) パートナーとコントロール パネル ベンダー (CPV) を認証するための、セキュリティで保護されたスケーラブルなフレームワークを導入しています。

新しいモデルを使用して、Partner Center API の統合呼び出しのセキュリティを強化できます。 これにより、すべての関係者 (Microsoft、CSP パートナー、CPV を含む) がインフラストラクチャと顧客データをセキュリティ リスクから保護できます。

CSP プログラムを使用すると、顧客はパートナーを通じて Microsoft の製品やサービスを購入できます。 Microsoft との契約に従って、パートナーは、販売先の顧客の環境を管理し、サポートを提供する必要があります。 このチャネルを通じて購入した顧客は、パートナー企業が顧客のテナントに対して高い特権の管理アクセス権を持つため、購入元のパートナーに高い信頼を寄せることになります。

範囲

この記事は、CSP と CPV の両方に関連しています。

CPV

  • CPV とは、Partner Center API と統合するために CSP パートナーによって使用されるアプリを開発する独立系ソフトウェア ベンダーです。
  • CPV は、パートナー センターまたは API に直接アクセスできる CSP パートナーではありません。

CSP

  • アプリ ID とユーザー認証を使用し、Partner Center API と直接統合する CSP 間接プロバイダーと CSP ダイレクト パートナー。

セキュリティ要件

セキュリティ要件の詳細については、「パートナーのセキュリティ要件」を参照してください。

セキュリティで保護されたアプリケーション モデル

Marketplace アプリケーションでは、Microsoft API を呼び出すために CSP パートナーの特権を借用する必要があります。 このような機密性の高いアプリケーションに対するセキュリティ攻撃は、顧客データの侵害につながる可能性があります。

新しい認証フレームワークの概要と詳細については、「セキュリティで保護されたアプリケーション モデル フレームワーク」を参照してください。Marketplace アプリケーションを持続可能にして、セキュリティ侵害に対して堅牢にするための原則とベスト プラクティスが説明されています。

サンプル

次の概要ドキュメントとサンプル コードでは、パートナーがセキュア アプリケーション モデル フレームワークを実装する方法が説明されています。

REST

サンプル コードを使用してセキュア アプリケーション モデル フレームワークで REST 呼び出しを行うには、次の手順を行います。

  1. Web アプリを作成する

Web アプリを作成する

  1. Azure portal にサインインします。

  2. Microsoft Entra アプリを作成します。

  3. アプリケーションの要件に応じて、委任されたアプリケーションのアクセス許可を次のリソースに付与します。 必要に応じて、アプリケーション リソースに委任されたアクセス許可をさらに追加することができます。

    1. Microsoft パートナー センター (一部のテナントでは SampleBECApp が表示されます)

    2. Azure Management API (Azure API を 呼び出す予定の場合)

    3. Windows Azure Active Directory

  4. アプリのホーム URL が、ライブ Web アプリが実行されているエンドポイントに設定されていることを確認します。 このアプリは、Microsoft Entra ログイン呼び出しからの承認コードを受け入れる必要があります。 たとえば、次のセクションのサンプル コードでは、Web アプリが https://localhost:44395/ で実行されています。

  5. Microsoft Entra ID の Web アプリの設定から、次の情報に注意してください。

    • アプリケーション ID
    • アプリケーション シークレット

Note

アプリケーション シークレットとして証明書を使用することをお勧めします。 ただし、Azure portal でアプリケーション キーを作成することもできます。 次のセクションのサンプル コードではアプリケーション キーを使用しています。

認証コードを取得する

Web アプリが Microsoft Entra ログイン呼び出しから受け入れる認証コードを取得する必要があります。

  1. Microsoft Entra ID に ログインします

    パートナー センター API の呼び出し元のユーザー アカウント (管理エージェントやセールス エージェント アカウントなど) を使用してログインしてください。

  2. Application-Id を Microsoft Entra アプリ ID (GUID) に置き換えます

  3. プロンプトが表示されたら、MFA が構成されたユーザー アカウントを使用してログインします。

  4. メッセージが表示されたら、さらに MFA 情報 (電話番号または電子メール アドレス) を入力してログインを確認します。

  5. ログインすると、ブラウザーによって、認証コードを使用して Web アプリ エンドポイントに呼び出しがリダイレクトされます。 たとえば、次のサンプル コードを実行すると、https://localhost:44395/ にリダイレクトされます。

認証コード呼び出しのトレース

POST https://localhost:44395/ HTTP/1.1
Origin: https://login.microsoftonline.com
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referrer: https://login.microsoftonline.com/kmsi
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: OpenIdConnect.nonce.hOMjjrivcxzuI4YqAw4uYC%2F%2BILFk4%2FCx3kHTHP3lBvA%3D=dHVyRXdlbk9WVUZFdlFONVdiY01nNEpUc0JRR0RiYWFLTHhQYlRGNl9VeXJqNjdLTGV3cFpIWFg1YmpnWVdQUURtN0dvMkdHS2kzTm02NGdQS09veVNEbTZJMDk1TVVNYkczYmstQmlKUzFQaTBFMEdhNVJGVHlES2d3WGlCSlVlN1c2UE9sd2kzckNrVGN2RFNULWdHY2JET3RDQUxSaXRfLXZQdG00RnlUM0E1TUo1YWNKOWxvQXRwSkhRYklQbmZUV3d3eHVfNEpMUUthMFlQUFgzS01RS2NvMXYtbnV4UVJOYkl4TTN0cw%3D%3D

code=AuthorizationCodeValue&id_token=IdTokenValue&<rest of properties for state>

更新トークンを取得する

次に、認証コードを使用して更新トークンを取得する必要があります。

  1. 承認コードを使用して、Microsoft Entra ログイン エンドポイント https://login.microsoftonline.com/CSPTenantID/oauth2/token への POST 呼び出しを行います。 例については、次のサンプル呼び出しを参照してください。

  2. 返される更新トークンに注意してください。

  3. 更新トークンを Azure Key Vault に格納します。 詳細については、Key Vault API のドキュメントを参照してください。

重要

更新トークンは、Key Vault にシークレットとして格納する必要があります。

更新呼び出しのサンプル

プレースホルダー要求:

POST https://login.microsoftonline.com/CSPTenantID/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Content-Length: 966
Expect: 100-continue

要求本文:

resource=https%3a%2f%2fapi.partnercenter.microsoft.com&client_id=Application-Id&client_secret=Application-Secret&grant_type=authorization_code&code=AuthorizationCodeValue

プレースホルダーの応答:

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Content-Type: application/json; charset=utf-8

応答本文:

{"token_type":"Bearer","scope":"user_impersonation","expires_in":"3599","ext_expires_in":"3599","expires_on":"1547579127","not_before":"1547575227","resource":"https://api.partnercenter.microsoft.com","access_token":"Access

アクセス トークンを取得する

Partner Center API の呼び出しを行う前に、アクセス トークンを取得する必要があります。 アクセス トークンの有効期間は一般に制限されているため (たとえば、1 時間未満)、更新トークンを使用してアクセス トークンを取得する必要があります。

プレースホルダー要求:

POST https://login.microsoftonline.com/CSPTenantID/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: login.microsoftonline.com
Content-Length: 1212
Expect: 100-continue

要求本文:

resource=https%3a%2f%2fapi.partnercenter.microsoft.com&client_id=Application-Id &client_secret= Application-Secret&grant_type=refresh_token&refresh_token=RefreshTokenVlaue&scope=openid

プレースホルダーの応答:

HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Content-Type: application/json; charset=utf-8

応答本文:

{"token_type":"Bearer","scope":"user_impersonation","expires_in":"3600","ext_expires_in":"3600","expires_on":"1547581389","not_before":"1547577489","resource":"https://api.partnercenter.microsoft.com","access_token":"AccessTokenValue","id_token":"IDTokenValue"}

Partner Center API の呼び出しを行う

Partner Center API を呼び出すには、アクセス トークンを使用する必要があります。 次の呼び出し例を参照してください。

Partner Center API の呼び出し例

GET https://api.partnercenter.microsoft.com/v1/customers/CustomerTenantId/users HTTP/1.1
Authorization: Bearer AccessTokenValue
Accept: application/json
X-Locale: en-US
Host: api.partnercenter.microsoft.com

PowerShell

パートナー センター PowerShell モジュールを使用して、パートナー センター リソースを管理できます。 これは、パートナー コミュニティによってメインされ、Microsoft によって正式にサポートされていないオープンソース プロジェクトです。 問題が発生した場合は、コミュニティから支援を得るか、GitHub に問題を投稿することができます。

Partner Center PowerShell モジュールを使用すると、アクセス トークンの認証コードを交換するために必要なインフラストラクチャを減らすことができます。 この方法は、Partner Center REST 呼び出しを行う場合に省略可能です。

このプロセスの詳細については、セキュリティで保護されたアプリ モデルの PowerShell ドキュメントを参照してください。

  1. Microsoft Entra ID とパートナー センターの PowerShell モジュールをインストールします。

    Install-Module AzureAD
    
    Install-Module PartnerCenter
    
  2. New-PartnerAccessToken コマンドを使用して同意プロセスを実行し、必要な更新トークンをキャプチャします。

    $credential = Get-Credential
    
    $token = New-PartnerAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Scopes 'https://api.partnercenter.microsoft.com/user_impersonation' -ServicePrincipal -Credential $credential -Tenant 'yyyy-yyyy-yyyy-yyyy' -UseAuthorizationCode
    

    Note

    ServicePrincipal パラメーターは、Web/API の種類を持つ Microsoft Entra アプリが使用されているため、New-PartnerAccessToken コマンドで使用されます。 この種類のアプリでは、クライアント識別子とシークレットをアクセス トークン要求に含める必要があります。 Get-Credential コマンドが呼び出されると、ユーザー名とパスワードの入力を求められます。 ユーザー名としてアプリケーション識別子を入力します。 パスワードとしてアプリケーション シークレットを入力します。 New-PartnerAccessToken コマンドが呼び出されると、資格情報の再入力を求めるプロンプトが表示されます。 使用しているサービス アカウントの資格情報を入力します。 このサービス アカウントは、適切なアクセス許可を持つパートナー アカウントである必要があります。

  3. 更新トークンの値をコピーします。

    $token.RefreshToken | clip
    

更新トークンの値は、Azure Key Vault などの安全なリポジトリに格納するようにします。 PowerShell でセキュリティで保護されたアプリケーション モジュールを使用する方法の詳細については、多要素認証に関する記事を参照してください。