次の方法で共有


Azure Resource Manager サービス接続のトラブルシューティング

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

この記事では、Azure Resource Manager (ARM) サービス接続の作成時に発生する可能性のある問題を解決するのに役立つ一般的なトラブルシューティング シナリオについて説明します。 サービス接続の作成、編集、セキュリティ保護の方法については、「サービス接続の管理」を参照してください。 ワークロード ID 関連の問題を修正する方法については、 Azure Resource Manager ワークロード ID サービス接続のトラブルシューティング を参照してください。

この記事では、"tenant" と "directory" という用語を重複する可能性のある方法で使用します。 テナントは、組織がクラウド サービスのすべての ID とアクセス制御を受け取って管理する、Microsoft Entra ID の専用の分離インスタンスです。 ディレクトリは、リソースへのアクセスを管理するために使用されるユーザー、グループ、アプリケーションなどのオブジェクトを保持する、そのテナント内のコンテナーです。

ヒント

エラー メッセージのトラブルシューティングについては、 Copilot に問い合わせてください。 詳細については、「 AI を使用して Azure DevOps サービス接続エラーのトラブルシューティングを行う」を参照してください。

Azure Resource Manager サービス接続を作成するとどうなるか

Azure Resource Manager サービス接続を使用して Azure に接続するための複数の認証オプションがあります。 アプリの登録またはマネージドID のいずれかでワークロード ID フェデレーションを使用することをお勧めします。

サービス接続の作成プロセスが成功すると、Azure DevOps は Microsoft Entra テナントでこれらの手順を自動的に実行します。 このプロセス中にエラーが発生した場合は、 以下のトラブルシューティング シナリオを参照してください

新しい Azure Resource Manager サービス接続を保存すると、Azure DevOps は次のアクションを実行します。

  1. 選択したサブスクリプションの Microsoft Entra テナントに接続します。
  2. ユーザーの代わりに Entra ID でアプリケーションを作成します。
  3. 選択したサブスクリプションの共同作成者としてアプリケーションを割り当てます。
  4. このアプリケーションの詳細を使用して、Azure Resource Manager サービス接続を作成します。

Note

サービス接続を作成するには、プロジェクト設定で [プロジェクト設定]> > [サービス接続]> > [その他アクション]> > [セキュリティ] の順に選択し、Endpoint Creator グループの Creator または Administrator ロール割り当てる必要があります。 プロジェクト共同作成者は、このグループに既定で追加されます。

ユーザーはディレクトリ内のゲストアクセス許可のみを持っている

このエラーは、Azure DevOps がアプリケーションを作成し、Microsoft Entra ID でアクセス許可を割り当てようとしたときに、サービス接続の自動作成プロセス中に発生します (手順 2 から 3 の「 Azure Resource Manager サービス接続を作成するとどうなるか」)。 これは、Microsoft Entra ID ディレクトリ内のゲスト アクセス許可のみを持つユーザーが、Azure DevOps で Azure Resource Manager サービス接続を作成しようとしたが、アクセス許可が不十分な場合に発生します。

この問題を解決するには、次の手順を実行します。

  1. 管理者アカウントを使用して Azure portal にサインインします。 このアカウントは、所有者またはユーザー アカウント管理者である必要があります。

  2. 左側のナビゲーション バーで [Microsoft Entra ID] を選択します。

  3. ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ ディレクトリの切り替え ] を選択し、必要に応じて適切な資格情報でサインインします。

  4. [管理] セクションから [ユーザー] を選択します。

  5. [ユーザー設定] を選択します。

  6. [外部ユーザー] セクションから [外部コラボレーションの設定を管理します] を選択します。

  7. [Guest user permissions are limited] (ゲスト ユーザーのアクセス許可が制限されます) オプションを [いいえ] に変更します。

または、ユーザーに管理者レベルのアクセス許可を付与する準備ができたら、ユーザーを管理者ロールのメンバーにすることができます。 次の手順を実行します。

警告

