在 Azure Stack Hub 中輪替使用祕密
本文提供執行秘密輪替的指引,協助維護與 Azure Stack Hub 基礎結構資源和服務的安全通訊。
概觀
Azure Stack Hub 使用祕密來維護與基礎結構資源及服務的安全通訊。 為了維護 Azure Stack Hub 基礎結構的完整性,操作人員必須能夠以固定頻率輪替秘密,且頻率要與其組織的安全性需求一致。
當秘密即將到期時,會在系統管理員入口網站中產生下列警示。 完成密鑰輪替會解決下列警示:
- 待核准的服務帳戶密碼到期日
- 擱置的內部憑證到期
- 擱置的外部憑證到期
警告
在到期前,在系統管理員入口網站中觸發了 2 個階段的警示:
- 在到期前 90 天,會產生警告警示。
- 到期前 30 天,就會產生重大警示。
如果您收到這些通知,請務必完成秘密輪替。 若無法這麼做,可能會導致工作負載遺失,而且可能需要以您自己的費用重新部署 Azure Stack Hub。
如需有關警示監視和補救的詳細資訊,請參閱 Azure Stack Hub 的健康狀況和警示監視。
必要條件
- 建議您執行支援的 Azure Stack Hub 版本,並套用實例執行中 Azure Stack Hub 版本的最新可用 Hotfix。 例如,如果您執行 2408,請確定您已安裝 2408
最新的 Hotfix。 - 通知使用者計劃性維護作業。 盡可能安排非上班時間的正常維護時段。 維護作業可能會影響使用者工作負載和入口網站作業。
- 產生 Azure Stack Hub 的憑證簽署要求。
- 準備 Azure Stack Hub PKI 憑證。
- 在秘密輪替期間,操作員可能會注意到警報會自動開啟並關閉。 這是可預期的行為,可以忽略這類警示。 操作員可以使用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) 時。
準備
在輪替外部秘密之前:
使用
Test-AzureStack
參數執行-group SecretRotationReadiness
PowerShell Cmdlet,以確認所有測試輸出都狀況良好,然後再輪替秘密。準備新的一組替代外部憑證:
新的集合必須符合 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 憑證的常見問題。
將備份儲存至安全備份位置中用來輪替的憑證。 如果您的輪替執行而失敗,請在重新執行輪替之前,將檔案共用中的憑證取代為備份複本。 將備份複本保留在安全的備份位置中。
建立您可以從 ERCS VM 存取的檔案共用。 檔案共享必須是可讀取且可寫入 CloudAdmin 身分識別。
從您可存取檔案共用的電腦開啟 PowerShell ISE 主控台。 瀏覽至檔案共用,其為您在其中建立目錄來放置外部憑證的位置。
在名為
Certificates
的檔案共享中建立資料夾。 在 certificates 資料夾內,根據中樞所使用的識別提供者,建立名為AAD
或ADFS
的子資料夾。 例如,.\Certificates\AAD 或 .\Certificates\ADFS。 此處不應建立憑證資料夾和識別提供者子資料夾以外的其他資料夾。將步驟 2 中建立的新取代外部憑證集合複製到步驟 6 中建立的 .\Certificates\<IdentityProvider> 資料夾。 如先前所述,您的識別提供者子資料夾必須是
AAD
或ADFS
。 請確定取代外部憑證的主體別名 (SAN) 遵循 Azure Stack Hub 公鑰基礎結構 (PKI) 憑證需求中指定的cert.<regionName>.<externalFQDN>
格式。以下是 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 和 AD FS 使用 Azure Container Registry 時。
注意
如果您輪替外部容器登錄憑證,則必須在識別提供者子資料夾中手動建立 Container Registry 子資料夾。 此外,您必須在此手動建立的子資料夾中儲存對應的 .pfx 憑證。
輪替
完成下列步驟以輪替外部秘密:
使用下列 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
外部秘密輪替大約需要一小時的時間。 成功完成之後,您的主控台會顯示訊息
ActionPlanInstanceID ... CurrentStatus: Completed
,後面接著Action plan finished with status: 'Completed'
。 從 [準備] 區段中建立的共用移除憑證,並將其儲存在安全的備份位置。注意
如果秘密輪替失敗,請遵循錯誤訊息中的指示,並使用
-ReRun
參數重新執行Start-SecretRotation
:Start-SecretRotation -ReRun
如果您遇到重複的秘密輪替失敗,請連絡支持人員。
或者,若要確認已輪替所有外部憑證,請使用下列腳本執行 Test-AzureStack 驗證工具:
Test-AzureStack -Include AzsExternalCertificates -DetailedResults -debug
輪替內部秘密
內部秘密包含由 Azure Stack Hub 基礎結構使用的憑證、密碼、安全字串及金鑰 (無須 Azure Stack Hub 操作員介入)。 只有您懷疑某個秘密遭到入侵,或收到到期警示時,才需要進行內部秘密輪替。
完成下列步驟以輪替內部秘密:
執行下列 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
成功完成之後,您的主控台會顯示
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 使用者名稱或密碼。
- 遵循 OEM 指示,更新 Azure Stack Hub 實體伺服器上的 BMC。 您環境中每個 BMC 的使用者名稱和密碼必須相同。 BMC 使用者名稱不能超過16個字元。
- 您不再需要遵循 OEM 指示,先更新 Azure Stack Hub 實體伺服器上的 BMC 認證。 您環境中每個 BMC 的使用者名稱和密碼必須相同,且不能超過 16 個字元。
在 Azure Stack Hub 工作階段中開啟具特殊許可權的端點。 如需指示,請參閱 在 Azure Stack Hub 中使用特殊許可權端點。
開啟具特殊權限的端點工作階段之後,請執行下列其中一個 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 資料夾,例如 >。 |
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 環境的特殊許可權端點來執行。
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 憑證。