Azure Resource Manager サービス接続のトラブルシューティング
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
この記事では、Azure Resource Manager サービス接続の作成時に発生する可能性のある問題を解決するために役立つ、一般的なトラブルシューティングのシナリオについて説明します。 サービス接続の作成、編集、セキュリティ保護の方法については、「サービス接続の管理」を参照してください。
Azure Resource Manager サービス接続を作成するとどうなりますか
サービス接続がない場合は、次のようにして作成できます。
プロジェクト内から、[プロジェクトの設定]、[サービス接続] の順に選択します。
[新しいサービス接続] を選択して新しいサービス接続を追加し、[Azure Resource Manager] を選択します。 完了したら、 [次へ] を選択します。
ID の種類として アプリの登録 (自動) を選択し、資格情報として ワークロード ID フェデレーション を選択します。
[サブスクリプション] を選択して、ドロップダウン リストからサブスクリプションを選択します。 フォームの残りの部分に入力し、完了したら [保存] を選択します。
新しい Azure Resource Manager サービス接続を保存すると、Azure DevOps は次のアクションを実行します。
- 選択したサブスクリプションの Microsoft Entra テナントに接続します。
- ユーザーの代わりに Microsoft Entra ID にアプリケーションを作成します。
- 選択したサブスクリプションの共同作成者としてアプリケーションを割り当てます。
- このアプリケーションの詳細を使用して、Azure Resource Manager サービス接続を作成します。
Note
サービス接続を作成するには、プロジェクト設定の [プロジェクト設定]
トラブルシューティングのシナリオ
サービス接続を作成するときに、次の問題が発生する場合があります。
- ユーザーはディレクトリ内のゲストアクセス許可のみを持っている
- ユーザーは、ディレクトリにアプリケーションを追加する権限がありません
- アクセス トークンの取得に失敗したか、有効な更新トークンが見つかりませんでした
- 共同作成者ロールの割り当てに失敗しました
- サービス接続の作成時にサブスクリプションがリスト表示されません
- 一部のサブスクリプションがサブスクリプションのリストに表示されない
- サービス プリンシパルのトークンの有効期限切れ
- サービス プリンシパル クライアント ID を使用して JSON Web トークン (JWT) を取得できませんでした
- Azure サブスクリプションが前のタスク出力から渡されませんでした
- どの認証メカニズムがサポートされていますか? マネージド ID はどのように動作しますか?
ユーザーはディレクトリ内のゲストアクセス許可のみを持っている
管理者アカウントを使用して Azure portal にサインインします。 このアカウントは所有者またはユーザー アカウント管理者である必要があります
左側のナビゲーション バーで [Microsoft Entra ID] を選択します。
ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ディレクトリ の切り替え] を選択し、必要に応じて適切な資格情報を使用してサイン インします。
[管理] セクションから [ユーザー] を選択します。
[ユーザー設定] を選択します。
[外部ユーザー] セクションから [外部コラボレーションの設定を管理します] を選択します。
[Guest user permissions are limited] (ゲスト ユーザーのアクセス許可が制限されます) オプションを [いいえ] に変更します。
または、ユーザーに管理者レベルのアクセス許可を付与する準備ができている場合は、ユーザーを管理者ロールのメンバーにすることができます。 手順は次のとおりです。
警告
ユーザーにグローバル管理者ロールを割り当てると、ユーザーは、Microsoft Entra 組織のすべての管理者設定を読み取り、変更できるようになります。 ベスト プラクティスとして、組織内でこのロールを割り当てる人は 5 人未満にすることをが推奨されます。
管理者アカウントを使用して Azure portal にサインインします。 このアカウントは、所有者またはユーザー アカウント管理者である必要があります。
左側のナビゲーション ウィンドウから Microsoft Entra ID を選択します。
ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ディレクトリ の切り替え] を選択し、必要に応じて適切な資格情報を使用してサイン インします。
[管理] セクションから [ユーザー] を選択します。
検索ボックスを使用して、管理するユーザーを検索します。
[管理] セクションで、[ディレクトリ ロール] を選択し、ロールを変更します。 完了したら、 [保存] を選択します。
通常、変更をグローバルに適用するまでに 15 分から 20 分かかります。 その後で、ユーザーはサービス接続の再作成を試行できます。
ユーザーは、ディレクトリにアプリケーションを追加する権限がありません
統合アプリケーションをディレクトリに追加するためのアクセス許可が必要です。 ディレクトリ管理者には、この設定を変更するためのアクセス許可があります。
左側のナビゲーション ペインで [Microsoft Entra ID] を選択します。
ユーザー サブスクリプションに対応する適切なディレクトリを編集していることを確認します。 そうでない場合は、[ディレクトリ の切り替え] を選択し、必要に応じて適切な資格情報を使用してサイン インします。
[ユーザー] を選択してから、[ユーザー設定] を選択します。
[アプリの登録] で、[ユーザーはアプリケーションを登録できる] オプションを [はい] に変更します。
サービス プリンシパルは、Microsoft Entra ID で既に必要なアクセス許可を持っている既存のユーザーで作成することもできます。 詳細については、「既存のサービス プリンシパルを使用して Azure Resource Manager サービス接続を作成する」を参照してください。
アクセス トークンの取得に失敗したか、有効な更新トークンが見つかりませんでした
これらのエラーは通常、セッションの有効期限が切れたときに発生します。 このような問題を解決するには:
- Azure DevOps からサインアウトします。
- InPrivate または incognito のブラウザー ウィンドウを開いて、Azure DevOps に移動します。
- 適切な資格情報を使用してサインインします。
- 組織とプロジェクトを選択します。
- サービス接続を作成します。
共同作成者ロールの割り当てに失敗しました
通常、このエラーは、選択した Azure サブスクリプションに対する [書き込み] アクセス許可がない場合に発生します。
この問題を解決するには、サブスクリプション管理者に Microsoft Entra ID で適切なロールを割り当てるように依頼します。
サービス接続の作成時にサブスクリプションがリスト表示されない
さまざまな Azure サブスクリプション ドロップダウン メニューに表示される最大 50 個の Azure サブスクリプション (課金、サービス接続など): サービス接続を設定していて、50 個を超える Azure サブスクリプションがある場合、一部のサブスクリプションは一覧に表示されません。 この状況の場合は、次の手順を実行します。
- Azure サブスクリプションの Microsoft Entra インスタンスに、新しいネイティブな Microsoft Entra ユーザーを作成します。
- 課金を設定したりサービス接続を作成したりするための適切なアクセス許可を持つように Microsoft Entra ユーザーを設定します。 詳細については、Azure DevOps の課金を設定できるユーザーの追加に関する記事を参照してください。
- Microsoft Entra ユーザーを [利害関係者] アクセス レベルで Azure DevOps 組織に追加して、[プロジェクト コレクション管理者] グループ (課金のため) に追加するか、チーム プロジェクトでユーザーがサービス接続を作成するために十分なアクセス許可を持つようにします。
- 新しいユーザー資格情報を使用して Azure DevOps にサインインし、課金を設定します。 一覧に 1 つの Azure サブスクリプションだけが表示されます。
Azure DevOps Services にキャッシュされている以前のユーザー トークン: Azure Resource Manager (ARM) サービス接続の作成時に Azure サブスクリプションが一覧表示されない場合は、Azure DevOps Services にキャッシュされている以前のユーザー トークンが原因である可能性があります。 Azure サブスクリプションの一覧画面には、ユーザー トークンの期限が切れていることを示すエラーや警告メッセージが表示されないため、このシナリオはすぐにはわかりません。 この問題を解決するには、次の手順を実行して、Azure DevOps Services にキャッシュされているユーザー トークンを手動で更新します。
- Azure DevOps Services からサインアウトし、もう一度サインインします。 このアクションにより、ユーザー トークンを更新できます。
- ブラウザーのキャッシュと Cookie をクリアして、以前のトークンが確実に削除されるようにします。
- Azure DevOps ポータルからサービス接続に移動し、Azure への接続を再承認します。 この手順では、Azure DevOps で新しいトークンを使用するよう促されます。
一部のサブスクリプションがサブスクリプションのリストに表示されない
サポート アカウントの種類の設定を変更する: この問題は、[サポートされているアカウントの種類] の設定を変更して、アプリケーションを使用できるユーザーを定義することで修正できます。 手順は次のとおりです。
Azure portal にサインインします。
複数のテナントにアクセスできる場合は、トップ メニューにある [ディレクトリとサブスクリプション] フィルターを使用して、アプリケーションを登録するテナントを選択します。
左側のペインで [Microsoft Entra ID] を選択します。
[アプリの登録] を選択します。
登録アプリケーションの一覧からアプリケーションを選択します。
[認証] で、[Supported account types] (サポートされているアカウントの種類) を選択します。
[Supported account types] (サポートされているアカウントの種類) の [Who can use this application or access this API?] (このアプリケーションを使用できるユーザーまたはこの API にアクセスできるユーザー) で、[Accounts in any organizational directory] (任意の組織のディレクトリ内のアカウント) を選択します。
完了したら、 [保存] を選択します。
Azure DevOps Services にキャッシュされている以前のユーザー トークン: Azure Resource Manager (ARM) サービス接続の作成時に Azure サブスクリプションが一覧表示されない場合は、Azure DevOps Services にキャッシュされている以前のユーザー トークンが原因である可能性があります。 Azure サブスクリプションの一覧画面には、ユーザー トークンの期限が切れていることを示すエラーや警告メッセージが表示されないため、このシナリオはすぐにはわかりません。 この問題を解決するには、次の手順を実行して、Azure DevOps Services にキャッシュされているユーザー トークンを手動で更新します。
- Azure DevOps Services からサインアウトし、もう一度サインインします。 このアクションにより、ユーザー トークンを更新できます。
- ブラウザーのキャッシュと Cookie をクリアして、以前のトークンが確実に削除されるようにします。
- Azure DevOps ポータルからサービス接続に移動し、Azure への接続を再承認します。 この手順では、Azure DevOps で新しいトークンを使用するよう促されます。
サービス プリンシパルのトークンの有効期限切れ
自動的に作成されるサービス プリンシパルまたはシークレットで頻繁に発生する問題は、トークンの有効期限が切れ、更新する必要があるということです。 トークンの更新に問題がある場合は、「アクセス トークンの取得に失敗したか、有効な更新トークンが見つかりませんでしたを参照してください。
トークンの有効期限が切れている場合は、次のいずれかのエラー メッセージが表示されることがあります。
AADSTS7000215: Invalid client secret is provided
AADSTS7000222: The provided client secret keys for app '***' are expired
Invalid client id or client secret
自動的に作成されたサービス プリンシパルまたはシークレットのアクセス トークンを更新するには:
[プロジェクトの設定]>[サービス接続] に移動して、変更するサービス接続を選択します。
右上隅にある [編集] を選択して、[検証] を選択します。
[保存] を選択します。
サービス プリンシパルまたはシークレットのトークンが、さらに 3 か月間更新されるようになりました。
Note
この操作は、サービス プリンシパルのトークンの有効期限が切れていない場合でも使用できます。 操作を実行しているユーザーが、サービス プリンシパルに登録されているアプリのシークレットを更新するため、サブスクリプションと Microsoft Entra ID に対する適切なアクセス許可を持っていることを確認します。 詳細については、「 自動セキュリティを使用して Azure Resource Manager サービス接続を作成する」を参照してください Resource Manager サービス接続を作成するとどうなりますか 。
サービス プリンシパル クライアント ID を使用した JWT の取得に失敗する
この問題は、シークレットの有効期限が切れたサービス接続を検証しようとすると発生します。
この問題を解決するには、次の手順を実行します。
[プロジェクトの設定]>[サービス接続] に移動して、変更するサービス接続を選択します。
右上隅にある [編集] を選択して、サービス接続に変更を加えます。 推奨される最も簡単な変更は、説明の追加です。
[Save] (保存) を選択して、サービス接続を保存します。
Note
[保存] を選択します。 この段階では、サービス接続を検証しようとしないでください。
サービス接続の編集ウィンドウを終了して、サービス接続ページを更新します。
右上隅にある [編集] を選択し、この時点で [検証] を選択します。
[保存] を選択して、サービス接続を保存します。
Azure サブスクリプションが前のタスク出力から渡されませんでした
リリース パイプラインに Azure サブスクリプションを動的に設定し、前のタスクからの出力変数を使用すると、この問題が発生する可能性があります。
この問題を解決するには、パイプラインの変数セクション内で値が定義されていることを確認します。 そうすることで、この変数はパイプラインのタスク間で渡せるようになります。
どの認証メカニズムがサポートされていますか? マネージド ID はどのように動作しますか?
Azure Resource Manager サービス接続は、サービス プリンシパル認証 (SPA) またはマネージド ID 認証を使用することで、Azure サブスクリプションに接続できます。
Azure Resource Manager サービス接続は、次を使用して Azure サブスクリプション、管理グループ、または機械学習ワークスペースに接続できます。
- アプリの登録 (推奨): ワークロード ID フェデレーションまたはシークレットを使用して接続を認証できます。
- マネージド ID: Azure リソースのマネージド ID は、Microsoft Entra ID で自動的に管理される ID を Azure サービスに提供します。 エージェント割り当てマネージド ID を使用することもできます。
仮想マシンのマネージド ID については、「ロールの割り当て」を参照してください。
Note
マネージド ID は、Microsoft ホステッド エージェントではサポートされていません。 その状況の場合は、Azure VM でセルフホステッド エージェントを設定して、その VM のマネージド ID を構成する必要があります。