在 Azure App 服務 上設定受控執行個體

Azure App 服務 上的 受控執行個體 是一種適用於 Windows 網頁應用程式的方案層級託管選項,適合需要作業系統(OS)自訂、選用私人網路,以及可與 Azure 服務安全整合的情境。

  • 受管理的識別
  • 組態 (安裝) 指令碼
  • 儲存支架
  • 登錄機碼
  • 遠端桌面通訊協定 (RDP) 存取

這很重要

受控執行個體 通常在特定地區的 Windows 網頁應用程式中提供,且僅限於 Pv4 和 Pmv4 的定價方案。 Microsoft 會隨著時間增加更多區域。 受控執行個體 不支援 Linux 和容器。

新增一個受控身分識別 (到 App Service 方案)

方案層級受控身分識別可為平台層級發生的基礎結構作業啟用驗證,例如啟動期間存取 Azure 儲存體的組態 (安裝) 指令碼,以及用於儲存體掛接和登錄機碼配接器的 金鑰保存庫 存取。

在以下案例中,App Service 方案的受控身分識別是必要的:

  • 以安全的方式從 Azure 儲存體存取並擷取組態指令碼。
  • 存取 Key Vaults 以提供儲存體掛載與登錄金鑰配接器的憑證與值。

請參閱管理使用者指派的受控身分識別以建立受控身分識別。

要將受控身分識別新增至受控執行個體方案:

  1. 在 Azure 入口網站前往您的受控執行個體。
  2. 選取 [身分識別]> [使用者指派]
  3. 選取 [+ 新增]。
  4. 選取 [訂用帳戶] 和 [受控身分識別]
  5. 選取 [新增] 以將身分識別新增至專案。

新增組態 (安裝) 指令碼

設定(安裝)腳本不是必須的。 當你的應用程式需要安裝相依性或設定作業系統層級功能時,請使用腳本。

組態 (安裝) 指令碼會在執行個體啟動時執行,以套用持久自訂設定。 範例包括元件物件模型(COM)註冊、Microsoft/Windows 安裝程式(MSI)安裝,以及啟用 Windows 角色/功能。 對於必須在執行個體重新啟動後持續留存的變更,請使用組態指令碼。 使用 RDP 來做診斷,而不是用於持久設定。

您需要以下條件才能使用組態 (安裝) 指令碼:

  • 指派至 App Service 方案的受控身分識別
  • 一個儲存體帳戶,其中包含一個儲存著組態 (安裝) 指令碼套件 (zip) 的 Blob 容器。
  • 一個單一的 zip 檔案,其根目錄包含 Install.ps1 (進入點)
  • 儲存體帳戶、容器或資源群組中的 Storage Blob Data Reader 角色

要新增組態指令碼:

  1. 前往 Azure 入口網站的受控執行個體 App Service 方案。

  2. 選取 [組態]> [一般設定]

  3. 在 [組態指令碼] 區塊,先從設定指令碼開始。

    Setting 價值觀
    記憶體帳戶 選取您的儲存體帳戶
    容器 輸入您的容器名稱
    Zip 檔案 輸入 zip 檔案的名稱
    價值觀 確認這個數值是否正確
  4. 選取 [套用] 以儲存變更。

組態指令碼最佳做法

  • 讓指令碼成為等冪 (安裝前先檢查)。
  • 防護破壞性作業 (避免修改受保護的 Windows 系統目錄)。
  • 將大型安裝作業錯開執行,以降低啟動延遲。

最小 zip 結構的範例:

Install.ps1
myInstallerfileNameGoesHere.msi
config.xml

範例組態指令碼:

# Install Components, for example Crystal Reports, Control Library, Database Driver
$ComponentInstaller = "myInstallerFileNameGoesHere.msi"
try {
    $Component = Join-Path $PSScriptRoot $ComponentInstaller
    Start-Process $Component -ArgumentList "/q" -Wait -ErrorAction Stop
} catch {
    Write-Error "Failed to install ${ComponentInstaller}: $_"
    exit 1
}

設定儲存體掛載

儲存掛載提供持久的外部儲存,例如 Azure 檔案儲存體,讓你的應用程式能夠存取。 對於需要存取共用檔案系統的舊版程式碼,請使用儲存體掛載。 不要用儲存座來放秘密;建議改用 金鑰保存庫。 本地儲存是暫時的,但 Azure 檔案儲存體 和自訂 UNC 掛載會在重啟後持續存在。

