設定 Azure App Service 上的受控執行個體 (預覽)

Azure App Service 上的受控執行個體 (預覽) 是一種以方案為範圍的裝載選項,適用於要作業系統 (OS) 自訂、可選私人網路及與 Azure 資源安全整合的 Windows Web 應用程式。 本文說明如何在關鍵區域設定受控執行個體:

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

這很重要

受控執行個體目前為預覽版,僅適用於選取區域的 Windows Web 應用程式,且僅限於 Pv4 和 Pmv4 定價方案。 更多地區即將推出。 不支援 Linux 和容器。

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

方案層級的受控身分識別可為發生於平台層的基礎結構作業提供驗證,例如:啟動期間用於存取 Azure 儲存體的組態 (安裝) 指令碼、從 Key Vault 擷取祕密的登錄配接器,以及用於向 Azure 儲存體進行驗證的儲存體掛載。 這些元件是方案中多個應用程式共用的資源。 例如,方案層級身分識別允許受控執行個體對基礎結構元件進行一次驗證,而個別應用程式則為應用程式特定資源 (如資料庫與應用程式秘密) 保留自己的身分識別。

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

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

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

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

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

新增組態 (安裝) 指令碼

組態 (安裝) 指令碼會在執行個體啟動時執行,以套用持久自訂設定。 範例包括,元件物件模型 (COM) 註冊、Microsoft/Windows Installer (MSI) 安裝、Internet Information Services (IIS 伺服器) 設定、ACL 變更、啟用 Windows 功能、設定環境變數。

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

  • 指派至 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 檔案儲存體),供您的應用程式存取。 用於需要共用檔案系統存取的舊版程式碼,而非秘密 (使用 Key Vault)。 雖然也可使用本機 (暫存) 儲存體,但若要進行永久性的變更,則需要儲存體掛載。

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

  • 受控身分識別 (用於 Key Vault 存取)
  • Key Vault 秘密 (憑證來源)

設定儲存體掛載:

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

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

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

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

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

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

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

小提示

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

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

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

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

設定登錄機碼

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

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

  • 受控身分識別 (用於 Key Vault 存取)
  • Key Vault 秘密 (憑證來源)

設定登錄機碼:

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

  2. 選取 [+ 新增]。

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

謹慎

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

設定 RDP (Bastion) 存取權限

快速入門:自動部署 Azure Bastion 讓你透過遠端桌面協定(RDP)安全地連接至虛擬機器實例。 透過 Azure Bastion 進行 RDP 僅適用於暫時性的診斷作業 (例如記錄檢查、快速驗證)。 如果您打算透過入口網站使用 Bastion,請將您的 Bastion 資源升級到標準定價層級,並選取 [Native Client Support 和 IP 型連線]

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

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

要設定 Bastion:

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

謹慎

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

常見問題集 (FAQ)

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

Windows Server 2022。

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

是的,透過組態指令碼。 然而,未來 Windows Server 版本中移除的功能,在受控執行個體中也將無法使用。

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

是的,執行個體會定期進行平台更新與維護。 預先安裝的應用程式堆疊也會定期更新。 您必須透過組態 (安裝) 指令碼維護任何安裝的元件。

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

Microsoft .NET Framework 3.5、4.8 以及 Microsoft .NET 8.0。 如果您需要其他執行階段,可以用組態指令碼安裝。 這些資料不會由平台維護,必須手動更新。

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

組態 (安裝) 指令碼可以安裝相依性、啟用角色與功能,並自訂作業系統。 然而,破壞性作業 (例如,刪除 Windows\System32) 不被支援,可能導致執行個體不穩定。

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

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

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

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

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

若要疑難排解,請檢閱組態 (安裝) 指令碼的記錄。 它們可以在執行個體的 C:\InstallScripts\Script\Install.log 中找到 (不是 Web 應用程式)。 或者,App Service 主控台記錄也可以被傳送到 Azure 監視器和 Log Analytics。

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

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

Azure App Service 上的受控執行個體中的背景工作角色執行個體的可定址記憶體會依所選的定價方案而異。 下表列出 Azure App Service 上的受控執行個體中的背景工作角色執行個體的可定址記憶體。 請務必確認,若您的組態指令碼會安裝額外的元件、服務等,這些資源將佔用記憶體,從而影響 Web 應用程式可用的記憶體容量。

定價方案 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 方案配接器上新增或編輯受控執行個體會重新啟動方案執行個體?

是的,新增或編輯受控執行個體方案配接器 (組態指令碼/儲存體/登錄) 會重新啟動底層執行個體,並影響所有部署到該方案的 Web 應用程式。 請記住,執行個體重啟會移除所有透過 RDP 工作階段所做的變更。 請務必使用組態 (安裝) 指令碼,持久化所需的相依性安裝或其他組態變更。

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

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

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

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

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

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

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

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

支援 App Service 的管理實例的地區有哪些?

目前 App Service 對受管實例的支援僅限於美國東部、美國中西部、東亞、北歐及澳洲東部。 未來預覽會陸續新增更多地區。 要取得更新的區域清單,您可以使用以下 CLI 指令(您必須使用 Azure CLI 版本 2.82.0 或以上)。

az appservice list-locations --managed-instance-enabled --sku <Pv4 or PmV4 sku your require, for example P1v4>