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

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

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

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

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

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

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

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

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

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

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

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

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

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

Note

サービス接続を作成するには、プロジェクト設定で Endpoint Creator グループに追加する必要があります: プロジェクト設定>サービス接続>セキュリティ。 既定では、共同作成者がこのグループに追加されます。

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

サービス接続の作成時に発生する可能性がある問題の一部を次に示します。

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

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

これは、次の原因が原因である可能性があるアクセス許可の問題です。

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

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

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

  2. 左側のナビゲーション バーで Azure Active Directory を選択します。

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

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

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

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

  7. [ゲスト ユーザーのアクセス許可] オプションを [いいえ] に変更します。

または、ユーザーに追加のアクセス許可 (管理者レベル) を付与する準備ができた場合は、ユーザーを グローバル管理者 ロールのメンバーにすることができます。 これを行うには、次の手順に従います。

警告

グローバル管理者ロールに割り当てられているユーザーは、Azure AD 組織内のすべての管理設定の読み取りと変更を行うことができます。 ベスト プラクティスとして、組織内でこのロールを割り当てる人は 5 人未満にすることをお勧めします。

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

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

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

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

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

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

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

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

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

  1. 左側のナビゲーション ウィンドウで Azure Active Directory を選択します。

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

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

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

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

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

通常、これらのエラーは、セッションの有効期限が切れた場合に発生します。 これらの問題を解決するには、次の手順を実行します。

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

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

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

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

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

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

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

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

  3. 利害関係者アクセス レベルの Azure DevOps 組織に Azure AD ユーザーを追加し、それを Project Collection Administrators グループ (課金用) に追加するか、ユーザーがサービス接続を作成するための十分なアクセス許可をチーム プロジェクトに持っていることを確認します。

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

一部のサブスクリプションがサブスクリプションの一覧に含まれていない

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

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

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

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

  3. 左側のウィンドウから Azure Active Directory を選択します。

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

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

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

  7. [ サポートされているアカウントの種類] で、[ このアプリケーションを使用するか、この API にアクセスできる ユーザー] で 、任意の組織ディレクトリの [アカウント] を選択します。

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

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

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

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

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

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

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

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

サービス プリンシパルのトークンは、さらに 2 年間更新されました。

サービス プリンシパル クライアント ID を使用して JWT を取得できませんでした

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

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

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

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

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

    Note

    [保存] を選択します。 この手順では、サービス接続を確認しないでください。

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

  5. 右上隅にある [編集] を選択し、[ 確認] を選択します。

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

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

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

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

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

Azure Resource Manager サービス接続は、サービス プリンシパル認証 (SPA) またはマネージド ID 認証を使用して Azure サブスクリプションに接続できます。 Azure リソースのマネージド ID は、Azure Active Directory (Azure AD) で自動的に管理される ID を Azure サービスに提供します。 この ID を使用すると、コードまたはサービス接続で資格情報を保持することなく、Azure AD 認証をサポートする任意のサービスに対して認証を行うことができます。

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

Note

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