ユーザーにグローバル管理者ロールを割り当てると、ユーザーは、Microsoft Entra 組織のすべての管理者設定を読み取り、変更できるようになります。 ベスト プラクティスとして、組織内でこのロールを割り当てる人は 5 人未満にすることをが推奨されます。

  1. 管理者アカウントを使用して Azure portal にサインインします。 このアカウントは、所有者またはユーザー アカウント管理者である必要があります。

  2. 左側のナビゲーション ウィンドウから Microsoft Entra ID を選択します。

  3. ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ ディレクトリの切り替え ] を選択し、必要に応じて適切な資格情報でサインインします。

  4. [管理] セクションから [ユーザー] を選択します。

  5. 検索ボックスを使用して、管理するユーザーを見つけます。

  6. [管理] セクションで、[ディレクトリ ロール] を選択し、ロールを変更します。 完了したら、 [保存] を選択します。

通常、変更をグローバルに適用するまでに 15 分から 20 分かかります。 その後、ユーザーはサービス接続の再作成を試すことができます。

ユーザーは、ディレクトリにアプリケーションを追加する権限がありません

このエラーは、Azure DevOps がユーザーの代わりに Microsoft Entra ID でアプリケーションを作成しようとしたときに、サービス接続の自動作成プロセス中に発生します (「 Azure Resource Manager サービス接続を作成するとどうなるか」の手順 2)。 ディレクトリに統合アプリケーションを追加するアクセス許可がありません。 ディレクトリ管理者には、この設定を変更するためのアクセス許可があります。

この問題を解決するには、次の手順を実行します。

  1. 左側のナビゲーション ペインで [Microsoft Entra ID] を選択します。

  2. ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ ディレクトリの切り替え ] を選択し、必要に応じて適切な資格情報でサインインします。

  3. [ ユーザー] を選択し、[ ユーザー設定] を選択します。

  4. [ アプリの登録] で、[ ユーザーがアプリケーションを登録できる ] オプションを [はい] に変更します。

Entra ID で必要なアクセス許可を既に持っている既存のユーザーでサービス プリンシパルを作成することもできます。 詳細については、「既存のサービス プリンシパルを使用して Azure Resource Manager サービス接続を作成する」を参照してください。

アクセス トークンの取得に失敗したか、有効な更新トークンが見つかりませんでした

これらのエラーは、通常、セッションの有効期限が切れると発生します。

このような問題を解決するには:

  1. Azure DevOps からサインアウトします。

  2. InPrivate または incognito ブラウザー ウィンドウを開き、 Azure DevOps に移動します。

  3. 適切な資格情報でサインインします。

  4. 組織とプロジェクトを選択します。

  5. サービス接続をもう一度作成してみてください。 詳細な手順については、「 サービス接続の管理」を参照してください。

新しいサービス接続を編集または作成しようとしたときに、アクティブな Azure サブスクリプションが表示されない

このエラーは、通常、複数の Entra ID テナントの一部である場合に発生します。

この問題を解決するには、次の手順を実行します。

  1. VS プロファイルに移動します。

  2. テナントが複数あるかどうかを確認します。

  3. 各テナントを選択し、再認証します。

  4. サービス接続を作成してから、サブスクリプションが読み込まれるかどうかを確認します。

共同作成者ロールの割り当てに失敗しました

このエラーは、Azure DevOps がアプリケーションをサブスクリプションの共同作成者として割り当てようとしたときに、サービス接続の自動作成プロセス中に発生します (「 Azure Resource Manager サービス接続を作成するとどうなるか」の手順 3)。 通常、このエラーは、選択した Azure サブスクリプションに対する 書き込み アクセス許可がない場合に発生します。

この問題を解決するには、サブスクリプション管理者に Microsoft Entra ID で適切なロールを割り当てるように依頼します。

サービス接続の作成時にサブスクリプションがリスト表示されない

