Share via


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

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

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

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

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

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

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

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

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

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

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

    新しい Azure Resource Manager サービス接続フォームを示すスクリーンショット。

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

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

注意

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

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

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

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

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

この問題が発生する原因として次が考えられます。

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

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

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

  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 を構成する必要があります。