Azure Pipelines:「AADSTS7000215: Invalid client secret provided」と「AADSTS7000222」
シークレットの種類の Azure Resource Manager のサービス接続は、アプリの登録とそのクライアント シークレットのひとつで Microsoft Entra ID にサインインします。Entra がそのシークレットを受け付けないと、その接続を使うタスクがすべて失敗します。AADSTS7000222 はシークレットの期限切れです。AADSTS7000215 は、送ったシークレットがそのアプリで有効なものではないという意味で、多いのは、シークレットの値ではなく ID を保存していたか、Entra でシークレットが消されていたかです。
失敗している実行がプルリクエストのビルド検証なら、プルリクエストはそれを待っています:JetBrains IDE のプラグイン Azure DevOps Pull Requests は、プルリクエストのブランチ ポリシーを状態つきで IntelliJ IDEA・Rider・PyCharm に並べ、Pro なら接続を直したあとに、失敗したビルド ポリシーをもう一度動かせます。JetBrains Marketplace で入れる
出るメッセージ
AADSTS7000215: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app '...'.(クライアント シークレットが正しくない、送るのはシークレットの ID ではなく値か確かめて、という意味)AADSTS7000222: The provided client secret keys for app '...' are expired.(このアプリのクライアント シークレットは期限が切れている、という意味)- Azure App Service のデプロイなどのタスクからは:
Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.(Azure のアクセス トークンを取れなかった、サービス プリンシパルが有効で期限切れでないか確かめて、という意味) - Azure CLI のタスクからは:
Secret expired, update service connection at ...(シークレットの期限切れ、サービス接続を更新して、という意味)。シークレットのない接続への切り替えについてのリンクがつきます。 - 接続を編集して保存するときは:
Failed to obtain the Json Web Token(JWT) using service principal client ID。Microsoft のトラブルシューティングのページでは、期限の切れたシークレットか、Entra の側のほかの問題から出るとされています。
まず接続を見る
- プロジェクトの設定の Service connections で、タスクが名前を出している接続を開きます。詳細に、アプリの登録を Azure DevOps が作ったもの(自動)か、だれかが既存のものを入れたもの(手動)か、シークレットとワークロード ID フェデレーションのどちらを使うかが出ます。
- 接続が有効になっているかを確かめます。Microsoft のページには、管理者が無効にできること、使われないまま100日たつと Azure Pipelines が無効にすることがあると書かれています。
- 更新するとアプリの登録のシークレットが変わるので、作業する人には、サービス接続の管理者であることと、Entra のそのアプリとサブスクリプションへの権限が要ります。
Azure DevOps が作った接続:Rotate secret
- Microsoft のページでは、Azure DevOps が作るシークレットは期限が切れるので更新が要るとされています。接続で
Rotate secretを選ぶと、シークレットがさらに3か月延びます。期限が切れる前でもできます。 - Rotate secret がないときは、Edit を選んでから Save を選んでも更新されます。
- 3か月たつとまた切れるので、カレンダーに予定を入れておくか、接続をワークロード ID フェデレーションに移します(下)。
自分で作った接続:新しいシークレットの値
- Entra 管理センターか Azure portal で、アプリの登録から接続のアプリ(クライアント ID は接続に出ています)を開き、証明書とシークレットで新しいクライアント シークレットを足します。
- コピーするのは「値」の列で、「シークレット ID」の列ではありません。値が見えるのは作った直後だけです。ID を保存してしまうことが、AADSTS7000215 の注意している点です。
- サービス接続を編集し、値をサービス プリンシパルのキーに貼って、確かめてから保存します。新しいシークレットでパイプラインが動いたら、古いシークレットを Entra で消します。
根本から:ワークロード ID フェデレーション
- ワークロード ID フェデレーションの接続にはシークレットがありません。Azure DevOps が実行のたびに有効期間の短いトークンを取るので、どちらのエラーも起きません。Microsoft も、シークレットの更新をなくすためにこれを勧めています。
- Microsoft のページでは、代わりの接続を作るのではなく、いまの接続を変換するよう書かれています。そうすれば、その接続を指しているパイプラインはそのまま動きます。手動のアプリの登録には Entra でフェデレーション資格情報を足す必要があり、Microsoft のワークロード ID のサービス接続のページに手順があります。
- フェデレーションでは、Azure CLI のタスクは
keepAzSessionActiveで長いスクリプトのサインインを保てます。Please run 'az login' to setup account を見てください。
IntelliJ IDEA・Rider・PyCharm で Azure DevOps のプルリクエスト
Azure DevOps Pull Requests は、JetBrains IDE 2024.1 以降と Android Studio で動く Lesstep のプラグインです。git のリモートから組織・プロジェクト・リポジトリを読み、あなたのレビュー待ちのプルリクエストを IDE のツール ウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも動きます。プルリクエストのブランチ ポリシーを状態つきで見せるので、通っていない必須のビルドがプルリクエストの隣に出ます。Pro なら、失敗したビルド ポリシーや期限の切れたビルド ポリシーをそこからもう一度動かせます。レビューの受信箱は無料、投票・コメント・完了・作成は Pro(30日の無料試用つき)。
Azure・Azure DevOps・Azure Pipelines・Microsoft Entra は Microsoft Corporation の商標、IntelliJ IDEA・Rider・PyCharm は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:Please run 'az login' to setup account · There was a resource authorization issue · This pipeline needs permission to access a resource · English