この問題には複数の原因が考えられます。

  • さまざまな Azure サブスクリプションのドロップダウン メニュー (課金、サービス接続など) に表示されている最大 50 個の Azure サブスクリプションを超えました 。サービス接続を設定していて、50 を超える Azure サブスクリプションがある場合、一部のサブスクリプションは一覧表示されません。 この状況の場合は、次の手順を実行します。

    1. Azure サブスクリプションの Microsoft Entra インスタンスに、新しいネイティブな Microsoft Entra ユーザーを作成します。

    2. 課金を設定したりサービス接続を作成したりするための適切なアクセス許可を持つように Microsoft Entra ユーザーを設定します。 詳細については、Azure DevOps の課金を設定できるユーザーの追加に関する記事を参照してください。

    3. Microsoft Entra ユーザーを [利害関係者] アクセス レベルで Azure DevOps 組織に追加して、[プロジェクト コレクション管理者] グループ (課金のため) に追加するか、チーム プロジェクトでユーザーがサービス接続を作成するために十分なアクセス許可を持つようにします。

    4. 新しいユーザー資格情報を使用して Azure DevOps にサインインし、課金を設定します。 一覧に 1 つの Azure サブスクリプションだけが表示されます。

  • Azure DevOps Services にキャッシュされた古いユーザー トークン: Azure Resource Manager (ARM) サービス接続の作成時に Azure サブスクリプションが表示されない場合は、Azure DevOps Services にキャッシュされた古いユーザー トークンが原因である可能性があります。 Azure サブスクリプションの一覧画面には、ユーザー トークンの期限が切れていることを示すエラーや警告メッセージが表示されないため、このシナリオはすぐにはわかりません。 この問題を解決するには、次の手順を実行して、Azure DevOps Services にキャッシュされているユーザー トークンを手動で更新します。

    1. Azure DevOps Services からサインアウトし、もう一度サインインします。 このアクションにより、ユーザー トークンを更新できます。
    2. ブラウザーのキャッシュと Cookie をクリアして、以前のトークンが確実に削除されるようにします。
    3. Azure DevOps ポータルからサービス接続に移動し、Azure への接続を再承認します。 この手順では、Azure DevOps で新しいトークンを使用するよう促されます。
  • 不適切なサポート アカウントの種類の設定: この問題を解決するには、 サポートされているアカウントの種類 の設定を変更し、アプリケーションを使用できるユーザーを定義します。 次の手順に従います。

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

    2. 複数のテナントにアクセスできる場合は、トップ メニューにある [ディレクトリとサブスクリプション] フィルターを使用して、アプリケーションを登録するテナントを選択します。

      Azure Portal のディレクトリとサブスクリプションのアイコンを示すスクリーンショット。

    3. 左側のペインで [Microsoft Entra ID] を選択します。

    4. [アプリの登録] を選択します。

    5. 登録アプリケーションの一覧からアプリケーションを選択します。

    6. [認証] で、[Supported account types] (サポートされているアカウントの種類) を選択します。

    7. [Supported account types] (サポートされているアカウントの種類)[Who can use this application or access this API?] (このアプリケーションを使用できるユーザーまたはこの API にアクセスできるユーザー) で、[Accounts in any organizational directory] (任意の組織のディレクトリ内のアカウント) を選択します。

      サポートされているアカウントの種類を示すスクリーンショット。

    8. 完了したら、 [保存] を選択します。

サービス プリンシパルまたはシークレットの有効期限が切れている

Azure DevOps によって自動的に作成されるサービス プリンシパルまたはシークレットは有効期限が切れ、更新が必要です。 トークンの更新で問題が発生した場合は、「 アクセス トークンの取得に失敗したか、有効な更新トークンが見つかりませんでした」を参照してください。 シークレットを更新する必要を回避するには、 Azure Resource Manager とのワークロード ID フェデレーションを使用します

トークンの有効期限が切れると、次のいずれかのエラー メッセージが表示されることがあります。

  • AADSTS7000215: Invalid client secret is provided
  • AADSTS7000222: The provided client secret keys for app '***' are expired
  • Invalid client id or client secret

自動作成されたサービス プリンシパルまたはシークレットのアクセス トークンを更新するには:

  1. [プロジェクトの設定>サービス接続] に移動し、更新するサービス接続を選択します。

  2. シークレットをローテーションを選択します。

    ARM シークレットをローテーションするオプションのスクリーンショット。

サービス プリンシパルまたはシークレットのトークンが、さらに 3 か月更新されました。

Note

