共用方式為


在 Azure Stack Hub 中輪替使用祕密

本文提供執行秘密輪替的指引,協助維護與 Azure Stack Hub 基礎結構資源和服務的安全通訊。

概觀

Azure Stack Hub 使用祕密來維護與基礎結構資源及服務的安全通訊。 為了維護 Azure Stack Hub 基礎結構的完整性,操作人員必須能夠以固定頻率輪替秘密,且頻率要與其組織的安全性需求一致。

當秘密即將到期時,會在系統管理員入口網站中產生下列警示。 完成秘密輪替可以解決這些警示:

  • 待核准的服務帳戶密碼到期日
  • 擱置的內部憑證到期
  • 擱置的外部憑證到期

警告

在到期前,在系統管理員入口網站中觸發了 2 個階段的警示:

  • 在到期前 90 天,會產生警告警示。
  • 到期前 30 天,就會產生重大警示。

如果您收到這些通知,請務必完成秘密輪替。 若無法這麼做,可能會導致工作負載遺失,以及可能以您自己的費用重新部署 Azure Stack Hub!

如需警示監視和補救的詳細資訊,請參閱 在 Azure Stack Hub 中監視健康情況和警示。

注意

1811 版前版本的 Azure Stack Hub 環境可能會看到擱置內部憑證或秘密到期的警示。 這些警示不正確,而且應該忽略而不執行內部秘密輪替。 不正確的內部秘密到期警示是1811中解決的已知問題。 除非環境已使用兩年,否則內部秘密不會過期。

必要條件

  1. 強烈建議您執行支援的 Azure Stack Hub 版本,並針對實例執行中的 Azure Stack Hub 版本套用最新的可用 Hotfix。 例如,如果您正在執行 2008,請確定您已安裝 2008 可用的最新 Hotfix。

    重要

    針對 1811 版前版本:

    • 如果已經執行秘密輪替,您必須先更新為 1811 版或更新版本,才能再次執行秘密輪替。 秘密輪替必須透過 特殊許可權端點 執行,而且需要 Azure Stack Hub 操作員認證。 如果您不知道秘密輪替是否已在您的環境中執行,請在執行秘密輪替之前更新為 1811。
    • 您不需要輪替秘密來新增擴充主機憑證。 您應該遵循準備 Azure Stack Hub 擴充主機一文中的指示來新增擴充主機憑證。
  2. 通知使用者計劃性維護作業。 盡可能安排非上班時間的正常維護時段。 維護作業可能會影響使用者工作負載和入口網站作業。

  3. 產生 Azure Stack Hub 的憑證簽署要求。

  4. 準備 Azure Stack Hub PKI 憑證

  5. 在秘密輪替期間,操作員可能會注意到警示開啟並自動關閉。 這是可預期的行為,可以忽略這類警示。 操作員可以使用Test-AzureStack PowerShell Cmdlet 來驗證這些警示的有效性。 針對操作員,使用 System Center Operations Manager 來監視 Azure Stack Hub 系統,將系統置於維護模式會防止這些警示到達 ITSM 系統。 不過,如果無法連線到 Azure Stack Hub 系統,警示將會繼續出現。

輪替外部秘密

重要

外部秘密輪替:

本節涵蓋用來保護外部服務之憑證的輪替。 這些憑證是由 Azure Stack Hub 操作員提供,適用於下列服務:

  • 管理員入口網站
  • 公用連接埠
  • 系統管理員 Azure Resource Manager
  • 全域 Azure Resource Manager
  • 系統管理員 Key Vault
  • Key Vault
  • 管理員延伸主機
  • ACS (包含 blob、資料表及佇列儲存體)
  • ADFS1
  • 圖表1
  • Container Registry2

1適用於使用 Active Directory 同盟服務 (ADFS) 時。

2適用於使用 Azure Container Registry (ACR) 時。

準備