您需要以下條件來設定儲存體掛載:

  • 受控身分識別 (用於 金鑰保存庫 存取)
  • 金鑰保存庫 秘密 (憑證來源)

設定儲存體掛載:

  1. 在 Azure 入口網站前往您的受控執行個體。
  2. 選取 [組態]> [掛載]
  3. 選取 [+ 新儲存體掛載]

提供以下詳細資訊以設定儲存體掛載:

Setting 價值觀
名稱 輸入掛載名稱
記憶體類型 Azure 檔案儲存體、自訂或本機 (暫存儲存體)
記憶體帳戶 選取或輸入儲存體帳戶
檔案共用 選取一個檔案共用
價值觀 選取一個金鑰保存庫
祕密 選取金鑰保存庫秘密
掛載磁碟機代號 選取磁碟機代號路徑

您可以將外部儲存體掛載到您的受控執行個體。 掛載的儲存空間在重新啟動時是持久存在的,並且可以從你的應用程式檔案系統存取。

使用 Azure 檔案儲存體設定儲存體掛載

要設定 Azure 檔案儲存體掛載:

  1. 建立一個 Azure 儲存體帳戶和一個 Azure 檔案儲存體共用。
  2. 將連線憑證儲存到 金鑰保存庫 作為秘密。 支援的秘密內容:(例如:DefaultEndpointsProtocol=...;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net)
  3. 在受控執行個體 (Azure 入口網站或 ARM/Bicep/Terraform) 中新增掛載。

小提示

透過 Azure RBAC + 共用 ACL 強制執行共用層級權限以增強安全性。

使用自訂 UNC 設定儲存體掛載

將掛載用於託管於其他位置 (內部部署、VM 或非 Microsoft 環境) 的 SMB 共用。 確保網路連線 (虛擬網路整合/私人端點/防火牆)。

  1. 如果需要憑證,請使用下列格式將它們儲存在 金鑰保存庫 祕密中:username=<user>,password=<password>
    • 避免網域管理帳戶;使用最低權限服務識別。
  2. 在受控執行個體中新增掛載。

設定登錄機碼

有些應用程式依賴從 Windows 登錄讀取的值。 使用 Registry Key 配接器,您可以建立登錄機碼,並使用 Azure Key Vault 的秘密作為值。

您需要以下條件來設定登錄機碼:

  • 受控身分識別 (用於 金鑰保存庫 存取)
  • 金鑰保存庫 秘密 (憑證來源)

設定登錄機碼:

  1. 前往 [組態]> [登錄機碼]

  2. 選取 [+ 新增]。

    Setting 價值觀
    路徑 進入登錄路徑
    Vault 輸入現有的保存庫名稱
    祕密 選取或輸入金鑰保存庫秘密
    類型 字串或 DWORD
  3. 選取 [新增] 以新增登錄機碼。

謹慎

修改系統關鍵登錄路徑時請謹慎。 錯誤的變更會影響執行個體穩定性。

設定 RDP (Bastion) 存取權限

快速入門:自動部署 Azure Bastion 讓你透過遠端桌面協定(RDP)安全地連接至虛擬機器實例。 透過 Azure Bastion 的 RDP 主要用於診斷和故障排除。 使用設定腳本來進行持久變更。

您需要以下資源才能透過 Bastion 進行 RDP 存取:

  • 受控執行個體必須與虛擬網路整合
  • Azure Bastion 主機在目標虛擬網路上
  • 連接埠 3389 必須在 Bastion 子網路的 NSG 中設定為允許來自 App Service 方案子網路 NSG。

要設定 Bastion:

  1. 前往 [組態]> [Bastion/RDP]
  2. 確認虛擬網路是否已連接。
  3. 選取 [允許遠端桌面 (透過 Bastion)]

謹慎

請勿僅透過 RDP 連線手動安裝程式或變更組態。 變更在回收或建立組態漂移時會遺失。

常見問題集 (FAQ)

Azure App 服務 上的受控執行個體上執行的是哪個作業系統 (OS)?

Windows Server 2022。

我可以啟用更多 Windows 角色和功能嗎?

