Azure Stack Hub 中的 MySQL 资源提供程序维护操作
重要
从 Azure Stack Hub 2108 版开始,SQL 和 MySQL 资源提供程序将提供给已获得访问权限的订阅。 如果想要开始使用此功能,或者需要从之前的版本升级,请创建支持案例,我们的支持工程师将指导你完成部署或升级过程。
MySQL 资源提供程序在锁定的虚拟机 (VM) 上运行。 若要启用维护操作,需要更新 VM 的安全性。 若要使用“最低特权”原则 (POLP) 执行此操作,可以使用 PowerShell Just Enough Administration (JEA) 终结点 DBAdapterMaintenance。 资源提供程序安装包包含此操作的脚本。
修补和更新
不能将 MySQL 资源提供程序作为 Azure Stack Hub 的一部分进行维护,因为它是一个加载项组件。 Microsoft 会根据需要为 MySQL 资源提供程序提供更新。
对于 MySQL RP V1,发布更新的 MySQL Server 资源提供程序后,会提供一个脚本来应用更新。 此脚本创建新的资源提供程序 VM,并将旧提供程序 VM 的状态迁移到新 VM。
对于 MySQL RP V2,资源提供程序使用用于应用 Azure Stack Hub 更新的相同更新功能进行更新。
有关详细信息,请参阅更新 MySQL 资源提供程序。
更新提供程序 VM
由于 MySQL RP V1 在用户 VM 上运行,因此需要应用已发布的所需修补和升级。 可以在安装或更新资源提供程序期间安装 Windows 更新包。
MySQL RP V2 在隐藏的托管 Windows Server 上运行。 不需要修补或更新资源提供程序 VM。 更新 RP 时,它将自动更新。
更新 VM Windows Defender 定义
这些说明仅适用于在 Azure Stack Hub 集成系统上运行的 SQL RP V1。
若要更新 Defender 定义,请执行以下步骤:
从 Windows Defender 定义下载 Windows Defender 定义更新
在定义页上,向下滚动到“手动下载并安装定义”。 下载“适用于 Windows 10 和 Windows 8.1 的 Windows Defender Antivirus”64 位文件。
或者,使用此直接链接下载/运行 fpam-fe.exe 文件。
打开与 MySQL 资源提供程序适配器 VM 的维护终结点建立的一个 PowerShell 会话。
使用维护终结点会话将定义更新文件复制到资源提供程序适配器 VM。
在维护 PowerShell 会话中,运行 Update-DBAdapterWindowsDefenderDefinitions 命令。
安装定义之后,我们建议使用 Remove-ItemOnUserDrive 命令删除定义更新文件。
用于更新定义的 PowerShell 脚本示例。
可以编辑并运行以下脚本来更新 Defender 定义。 将脚本中的值替换为环境中的值。
# Set credentials for the local admin on the resource provider VM.
$vmLocalAdminPass = ConvertTo-SecureString '<local admin user password>' -AsPlainText -Force
$vmLocalAdminUser = "<local admin user name>"
$vmLocalAdminCreds = New-Object System.Management.Automation.PSCredential `
($vmLocalAdminUser, $vmLocalAdminPass)
# Provide the public IP address for the adapter VM.
$databaseRPMachine = "<RP VM IP address>"
$localPathToDefenderUpdate = "C:\DefenderUpdates\mpam-fe.exe"
# Download Windows Defender update definitions file from https://www.microsoft.com/en-us/wdsi/definitions.
Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64' `
-Outfile $localPathToDefenderUpdate
# Create a session to the maintenance endpoint.
$session = New-PSSession -ComputerName $databaseRPMachine `
-Credential $vmLocalAdminCreds -ConfigurationName DBAdapterMaintenance `
-SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Copy the defender update file to the adapter VM.
Copy-Item -ToSession $session -Path $localPathToDefenderUpdate `
-Destination "User:\"
# Install the update definitions.
Invoke-Command -Session $session -ScriptBlock `
{Update-AzSDBAdapterWindowsDefenderDefinition -DefinitionsUpdatePackageFile "User:\mpam-fe.exe"}
# Cleanup the definitions package file and session.
Invoke-Command -Session $session -ScriptBlock `
{Remove-AzSItemOnUserDrive -ItemPath "User:\mpam-fe.exe"}
$session | Remove-PSSession
为 MySQL 资源提供程序配置 Azure 诊断扩展
这些说明仅适用于在 Azure Stack Hub 集成系统上运行的 SQL RP V1。
默认情况下,在 MySQL 资源提供程序适配器 VM 上安装 Azure 诊断扩展。 以下步骤介绍如何为收集 MySQL 资源提供程序操作事件日志和 IIS 日志自定义扩展,以便用于故障排除和审核。
登录到 Azure Stack Hub 管理员门户。
从左侧窗格中选择“虚拟机”,搜索 MySQL 资源提供程序适配器 VM,然后选择该 VM。
在 VM 的“诊断设置”中,转到“日志”选项卡,然后选择“自定义”,以自定义要收集的事件日志。
添加 Microsoft-AzureStack-DatabaseAdapter/Operational!* 用于收集 MySQL 资源提供程序操作事件日志。
若要启用 IIS 日志收集,请选中“IIS 日志”和“失败请求日志”。
最后,选择“保存”以保存所有诊断设置。
为 MySQL 资源提供程序配置事件日志和 IIS 日志收集后,即可在名为 mysqladapterdiagaccount 的系统存储帐户中找到日志。
若要详细了解 Azure 诊断扩展,请参阅什么是 Azure 诊断扩展。
机密轮换
这些说明仅适用于 Azure Stack Hub 集成系统。
在 Azure Stack Hub 集成系统中使用 SQL 和 MySQL 资源提供程序时,Azure Stack Hub 操作员负责轮换以下资源提供程序基础结构机密以确保它们不会过期:
- 部署期间提供的外部 SSL 证书。
- 部署期间提供的资源提供程序 VM 本地管理员帐户密码。
- 资源提供程序诊断用户 (dbadapterdiag) 密码。
- (版本 >= 1.1.47.0)在部署过程中生成的 Key Vault 证书。
用于轮换机密的 PowerShell 示例
同时更改所有机密:
.\SecretRotationMySQLProvider.ps1 `
-Privilegedendpoint $Privilegedendpoint `
-CloudAdminCredential $cloudCreds `
-AzCredential $adminCreds `
-DiagnosticsUserPassword $passwd `
-DependencyFilesLocalPath $certPath `
-DefaultSSLCertificatePassword $certPasswd `
-VMLocalCredential $localCreds `
-KeyVaultPfxPassword $keyvaultCertPasswd
更改诊断用户密码:
.\SecretRotationMySQLProvider.ps1 `
-Privilegedendpoint $Privilegedendpoint `
-CloudAdminCredential $cloudCreds `
-AzCredential $adminCreds `
-DiagnosticsUserPassword $passwd
更改 VM 本地管理员帐户密码:
.\SecretRotationMySQLProvider.ps1 `
-Privilegedendpoint $Privilegedendpoint `
-CloudAdminCredential $cloudCreds `
-AzCredential $adminCreds `
-VMLocalCredential $localCreds
轮换 SSL 证书
.\SecretRotationMySQLProvider.ps1 `
-Privilegedendpoint $Privilegedendpoint `
-CloudAdminCredential $cloudCreds `
-AzCredential $adminCreds `
-DependencyFilesLocalPath $certPath `
-DefaultSSLCertificatePassword $certPasswd
轮换 Key Vault 证书
.\SecretRotationSQLProvider.ps1 `
-Privilegedendpoint $Privilegedendpoint `
-CloudAdminCredential $cloudCreds `
-AzCredential $adminCreds `
-KeyVaultPfxPassword $keyvaultCertPasswd
SecretRotationMySQLProvider.ps1 参数
参数 | 说明 | 注释 |
---|---|---|
AzureEnvironment | 用于部署 Azure Stack Hub 的服务管理员帐户的 Azure 环境。 仅适用于Microsoft Entra部署。 支持的环境名称为 AzureCloud、AzureUSGovernment,或者如果使用中国Microsoft Entra ID,则为 AzureChinaCloud。 | 可选 |
AzCredential | Azure Stack Hub 服务管理员帐户凭据。 如果用于 AzCredential 的帐户需要多重身份验证 (MFA),则脚本将失败。 | 必需 |
CloudAdminCredential | Azure Stack Hub 云管理域帐户凭据。 | 必需 |
PrivilegedEndpoint | 用于访问 Get-AzureStackStampInformation 的特权终结点。 | 必需 |
DiagnosticsUserPassword | 诊断用户帐户密码。 | 可选 |
VMLocalCredential | MySQLAdapter VM 上的本地管理员帐户。 | 可选 |
DefaultSSLCertificatePassword | 默认 SSL 证书 (*.pfx) 密码。 | 可选 |
DependencyFilesLocalPath | 依赖项文件本地路径。 | 可选 |
KeyVaultPfxPassword | 用于为数据库适配器生成 Key Vault 证书的密码。 | 可选 |
这些说明仅适用于在 Azure Stack Hub 集成系统上运行的 MySQL RP V2。
注意
目前仅支持通过 PowerShell 进行的增值资源提供程序 (RP) 的机密轮换。
与 Azure Stack Hub 基础结构一样,增值资源提供程序同时使用内部和外部机密。 作为操作员,你负责:
提供更新的外部机密,如用于保护资源提供程序终结点的新 TLS 证书。
定期管理资源提供程序机密轮换。
在机密接近过期时,管理员门户中会生成以下警报。 完成机密轮换可解决以下警报:
挂起的内部证书过期
挂起的外部证书过期
先决条件
在准备轮换的过程中:
在继续操作之前,请为 Azure Stack Hub 安装 PowerShell Az 模块(如果尚未这样做)。 Azure Stack Hub 机密轮换需要 2.0.2-preview 或更高版本。 有关详细信息,请参阅在 Azure Stack Hub 中从 AzureRM 迁移到 Azure PowerShell Az。
安装 Azs.Deployment.Admin 1.0.0 模块:PowerShell 库 | Azs.Deployment.Admin 1.0.0
Install-Module -Name Azs.Deployment.Admin
- 如果外部证书即将到期,在获取/续订 X509 证书之前,请查看 Azure Stack Hub 公钥基础结构 (PKI) 证书要求以获取重要的先决条件信息,包括有关所需 PFX 格式的详细信息。 还要查看在“可选 PaaS 证书”部分中为你的特定增值资源提供程序指定的要求。
为外部证书轮换准备新的 TLS 证书
注意
如果仅内部证书即将到期,则可跳过此部分。
接下来,创建或续订 TLS 证书,以保护增值资源提供程序终结点:
完成为资源提供程序的证书续订生成证书签名请求 (CSR) 中的步骤。 在这里,可使用 Azure Stack Hub 就绪性检查器工具来创建 CSR。 请确保在“为其他 Azure Stack Hub 服务生成证书请求”步骤中为资源提供程序运行正确的 cmdlet。 例如,
New-AzsDbAdapterCertificateSigningRequest
用于 SQL 和 MySQL RP。 完成后,将生成的 .REQ 文件提交到新证书的证书颁发机构 (CA)。收到来自 CA 的证书文件后,请完成为部署或轮换准备证书中的步骤。 再次使用就绪性检查器工具处理从 CA 返回的文件。
最后,完成验证 Azure Stack Hub PKI 证书中的步骤。 再次使用就绪性检查器工具对新证书执行验证测试。
轮换内部证书
打开提升了权限的 PowerShell 控制台并完成以下步骤,以轮换资源提供程序的外部机密:
使用操作员凭据登录到 Azure Stack Hub 环境。 请参阅使用 PowerShell 连接到 Azure Stack Hub 以了解 PowerShell 登录脚本。 请确保使用 PowerShell Az cmdlet(而不是 AzureRM)并替换所有占位符值,例如终结点 URL 和目录租户名称。
确定资源提供程序的 product-id。 运行
Get-AzsProductDeployment
cmdlet 可检索最新资源提供程序部署的列表。 对于每个已部署的资源提供程序,返回的"value"
集合都包含一个对应的元素。 找到相关的资源提供程序,并且记下这些属性的值:-
"name"
- 在值的第二个段中包含资源提供程序产品 ID。
例如,MySQL RP 部署的产品 ID 可能为
"microsoft.mysqlrp"
。-
运行
Invoke-AzsProductRotateSecretsAction
cmdlet,轮换内部证书:Invoke-AzsProductRotateSecretsAction -ProductId $productId
轮换外部证书
首先需要记下以下参数的值。
占位符 | 说明 | 示例值 |
---|---|---|
<product-id> |
最新资源提供程序部署的产品 ID。 | microsoft.mysqlrp |
<installed-version> |
最新资源提供程序部署的版本。 | 2.0.0.2 |
<package-id> |
包 ID 通过连接 product-id 和 installed-version 来生成。 | microsoft.mysqlrp.2.0.0.2 |
<cert-secret-name> |
用于存储证书机密的名称。 | SSLCert |
<cert-pfx-file-path> |
证书 PFX 文件的路径。 | C:\dir\dbadapter-cert-file.pfx |
<pfx-password> |
分配给证书 .PFX 文件的密码。 | strong@CertSecret6 |
打开提升了权限的 PowerShell 控制台,并完成以下步骤:
使用操作员凭据登录到 Azure Stack Hub 环境。 请参阅使用 PowerShell 连接到 Azure Stack Hub 以了解 PowerShell 登录脚本。 请确保使用 PowerShell Az cmdlet(而不是 AzureRM)并替换所有占位符值,例如终结点 URL 和目录租户名称。
获取 product-id 参数值。 运行
Get-AzsProductDeployment
cmdlet 可检索最新资源提供程序部署的列表。 对于每个已部署的资源提供程序,返回的"value"
集合都包含一个对应的元素。 找到相关的资源提供程序,并且记下这些属性的值:-
"name"
- 在值的第二个段中包含资源提供程序产品 ID。 -
"properties"."deployment"."version"
- 包含当前已部署的版本号。
例如,MySQL RP 部署的产品 ID 可能为
"microsoft.mysqlrp"
,版本可能为"2.0.0.2"
。-
通过连接资源提供程序产品 ID 和版本来生成资源提供程序的包 ID。 例如,使用上一步中派生的值,则 SQL RP 包 ID 为
microsoft.mysqlrp.2.0.0.2
。使用上一步中派生的包 ID,运行
Get-AzsProductSecret -PackageId
以检索资源提供程序所使用的机密类型的列表。 在返回的value
集合中,查找包含"properties"."secretKind"
属性的值"Certificate"
的元素。 此元素包含 RP 证书密钥的属性。 记下分配给此证书机密的名称,该名称由"name"
属性的最后一段标识,就在"properties"
上方。例如,为 SQL RP 返回的机密集合包含名为
SSLCert
的"Certificate"
机密。使用
Set-AzsProductSecret
cmdlet 将新证书导入到 Key Vault,该新证书将由轮换过程使用。 在运行脚本之前,请相应地替换变量占位符值。$productId = '<product-id>' $packageId = $productId + '.' + '<installed-version>' $certSecretName = '<cert-secret-name>' $pfxFilePath = '<cert-pfx-file-path>' $pfxPassword = ConvertTo-SecureString '<pfx-password>' -AsPlainText -Force Set-AzsProductSecret -PackageId $packageId -SecretName $certSecretName -PfxFileName $pfxFilePath -PfxPassword $pfxPassword -Force
最后,使用
Invoke-AzsProductRotateSecretsAction
cmdlet 来轮换机密:Invoke-AzsProductRotateSecretsAction -ProductId $productId
监视机密轮换进度
可以在 PowerShell 控制台中或在管理员门户中(通过在“市场”服务中选择资源提供程序)监视机密轮换进度:
注意
机密轮换花费的时间可能超过 10 分钟。 完成后,资源提供程序的“状态”将更改为“已安装”。
收集诊断日志
Azure Stack Hub 提供了多种方式来收集和保存诊断日志并将其发送到 Microsoft 支持。 从版本 1.1.93 开始,MySQL 资源提供程序支持从 Azure Stack Hub 环境收集日志的标准方式。 有关详细信息,请参阅诊断日志收集。
从版本 1.1.93 开始,MySQL 资源提供程序支持从 Azure Stack Hub 环境收集日志的标准方式。 如果使用的是较旧版本,则建议将 MySQL 资源提供程序更新到最新版本。
若要从锁定的 VM 收集日志,请使用 PowerShell Just Enough Administration (JEA) 终结点 DBAdapterDiagnostics。 此终结点提供以下命令:
Get-AzsDBAdapterLog。 此命令创建资源提供程序诊断日志的 zip 包,并将文件保存在会话的用户驱动器上。 可以不带任何参数运行此命令,收集过去四小时的日志。
Remove-AzsDBAdapterLog。 此命令删除资源提供程序 VM 上的现有日志包。
终结点要求和过程
安装或更新资源提供程序时,将创建 dbadapterdiag 用户帐户。 此帐户用于收集诊断日志。
注意
dbadapterdiag 帐户密码与部署或更新提供程序期间在 VM 上创建的本地管理员所用的密码相同。
若要使用 DBAdapterDiagnostics 命令,请与资源提供程序 VM 建立远程 PowerShell 会话,然后运行 Get-AzsDBAdapterLog 命令。
使用 FromDate 和 ToDate 参数设置日志收集的时间跨度。 如果未指定上述一个或两个参数,将使用以下默认值:
- FromDate 为当前时间之前的四个小时。
- ToDate 为目前时间。
用于收集日志的 PowerShell 脚本示例:
以下脚本演示如何从资源提供程序 VM 收集诊断日志。
# Create a new diagnostics endpoint session.
$databaseRPMachineIP = '<RP VM IP address>'
$diagnosticsUserName = 'dbadapterdiag'
$diagnosticsUserPassword = '<Enter Diagnostic password>'
$diagCreds = New-Object System.Management.Automation.PSCredential `
($diagnosticsUserName, (ConvertTo-SecureString -String $diagnosticsUserPassword -AsPlainText -Force))
$session = New-PSSession -ComputerName $databaseRPMachineIP -Credential $diagCreds `
-ConfigurationName DBAdapterDiagnostics -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Sample that captures logs from the previous hour.
$fromDate = (Get-Date).AddHours(-1)
$dateNow = Get-Date
$sb = {param($d1,$d2) Get-AzSDBAdapterLog -FromDate $d1 -ToDate $d2}
$logs = Invoke-Command -Session $session -ScriptBlock $sb -ArgumentList $fromDate,$dateNow
# Copy the logs to the user drive.
$sourcePath = "User:\{0}" -f $logs
$destinationPackage = Join-Path -Path (Convert-Path '.') -ChildPath $logs
Copy-Item -FromSession $session -Path $sourcePath -Destination $destinationPackage
# Cleanup the logs.
$cleanup = Invoke-Command -Session $session -ScriptBlock {Remove-AzsDBAdapterLog}
# Close the session.
$session | Remove-PSSession
MySQL Server 资源提供程序版本 1 的已知限制
限制:
当部署、升级或机密轮换脚本失败时,标准日志收集机制将无法收集某些日志。
解决方法:
除了使用标准日志收集机制外,还可以到脚本所在的解压文件夹中的 Logs 文件夹中查找更多日志。