在輪替外部秘密之前:

  1. 使用 -group SecretRotationReadiness 參數執行 Test-AzureStack PowerShell Cmdlet,以確認所有測試輸出都狀況良好,然後再輪替秘密。

  2. 準備新的一組替代外部憑證:

    • 新的集合必須符合 Azure Stack Hub PKI 憑證需求中所述的憑證規格。

    • 產生憑證簽署要求 (CSR) 來提交至您的憑證授權單位 (CA)。 使用產生憑證簽署要求中所述的步驟,並使用準備 PKI 憑證中的步驟,準備它們以在 Azure Stack Hub 環境中使用。 Azure Stack Hub 支援下列內容中新證書頒發機構單位 (CA) 的外部憑證秘密輪替:

      從 CA 輪替 輪替至 CA Azure Stack Hub 版本支援
      自我簽署 Enterprise 1903 年和更新版本
      自我簽署 自我簽署 不支援
      自我簽署 公共* 1803 和更新版本
      Enterprise Enterprise 1803 和更新版本;1803-1903,如果部署時使用的相同企業 CA
      Enterprise 自我簽署 不支援
      Enterprise 公共* 1803 和更新版本
      公共* Enterprise 1903 年和更新版本
      公共* 自我簽署 不支援
      公共* 公共* 1803 和更新版本

      *Windows 信任根程式的一部分。

    • 請務必使用驗證 PKI 憑證中所述 的步驟來驗證您準備的憑證

    • 請確定密碼中沒有特殊字元,例如 $*#,,'@or

    • 確保 PFX 加密為 TripleDES-SHA1。 如果您遇到問題,請參閱 修正 Azure Stack Hub PKI 憑證的常見問題。

  3. 將備份儲存至安全備份位置中用來輪替的憑證。 如果您的輪替執行而失敗,請在重新執行輪替之前,將檔案共用中的憑證取代為備份複本。 將備份複本保留在安全的備份位置中。

  4. 建立您可以從 ERCS VM 存取的檔案共用。 檔案共享必須是可讀取且可寫入 CloudAdmin 身分識別。

  5. 從您可存取檔案共用的電腦開啟 PowerShell ISE 主控台。 瀏覽至檔案共用,其為您在其中建立目錄來放置外部憑證的位置。

  6. 在名為 Certificates的檔案共享中建立資料夾。 在 certificates 資料夾內,根據中樞所使用的識別提供者,建立名為 AADADFS的子資料夾。 例如,.\Certificates\AAD.\Certificates\ADFS 此處不應建立憑證資料夾和識別提供者子資料夾以外的其他資料夾。

  7. 將步驟 2 中建立的新取代外部憑證集合複製到步驟 6 中建立的 .\Certificates\<IdentityProvider> 資料夾。 如上所述,您的識別提供者子資料夾必須是 AADADFS。 請確定取代外部憑證的主體別名 (SAN) 遵循 cert.<regionName>.<externalFQDN> Azure Stack Hub 公鑰基礎結構 (PKI) 憑證需求中指定的格式。

    以下是 Microsoft Entra 識別提供者的資料夾結構範例:

        <ShareName>
            │
            └───Certificates
                  └───AAD
                      ├───ACSBlob
                      │       <CertName>.pfx
                      │
                      ├───ACSQueue
                      │       <CertName>.pfx
                      │
                      ├───ACSTable
                      │       <CertName>.pfx
                      │
                      ├───Admin Extension Host
                      │       <CertName>.pfx
                      │
                      ├───Admin Portal
                      │       <CertName>.pfx
                      │
                      ├───ARM Admin
                      │       <CertName>.pfx
                      │
                      ├───ARM Public
                      │       <CertName>.pfx
                      │
                      ├───Container Registry*
                      │       <CertName>.pfx
                      │
                      ├───KeyVault
                      │       <CertName>.pfx
                      │
                      ├───KeyVaultInternal
                      │       <CertName>.pfx
                      │
                      ├───Public Extension Host
                      │       <CertName>.pfx
                      │
                      └───Public Portal
                              <CertName>.pfx
    

*適用於針對 Microsoft Entra ID 和 ADFS 使用 Azure Container Registry (ACR) 時。

注意

如果您要輪替外部 Container Registry 憑證,則必須在識別提供者子資料夾中手動建立 Container Registry 子資料夾。 此外,您必須在此手動建立的子資料夾中儲存對應的 .pfx 憑證。

輪替