是的,透過組態指令碼。 不過,你無法設定未來 Windows Server 版本中移除的功能。

Azure App 服務 上的受控執行個體會定期更新平台與應用程式堆疊嗎?

是的,執行個體會定期進行平台更新與維護。 該服務也會定期更新預裝的應用程式堆疊。 你必須負責維護任何透過設定指令碼安裝的元件。

Azure App 服務 上的受控執行個體上安裝了哪些程式設計語言?

該服務包含 Microsoft .NET Framework 3.5、4.8 及 Microsoft .NET 8.0。 如果你需要其他執行環境,可以用設定腳本安裝。 Azure App 服務 不會將額外的執行階段作為平台的一部分來維護。

組態 (安裝) 指令碼有哪些限制?

設定(安裝)腳本有哪些限制?

組態 (安裝) 指令碼可以安裝相依性、啟用角色與功能,並自訂作業系統。 然而,該服務不支援破壞性操作(例如刪除 Windows\\System32),因為它們可能影響實例穩定性。

組態 (安裝) 指令碼是在什麼權限層級執行的?

組態 (安裝) 指令碼以管理員權限執行,允許安裝與設定系統層級元件。

使用 Bastion 連線執行個體時,操作員擁有哪些角色權限?

透過 Bastion 連線的操作員在工作階段中具備管理員權限。

我該如何疑難排解我的組態 (安裝) 指令碼或登錄/儲存體配接器的故障?

使用 Bastion 連線的操作員在會話中擁有 管理員 權限。 你可以在電腦的根目錄中找到配接器記錄,或者在 App Service Platform Logs 中查看這些記錄。

配接器記錄可於機器根目錄中找到;或者,它們也會被記錄至 App Service 平台記錄中。

Azure App 服務 上的受控執行個體中的背景工作角色執行個體,其可定址記憶體容量是多少?

Azure App 服務 上的受控執行個體中,背景工作角色執行個體的可定址記憶體會依您所選擇的定價方案而異。 下表列出 受控執行個體 工作者實例的可位址記憶體。

定價方案 Cores 記憶體 (MB)
P0v4 1 2048
P1v4 2 5952
P2v4 4 13440
P3v4 8 28672
P1Mv4 2 13440
P2Mv4 4 28672
P3Mv4 8 60160
P4Mv4 16 121088
P5Mv4 32 246016

我應該使用哪個 Azure 儲存體服務來上傳組態 (安裝) 指令碼?

使用 Azure 儲存體 blob 服務來上傳指令碼和必要的相依性。

組態 (安裝) 指令碼的命名和格式有限制嗎?

是的,該指令碼必須命名為 Install.ps1。 僅支援 PowerShell。 確保將設組態 (安裝) 指令碼和相依關係作為單一 .zip 檔案上傳。

作為 zip 檔案的一部分上傳的相依性,是否有大小限制?

沒有強制的大小限制。 請記住,整體相依大小會影響執行個體佈建時間。

在 App Service 方案配接器上新增或編輯受控執行個體會重新啟動方案執行個體?

是的,新增或編輯 受控執行個體 計畫適配器(組態腳本、儲存或登錄檔)會重新啟動底層實例,並影響所有部署到該計畫的網頁應用程式。 實例重新啟動是套用設定變更的必要條件。

我的受控執行個體方案有多個執行個體,我可以重新啟動單一執行個體嗎?

是的,瀏覽到受控執行個體,並在左側選單選取 [執行個體]。 然後在執行個體名稱旁邊選取重新啟動。

我在 App Service 方案中的受控執行個體有多個網頁應用程式,我可以重新啟動單一網頁應用程式嗎?

是的,請瀏覽至應用程式的 [概觀] 頁面,選取 [重新啟動]

我可以在 App Service 方案的受控執行個體中,為我的網頁應用程式指派受控身分識別嗎?

是的,您可以在受控執行個體中為網頁應用程式指派不同的受控執行個體。 遵循受控執行個體指引

在 App Service 方案的受控執行個體中,配接器的數量是否有限制?

我在 App Service 方案中為 受控執行個體 建立的轉接器數量有限制嗎?

否,儲存體或登錄配接器的數量沒有限制。 您只能在 App Service 方案中為受控執行個體建立一個組態 (安裝) 指令碼配接器。 增加配接器數量可能會延長實例佈建時間。