この操作は、サービス プリンシパルのトークンの有効期限が切れていない場合でも使用できます。 操作を実行しているユーザーが、サービス プリンシパルに登録されているアプリのシークレットを更新するため、サブスクリプションと Microsoft Entra ID に対する適切なアクセス許可を持っていることを確認します。 詳細については、「シークレットを使用してアプリ登録を作成する」および「Resource Manager サービス接続を作成するとどうなるか」を参照してください。

サービス プリンシパル クライアント ID を使用した JWT の取得に失敗する

この問題は、Microsoft Entra ID レベルで期限切れのシークレットまたはその他の問題があるサービス接続を保存しようとすると発生します。

この問題を解決するには、次の手順を実行します。

  1. [プロジェクトの設定]>[サービス接続] に移動して、変更するサービス接続を選択します。

  2. 右上隅にある [編集] を選択して、サービス接続に変更を加えます。 推奨される最も簡単な変更は、説明の追加です。

  3. [Save] (保存) を選択して、サービス接続を保存します。

Note

Failed to obtain the Json Web Token(JWT) using service principal client ID. Exception message: AADSTS7000112: Application is disabled.のようなエラーが発生した場合は、Microsoft Entra ID チームと協力して、サービス プリンシパルにリンクされているエンタープライズ アプリケーションでユーザーがサインインできるように有効になっているオプションが無効になっていないことを確認してください。

Azure サブスクリプションが前のタスク出力から渡されませんでした

リリース パイプラインに Azure サブスクリプションを動的に設定し、前のタスクからの出力変数を使用すると、この問題が発生する可能性があります。

この問題を解決するには、パイプラインの変数セクション内で値が定義されていることを確認します。 そうすることで、この変数はパイプラインのタスク間で渡せるようになります。

どの認証メカニズムがサポートされていますか? マネージド ID はどのように動作しますか?

Azure Resource Manager サービス接続は、サービス プリンシパル認証 (SPA) またはマネージド ID 認証を使用して Azure サブスクリプションに接続できます。

Azure Resource Manager サービス接続は、次を使用して Azure サブスクリプション、管理グループ、または機械学習ワークスペースに接続できます。

  • アプリの登録 (推奨): ワークロード ID フェデレーションまたはシークレットを使用して接続を認証します。
  • マネージド ID: Azure リソースのマネージド ID は、Microsoft Entra ID で自動管理される ID を Azure サービスに提供します。 エージェント割り当てマネージド ID を使用することもできます。

認証方法としてマネージド ID を使用してサービス接続を設定すると、プロセスによって新しいマネージド ID は作成されません。 サービス接続を確立するだけです。 この認証方法を正しく機能させるには、特定の条件を満たす必要があります。 具体的には、マネージド ID が選択された認証方法であるため、使用している仮想マシンにはシステム割り当て ID が必要です。 さらに、この仮想マシンは、ワークフローを完全に実行するためにパイプライン内でセルフホステッド エージェントとして機能する必要があります。これにより、パイプラインはサービス接続を介して変更をデプロイできます。 VM 上のシステム割り当て ID は、同じ VM がパイプラインでエージェントとして機能し、認証を有効にしていることを特定します。 このセットアップにより、既存のマネージド ID を活用できます。

仮想マシンのマネージド ID については、「ロールの割り当て」を参照してください。

Note

Microsoft でホストされるエージェントは、マネージド ID をサポートしていません。 その状況の場合は、Azure VM でセルフホステッド エージェントを設定して、その VM のマネージド ID を構成する必要があります。

AI を使用して Azure DevOps サービス接続エラーのトラブルシューティングを行う

Copilot Chat のこのプロンプトは、Copilot がエラーコードとメッセージを効果的にトラブルシューティングするのに役立ちます。 このプロンプトをコピーして Copilot Chat に貼り付け、プレースホルダーを特定のエラー メッセージに置き換えます。

I'm getting this Azure DevOps service connection error: [PASTE YOUR ERROR MESSAGE HERE]

Can you help me troubleshoot this issue? Please provide step-by-step instructions to:
1. Identify the root cause
2. Fix the configuration in Azure or Entra ID
3. Verify the solution works

Context: This is for an Azure Resource Manager service connection in Azure DevOps.