完成下列步驟以輪替外部秘密:

  1. 使用下列 PowerShell 指令碼來輪替秘密。 指令碼需要特殊權限端點 (PEP) 工作階段存取權。 PEP 是透過裝載 PEP 之虛擬機 (VM) 上的遠端 PowerShell 工作階段來存取。 如果您使用整合系統,則有三個 PEP 實例,每個實例都在不同主機上的 VM 內執行(Prefix-ERCS01、Prefix-ERCS02 或 Prefix-ERCS03)。 該指令碼會執行下列步驟:

    • 使用 CloudAdmin 帳戶建立具有特殊許可權端點PowerShell 工作階段,並將會話儲存為變數。 在下一個步驟中,該變數會用來作為參數。

    • 執行 Invoke-Command,將 PEP 會話變數傳遞為 -Session 參數。

    • 使用下列參數在 PEP 會話中執行 Start-SecretRotation 。 如需詳細資訊,請參閱 Start-SecretRotation 參考:

      參數 變數 描述
      -PfxFilesPath $CertSharePath 如準備一節的步驟 #6 所述,憑證根資料夾的網路路徑,例如 \\<IPAddress>\<ShareName>\Certificates
      -PathAccessCredential $CertShareCreds PSCredential 物件,用於共用的認證。
      -CertificatePassword $CertPassword 密碼的安全字串,用於建立的所有 pfx 憑證檔案。
    # Create a PEP session
    winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
    $PEPCreds = Get-Credential
    $PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS_Machine> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    # Run secret rotation
    $CertPassword = ConvertTo-SecureString '<Cert_Password>' -AsPlainText -Force
    $CertShareCreds = Get-Credential
    $CertSharePath = "<Network_Path_Of_CertShare>"
    Invoke-Command -Session $PEPsession -ScriptBlock {
        param($CertSharePath, $CertPassword, $CertShareCreds )
        Start-SecretRotation -PfxFilesPath $CertSharePath -PathAccessCredential $CertShareCreds -CertificatePassword $CertPassword
    } -ArgumentList ($CertSharePath, $CertPassword, $CertShareCreds)
    Remove-PSSession -Session $PEPSession
    
  2. 外部秘密輪替大約需要一小時的時間。 成功完成之後,您的主控台會顯示訊息 ActionPlanInstanceID ... CurrentStatus: Completed ,後面接著 Action plan finished with status: 'Completed'。 從 [準備] 區段中建立的共用移除憑證,並將其儲存在安全的備份位置。

    注意

    如果秘密輪替失敗,請遵循錯誤訊息中的指示,並使用 -ReRun 參數重新執行Start-SecretRotation

    Start-SecretRotation -ReRun
    

    如果您遇到重複的秘密輪替失敗,請連絡支持人員。

  3. 或者,若要確認已輪替所有外部憑證,請使用下列腳本執行 Test-AzureStack 驗證工具

    Test-AzureStack -Include AzsExternalCertificates -DetailedResults -debug
    

輪替內部秘密

內部秘密包含由 Azure Stack Hub 基礎結構使用的憑證、密碼、安全字串及金鑰 (無須 Azure Stack Hub 操作員介入)。 只有您懷疑某個秘密遭到入侵,或收到到期警示時,才需要進行內部秘密輪替。

1811 之前的部署可能會看到擱置內部憑證或秘密到期的警示。 這些警示不正確,因此應該忽略,而且是1811中解決的已知問題。

完成下列步驟以輪替內部秘密:

  1. 執行下列 PowerShell 指令碼。 請注意內部秘密輪替,[執行秘密輪替] 區段只會-Internal使用 Start-SecretRotation Cmdlet 的參數

    # Create a PEP Session
    winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
    $PEPCreds = Get-Credential
    $PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS_Machine> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    # Run Secret Rotation
    Invoke-Command -Session $PEPSession -ScriptBlock {
        Start-SecretRotation -Internal
    }
    Remove-PSSession -Session $PEPSession
    

    注意

    1811 版前不需要 -Internal 旗標。

  2. 成功完成之後,您的主控台會顯示訊息 ActionPlanInstanceID ... CurrentStatus: Completed ,後面接著 Action plan finished with status: 'Completed'

    注意

    如果祕密輪替失敗,請依照錯誤訊息中的指示操作,並使用 -Internal-ReRun 參數重新執行 Start-SecretRotation

    Start-SecretRotation -Internal -ReRun
    

    如果您遇到重複的秘密輪替失敗,請連絡支持人員。

輪替 Azure Stack Hub 跟證書

