[踩坑分享]使用Azure DevOps Release發布至其他目錄(directory)的App Service

Photo by Patrick Robert Doyle on Unsplash

情境

日前專案正在開發中,一直以來都是使用客戶提供的發行設定檔,從 Visual Studio 上手動發布至客戶的 Azure App Service 上,直到最近開始研究起 Azure DevOps Pipelines 裡的服務,打算升級一下發布的流程。

會遇到這問題的原因是,公司開發的專案都是統一放在公司的目錄(Azure Directory)下的Azure DevOps上,在發布至同目錄的App Service測試機上都沒有問題,但在使用Pipeline服務發布至客戶的App Service時,會遇到沒有訂閱帳戶權限的問題。

後來發現那是因為客戶的App Service 服務則是在另一個目錄上(如下圖),導致在跨目錄發布時,會遇到存取權限的問題。

踩坑步驟

以下會用: 
專案目錄 替代上述情境中的 公司目錄
目標目錄 替代上述情境中的 客戶目錄

在Azure Devops Pipeline 的 Release 中,要建立一條新的 Release 時,會需要選擇要發布到的(目標目錄)訂閱帳戶上,在(目標目錄)訂閱帳戶上沒有針對你的帳戶做任何權限設定的情況下,點擊 Authorize 按鈕(下圖ㄧ),應該會跳出如下圖的彈窗(下圖二),提示說沒有連線至目標目錄的訂閱帳戶權限。

Failed to set Azure permission ‘RoleAssignmentId: XXXXX’ for the service principal ‘XXXXX’ on subscription ID ‘XXXXX’: error code: Forbidden, inner error code: AuthorizationFailed, inner error message The client ‘YOUREMAIL@mail.com’ with object id ‘XXXXX’ does not have authorization to perform action ‘Microsoft.Authorization/roleAssignments/write’ over scope ‘/subscriptions/XXXXX’ or the scope is invalid. If access was recently granted, please refresh your credentials. Ensure that the user has ‘Owner’ or ‘User Access Administrator’ permissions on the Subscription.

解決辦法

請客戶將User Access Administrator的角色 分配至你的帳戶上

  1. 請客戶開啟 Azure portal,進入訂閱帳戶內的存取控制(Access control)並新增角色指派(Add role assignment)

2. 在角色(Role)頁籤,選擇 User Access Administrator(使用者存取系統管理員)

3. 在 Members 頁籤,選擇要分配角色的帳號

4. 確認無誤後,就可以點擊下方檢閱+指派(Review + assign)按鈕發送

重新登入後,回到建立 Pipeline Release 的頁面上,應該就可以順利選取目標目錄的訂閱帳戶了

如果有遇到目標目錄的訂閱帳戶消失問題,可以嘗試從 Manage link 將訂閱帳戶移除後,重新執行步驟。

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料