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

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

ARM サービス接続を作成するとどうなりますか?

サービス接続がない場合は、次のようにして作成できます。

  1. プロジェクト内から、[プロジェクトの設定][サービス接続] の順に選択します。

    [プロジェクトの設定] から [サービス接続] にアクセスする方法を示すスクリーンショット

  2. [新しいサービス接続] を選択して新しいサービス接続を追加し、[Azure Resource Manager] を選択します。 完了したら、[次へ] をクリックします。

    サービス接続の種類を示すスクリーンショット。

  3. [サービス プリンシパル (自動)] を選択して、**[次へ] を選択します。

  4. [サブスクリプション] を選択して、ドロップダウン リストからサブスクリプションを選択します。 フォームに入力し、入力の完了後に [保存] を選択します。

    新しい ARM 接続のフォームを示すスクリーンショット。

新しい ARM サービス接続を保存すると、Azure DevOps は次のように動作します。

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

注意

サービス接続を作成するには、プロジェクト設定 ([プロジェクト設定]>[サービス接続]>[セキュリティ]) でエンドポイント作成者グループに追加されている必要があります。 共同作成者は、このグループに既定で追加されます。

トラブルシューティングのシナリオ

次に、サービス接続の作成時に発生する可能性のあるいくつかの問題を示します。

この操作を完了するのに十分な特権がありません

通常、これはユーザーの代わりにシステムが Microsoft Entra ID でアプリケーションを作成しようとしたときに発生します。

これは、アクセス許可の問題であり、次の原因によるものと考えられます。

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

この問題を解決するための最善の方法は、ユーザーに最小限の追加アクセス許可のみを付与しながら、ゲスト ユーザーのアクセス許可を次のように増やすことです。

  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 分かかります。 その後で、ユーザーはサービス接続の再作成を試行できます。

ユーザーにはディレクトリにアプリケーションを追加する権限がない

統合アプリケーションをディレクトリに追加するためのアクセス許可が必要です。 ディレクトリ管理者には、この設定を変更するためのアクセス許可があります。

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

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

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

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

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

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

通常、こうしたエラーは、セッションの有効期限が切れているときに発生します。 このような問題を解決するには:

  1. Azure DevOps からサインアウトします。
  2. InPrivate または incognito のブラウザー ウィンドウを開いて、Azure DevOps に移動します。
  3. 適切な資格情報を使用してサインインします。
  4. 組織とプロジェクトを選択します。
  5. サービス接続を作成します

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

通常、このエラーは選択した Azure サブスクリプションに対する書き込みアクセス許可がない場合に発生します。

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

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

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

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

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

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

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

一部のサブスクリプションがサブスクリプションのリストに表示されない

この問題は、[Supported account types] (サポートされているアカウントの種類) の設定を変更して、アプリケーションを使用できるユーザーを定義することで修正できます。 そのためには、次の手順に従います。

  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. 完了したら、[保存] を選択します。

サービス プリンシパルのトークンの有効期限切れ

自動的に作成されるサービス プリンシパルについて頻繁に発生する問題は、サービス プリンシパルのトークンの有効期限が切れていて、更新が必要になるということです。 ただし、トークンの更新に関する問題がある場合は、「有効な更新トークンが見つかりませんでした」を参照してください。

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

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

  2. 右上隅にある [編集] を選択して、[検証] を選択します。

  3. [保存] を選択します。

この時点で、サービス プリンシパルのトークンは、さらに 3 か月間更新されました。

Note

この操作は、サービス プリンシパルのトークンの有効期限が切れていない場合でも使用できます。

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

この問題は、シークレットの有効期限が切れたサービス接続を検証しようとすると発生します。

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

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

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

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

    注意

    [保存] を選択します。 この段階では、サービス接続を検証しようとしないでください。

  4. サービス接続の編集ウィンドウを終了して、サービス接続ページを更新します。

  5. 右上隅にある [編集] を選択し、この時点で [検証] を選択します。

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

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

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

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

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

Azure Resource Manager サービス接続は、サービス プリンシパル認証 (SPA) またはマネージド ID 認証を使用することで、Azure サブスクリプションに接続できます。 Azure リソースのマネージド ID には、Azure サービス向けの、Microsoft Entra ID で自動的に管理される ID が用意されています。 この ID は、コードやサービス接続に資格情報が存在していなくても、Microsoft Entra 認証をサポートしているどのサービスの認証にも使用できます。

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

注意

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