Azure Stack Hub 跟證書會在部署期間布建,到期五年。 從 2108 開始,內部秘密輪替也會輪替跟證書。 標準秘密到期警示會識別跟證書的到期時間,並在 90(警告)和 30 天產生警示。

若要輪替跟證書,您必須將系統更新為 2108,並執行 內部秘密輪替

下列代碼段會使用特殊許可權端點來列出跟證書的到期日:

$pep = New-PSSession -ComputerName <ip address> -ConfigurationName PrivilegedEndpoint -Credential $cred -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) 
 
$stampInfo = Invoke-Command -Session $pep -ScriptBlock { Get-AzureStackStampInformation }

$rootCert = $stampInfo.RootCACertificates| Sort-Object -Property NotAfter | Select-Object -Last 1
"The Azure Stack Hub Root Certificate expires on {0}" -f $rootCert.NotAfter.ToString("D") | Write-Host -ForegroundColor Cyan

更新 BMC 認證

基礎板管理控制器會監視伺服器的實體狀態。 如需更新 BMC 使用者帳戶名稱和密碼的指示,請參閱原始設備製造商 (OEM) 硬體廠商。

注意

您的 OEM 可能會提供其他管理應用程式。 更新其他管理應用程式的使用者名稱或密碼不會影響 BMC 使用者名稱或密碼。

  1. 遵循 OEM 指示,更新 Azure Stack Hub 實體伺服器上的 BMC。 您環境中每個 BMC 的使用者名稱和密碼必須相同。 BMC 使用者名稱不能超過16個字元。
  1. 您不再需要遵循 OEM 指示,先更新 Azure Stack Hub 實體伺服器上的 BMC 認證。 您環境中每個 BMC 的使用者名稱和密碼必須相同,且不能超過 16 個字元。
  1. 在 Azure Stack Hub 工作階段中開啟具特殊許可權的端點。 如需指示,請參閱 在 Azure Stack Hub 中使用特殊許可權端點。

  2. 開啟具有特殊許可權的端點會話之後,請執行下列其中一個 PowerShell 腳本,以使用 Invoke-Command 來執行 Set-BmcCredential。 如果您使用選擇性 -BypassBMCUpdate 參數搭配 Set-BMCCredential,則 BMC 中的認證不會更新。 只會更新 Azure Stack Hub 內部數據存放區。 將您的特殊許可權端點會話變數當做參數傳遞。

    以下是會提示使用者名稱和密碼的 PowerShell 文稿範例:

    # Interactive Version
    $PEPIp = "<Privileged Endpoint IP or Name>" # You can also use the machine name instead of IP here.
    $PEPCreds = Get-Credential "<Domain>\CloudAdmin" -Message "PEP Credentials"
    $NewBmcPwd = Read-Host -Prompt "Enter New BMC password" -AsSecureString
    $NewBmcUser = Read-Host -Prompt "Enter New BMC user name"
    
    $PEPSession = New-PSSession -ComputerName $PEPIp -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    Invoke-Command -Session $PEPSession -ScriptBlock {
        # Parameter BmcPassword is mandatory, while the BmcUser parameter is optional.
        Set-BmcCredential -BmcPassword $using:NewBmcPwd -BmcUser $using:NewBmcUser
    }
    Remove-PSSession -Session $PEPSession
    

    您也可以在變數中編碼使用者名稱和密碼,這可能較不安全:

    # Static Version
    $PEPIp = "<Privileged Endpoint IP or Name>" # You can also use the machine name instead of IP here.
    $PEPUser = "<Privileged Endpoint user for example Domain\CloudAdmin>"
    $PEPPwd = ConvertTo-SecureString '<Privileged Endpoint Password>' -AsPlainText -Force
    $PEPCreds = New-Object System.Management.Automation.PSCredential ($PEPUser, $PEPPwd)
    $NewBmcPwd = ConvertTo-SecureString '<New BMC Password>' -AsPlainText -Force
    $NewBmcUser = "<New BMC User name>"
    
    $PEPSession = New-PSSession -ComputerName $PEPIp -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    Invoke-Command -Session $PEPSession -ScriptBlock {
        # Parameter BmcPassword is mandatory, while the BmcUser parameter is optional.
        Set-BmcCredential -BmcPassword $using:NewBmcPwd -BmcUser $using:NewBmcUser
    }
    Remove-PSSession -Session $PEPSession
    

