次の方法で共有


AAD アプリケーション サービス プリンシパルを使用して Azure Sphere パブリック API にアクセスする

自動ツールでは、完全な特権を持つユーザーとして認証するのではなく、制限付きアクセスと非対話型認証が必要です。 これを実現するには、アプリケーションが特定のアクセス許可でサインインできるようにするサービス プリンシパルを使用します。 簡単に言うと、Azure サービス プリンシパルは、アプリケーションが Azure Active Directory に登録されるときに Azure で作成される ID として機能します。

このモードでは、Azure Active Directory (AAD) テナント内のアプリケーションのアクセス許可がサービス プリンシパルによって定義され、リソースにアクセスするときに認証と承認が有効になります。

サービス プリンシパルには、クライアント証明書とクライアント シークレットの 2 種類の認証方法があります。

前提条件

手順 1: サービス プリンシパルを登録する

  1. Azure portal左側のナビゲーション ウィンドウで、[Azure Active Directory] をクリックします。
  2. アプリケーションを Azure AD に登録し、サービス プリンシパルを作成します。 クライアント ID をメモします。
  3. 認証の種類を選択します。 サービス プリンシパルには、次の 2 種類の認証を使用できます。
    • クライアント シークレット
    • クライアント証明書

手順 2: Azure Sphere テナントにサービス プリンシパルを追加し、ロールを割り当てる

Note

この手順を開始する前に、次のことを確認してください。

  • Azure Sphere テナント: Azure Sphere CLI を使用してコマンド **azsphere tenant show-selected** を 実行します
  • Azure テナント ID: Azure portal を使用してテナント ID を検索します。 Azure Active Directory テナント ID をコピーします。
  • このアプリケーションに関連付けられているサービス プリンシパル オブジェクトの一意の ID を検索します。
    • アプリの登録移動し、「手順 1: サービス プリンシパルを登録する」で作成したアプリケーションを選択します
    • [ローカル ディレクトリでのマネージド アプリケーション] で、アプリの名前のリンクを選択します。 この選択項目のラベルは、切り詰められている可能性があります。
    • [プロパティ] ページで、オブジェクト IDコピーします。

Azure Sphere は、サービス プリンシパルを別のユーザーとして扱います。 サービス プリンシパルを使用してトークンを取得するには、まずサービス プリンシパル ユーザーを Azure Sphere テナントに追加してから、Azure Sphere CLI を使用して Azure Sphere テナントのユーザーにロールを割り当てます。

ユーザー ID は ObjectID@<TenantID.onmicrosoft.com>> として<生成できます。

次の例では、Azure Sphere tttttttt-tttt-tttt-tttt-ttttttttttttテナント ID にオブジェクト ID と Azure AD テナント ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxzzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz組み合わせを使用してユーザーを作成し、このユーザーの共同作成者ロールを追加します。

  1. Azure Sphere CLI を使用して Azure Sphere ログインでサインインします。

    azsphere login
    
  2. 必要なテナントを選択します。

    azsphere tenant select --tenant tttttttt-tttt-tttt-tttt-tttttttttttt
    
  3. 必要なロールにユーザーを追加するには:

    azsphere role add --role Contributor --user xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.onmicrosoft.com
    

手順 3: アプリケーション登録ポータルを使用してクライアント シークレットまたはクライアント証明書を登録する

クライアント シークレットとクライアント証明書を使用すると、(HTTPS スキームを使用して) Web アドレス指定可能な場所でトークンを受信するときに、アプリケーションが認証サービスに対して自身を識別できます。 Azure Active Directory を使用して認証する場合、クライアント資格情報のシナリオでは、クライアント シークレットの代わりに証明書を使用することをお勧めします。

アプリケーション登録用のクライアント シークレットまたはクライアント証明書を使用して、Azure Sphere Public API (PAPI) のアクセス トークンを取得できます。

クライアント シークレットを使用してアプリケーションを構成する

アプリケーションをクライアント シークレットに登録するには:

  1. Azure Portal の左側のナビゲーション ウィンドウで、[Azure Active Directory] をクリックします。

  2. アプリの登録移動し、「手順 1: サービス プリンシパルを登録する」で作成したアプリケーションを選択します

  3. 左側のウィンドウで、[証明書とシークレット] の [クライアント シークレット>] セクションの [新しいクライアント シークレット]> を選択します。

  4. 説明を入力し、有効期間を選択し、 [追加] を選択します。 クライアント シークレットが生成され、クライアント シークレットの値が表示されます。

  5. 後でキーを取得できないため、クライアント シークレットの値をコピーします。

  6. アプリケーションとしてサインインする Azure Sphere パブリック API アプリケーション ID をクライアント シークレットの値に指定します。 アプリケーションが取得できる場所にキー値を保存します。

    重要

    クライアント シークレットの値は重要なセキュリティ資格情報です。 クライアント シークレットを他のユーザーと共有したり、クライアント アプリケーション内で配信したりしないでください。 アクセス ポリシーと監査履歴を 完全に制御して、一元化されたシークレット管理を提供する Azure Key Vault サービス を使用することをお勧めします。

次のサンプル コードを使用します。

 IConfidentialClientApplication app =

 ConfidentialClientApplicationBuilder.Create("<<App registration Client ID>>")

                 .WithClientSecret("<<App registration Client Secret Value>>")

                 .WithAuthority(AzureCloudInstance.AzurePublic, "<<3rd Party Tenant Id>>")

                 .Build();

 string[] scopes = new[] { "https://firstparty.sphere.azure.net/api/.default" };

 AuthenticationResult result =  await app.AcquireTokenForClient(scopes).ExecuteAsync();
 string accessToken=result.AccessToken;

クライアント証明書を使用してアプリケーションを構成する

クライアント証明書を設定するには:

  1. Azure Portal の左側のナビゲーション ウィンドウで、[Azure Active Directory] をクリックします。
  2. アプリの登録移動し、「手順 1: サービス プリンシパルを登録する」で作成したアプリケーションを選択します
  3. 左側のウィンドウで、証明書とシークレットの証明書のアップロード証明書>>選択します。 証明書 (既存の証明書またはエクスポートした自己署名証明書) を選択します。
  4. アプリケーション登録ポータルで証明書をアプリケーションに登録した後、クライアント アプリケーション コードで証明書を使用できるようにします。

クライアント証明書にアプリケーションを登録するには、次のサンプル コードを使用します。

 IConfidentialClientApplication app =

 ConfidentialClientApplicationBuilder.Create("<<App registration Client ID>>")

                 .WithCertificate("<<App registration Certificate>>")

                 .WithAuthority(AzureCloudInstance.AzurePublic, "<<3rd Party Tenant Id>>")

                 .Build();

 string[] scopes = new[] { "https://firstparty.sphere.azure.net/api/.default" };

 AuthenticationResult result =  await app.AcquireTokenForClient(scopes).ExecuteAsync();
 string accessToken=result.AccessToken;

Note

IConfidentialClient を使用するには、MSAL.Net ライブラリを追加する必要があります。