參考:Start-SecretRotation Cmdlet

Start-SecretRotation Cmdlet 會輪替 Azure Stack Hub 系統的基礎結構秘密。 此 Cmdlet 只能針對 Azure Stack Hub 特殊許可權端點執行,方法是使用 Invoke-Command 腳本區塊在 參數中 -Session 傳遞 PEP 會話。 根據預設,它只會輪替所有外部網路基礎結構端點的憑證。

參數 類型​ 必要 Position 預設 描述
PfxFilesPath String False 已命名 包含所有外部網路端點憑證之 \Certificates 根資料夾的檔案共享路徑。 只有在輪替外部秘密時才需要。 路徑結尾必須是 \Certificates 資料夾,例如 \\<IPAddress>\<ShareName>\Certificates
CertificatePassword SecureString False 已命名 -PfXFilesPath 中提供之所有憑證的密碼。 如果輪替外部秘密時會提供 PfxFilesPath 的必要值。
Internal String False 已命名 每當 Azure Stack Hub 操作員想要輪替內部基礎結構秘密時,都必須使用內部旗標。
PathAccessCredential PSCredential False 已命名 包含所有外部網路端點憑證之 \Certificates 目錄檔案共用的 PowerShell 認證。 只有在輪替外部秘密時才需要。
ReRun SwitchParameter False 已命名 必須在嘗試失敗后重新嘗試秘密輪替時使用。

語法

針對外部秘密輪替

Start-SecretRotation [-PfxFilesPath <string>] [-PathAccessCredential <PSCredential>] [-CertificatePassword <SecureString>]  

針對內部秘密輪替

Start-SecretRotation [-Internal]  

針對外部秘密輪替重新執行

Start-SecretRotation [-ReRun]

針對內部秘密輪替重新執行

Start-SecretRotation [-ReRun] [-Internal]

範例

只輪替內部基礎結構秘密

此命令必須透過 Azure Stack Hub 環境的特殊許可權端點來執行。

PS C:\> Start-SecretRotation -Internal

此命令會輪替公開至 Azure Stack Hub 內部網路的所有基礎結構秘密。

只輪替外部基礎結構秘密

# Create a PEP Session
winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
$PEPCreds = Get-Credential
$PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)

# Create Credentials for the fileshare
$CertPassword = ConvertTo-SecureString '<CertPasswordHere>' -AsPlainText -Force
$CertShareCreds = Get-Credential
$CertSharePath = "<NetworkPathOfCertShare>"
# Run Secret Rotation
Invoke-Command -Session $PEPsession -ScriptBlock {
    param($CertSharePath, $CertPassword, $CertShareCreds )
    Start-SecretRotation -PfxFilesPath $CertSharePath -PathAccessCredential $CertShareCreds -CertificatePassword $CertPassword
} -ArgumentList ($CertSharePath, $CertPassword, $CertShareCreds)
Remove-PSSession -Session $PEPSession

此命令會輪替用於 Azure Stack Hub 外部網路基礎結構端點的 TLS 憑證。

輪替內部和外部基礎結構秘密(僅限 1811 年前)

重要

此命令僅適用於 1811 之前的 Azure Stack Hub,因為內部和外部憑證的輪替已分割。

1811+ 起,您無法再輪替內部和外部憑證!

# Create a PEP Session
winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
$PEPCreds = Get-Credential
$PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Create Credentials for the fileshare
$CertPassword = ConvertTo-SecureString '<CertPasswordHere>' -AsPlainText -Force
$CertShareCreds = Get-Credential
$CertSharePath = "<NetworkPathOfCertShare>"
# Run Secret Rotation
Invoke-Command -Session $PEPSession -ScriptBlock {
    Start-SecretRotation -PfxFilesPath $using:CertSharePath -PathAccessCredential $using:CertShareCreds -CertificatePassword $using:CertPassword
}
Remove-PSSession -Session $PEPSession

此命令會輪替公開至 Azure Stack Hub 內部網路的基礎結構秘密,以及用於 Azure Stack Hub 外部網路基礎結構端點的 TLS 憑證。 Start-SecretRotation 會輪替所有堆疊產生的秘密,而且因為有提供的憑證,也會輪替外部端點憑證。

下一步

深入瞭解 Azure Stack Hub 安全性