Azure Stack Hub의 MySQL 리소스 공급자 유지 관리 작업
중요
Azure Stack Hub 빌드 2108부터 SQL 및 MySQL 리소스 공급자는 액세스 권한이 부여된 구독에 제공됩니다. 이 기능 사용을 시작하거나 이전 버전에서 업그레이드해야 하는 경우 지원 사례를 열고 지원 엔지니어가 배포 또는 업그레이드 프로세스를 안내합니다.
MySQL 리소스 공급자는 잠긴 VM(가상 머신)에서 실행됩니다. 유지 관리 작업을 사용하도록 설정하려면 VM의 보안을 업데이트해야 합니다. 최소 권한 원칙(POLP)을 사용하여 이 작업을 수행하려면 POWERShell JEA(Just Enough Administration) 엔드포인트 DBAdapterMaintenance를 사용할 수 있습니다. 리소스 공급자 설치 패키지에는 이 작업에 대한 스크립트가 포함되어 있습니다.
패치 및 업데이트
MySQL 리소스 공급자는 추가 기능 구성 요소이므로 Azure Stack Hub의 일부로 서비스되지 않습니다. Microsoft는 필요에 따라 MySQL 리소스 공급자에 대한 업데이트를 제공합니다.
MySQL RP V1의 경우 업데이트된 MySQL 서버 리소스 공급자가 릴리스되면 업데이트를 적용하기 위한 스크립트가 제공됩니다. 이 스크립트는 새 리소스 공급자 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 바이러스 백신" 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 Diagnostics 확장 구성
이러한 지침은 Azure Stack Hub 통합 시스템에서 실행되는 SQL RP V1에만 적용됩니다.
Azure Diagnostics 확장은 기본적으로 MySQL 리소스 공급자 어댑터 VM에 설치됩니다. 다음 단계에서는 문제 해결 및 감사 목적으로 MySQL 리소스 공급자 운영 이벤트 로그 및 IIS 로그를 수집하기 위해 확장을 사용자 지정하는 방법을 보여 줍니다.
Azure Stack Hub 관리자 포털에 로그인합니다.
왼쪽 창에서 가상 머신 을 선택하고, MySQL 리소스 공급자 어댑터 VM을 검색하고, VM을 선택합니다.
VM의 진단 설정 에서 로그 탭으로 이동하여 사용자 지정 을 선택하여 수집되는 이벤트 로그를 사용자 지정합니다.
Microsoft-AzureStack-DatabaseAdapter/Operational!*을 추가하여 MySQL 리소스 공급자 운영 이벤트 로그를 수집합니다.
IIS 로그 컬렉션을 사용하도록 설정하려면 IIS 로그 및 실패한 요청 로그를 검사.
마지막으로 저장을 선택하여 모든 진단 설정을 저장합니다.
이벤트 로그 및 IIS 로그 컬렉션이 MySQL 리소스 공급자에 대해 구성되면 mysqladapterdiagaccount라는 시스템 스토리지 계정에서 로그를 찾을 수 있습니다.
Azure Diagnostics 확장에 대한 자세한 내용은 Azure Diagnostics 확장이란?을 참조하세요.
비밀 회전
이러한 지침은 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 매개 변수
매개 변수 | Description | 주석 |
---|---|---|
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에만 적용됩니다.
참고
RP(부가가치 리소스 공급자)에 대한 비밀 회전은 현재 PowerShell을 통해서만 지원됩니다.
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를 설치합니다. 관리 1.0.0 모듈: PowerShell 갤러리 | Azs.Deployment. 관리 1.0.0
Install-Module -Name Azs.Deployment.Admin
- 외부 인증서가 만료되는 경우 필요한 PFX 형식에 대한 세부 정보를 포함하여 X509 인증서를 획득/갱신하기 전에 Azure Stack Hub PKI(공개 키 인프라) 인증서 요구 사항을 검토합니다. 또한 특정 부가가치 리소스 공급자에 대한 선택적 PaaS 인증서 섹션에 지정된 요구 사항을 검토합니다.
외부 인증서 회전을 위한 새 TLS 인증서 준비
참고
내부 인증서만 만료되는 경우 이 섹션을 건너뛸 수 있습니다.
다음으로 부가가치 리소스 공급자 엔드포인트를 보호하기 위한 TLS 인증서를 만들거나 갱신합니다.
리소스 공급자에 대한 인증서 갱신을 위한 CSR(인증서 서명 요청) 생성의 단계를 완료합니다. 여기서는 Azure Stack Hub 준비 상태 검사기 도구를 사용하여 CSR을 만듭니다. "다른 Azure Stack Hub 서비스에 대한 인증서 요청 생성" 단계에서 리소스 공급자에 올바른 cmdlet을 실행해야 합니다. 예를 들어
New-AzsDbAdapterCertificateSigningRequest
는 SQL 및 MySQL RP에 사용됩니다. 완료되면 생성된 를 제출합니다. 새 인증서에 대한 CA(인증 기관)에 대한 REQ 파일입니다.CA로부터 인증서 파일을 받은 후 배포 또는 회전을 위한 인증서 준비의 단계를 완료합니다. 준비 상태 검사기 도구를 다시 사용하여 CA에서 반환한 파일을 처리합니다.
마지막으로 Azure Stack Hub PKI 인증서 유효성 검사의 단계를 완료합니다. 준비 상태 검사기 도구를 한 번 더 사용하여 새 인증서에 대한 유효성 검사를 수행합니다.
내부 인증서 회전
관리자 권한 PowerShell 콘솔을 열고 다음 단계를 완료하여 리소스 공급자의 외부 비밀을 회전합니다.
운영자 자격 증명을 사용하여 Azure Stack Hub 환경에 로그인합니다. PowerShell 로그인 스크립트용 PowerShell을 사용하여 Azure Stack Hub에 연결을 참조하세요. AzureRM 대신 PowerShell Az cmdlet을 사용하고 엔드포인트 URL, 디렉터리 테넌트 이름과 같은 모든 자리 표시자 값을 바꾸어야 합니다.
리소스 공급자의 제품 ID를 확인합니다.
Get-AzsProductDeployment
cmdlet을 실행하여 최신 리소스 공급자 배포 목록을 검색합니다. 반환된"value"
컬렉션에는 배포된 각 리소스 공급자에 대한 요소가 포함됩니다. 관심 있는 리소스 공급자를 찾고 다음 속성의 값을 기록해 둡니다.-
"name"
- 값의 두 번째 세그먼트에 리소스 공급자 제품 ID가 포함되어 있습니다.
예를 들어 MySQL RP 배포에는 의 제품 ID
"microsoft.mysqlrp"
가 있을 수 있습니다.-
cmdlet을
Invoke-AzsProductRotateSecretsAction
실행하여 내부 인증서를 회전합니다.Invoke-AzsProductRotateSecretsAction -ProductId $productId
외부 인증서 회전
먼저 다음 매개 변수의 값을 기록해야 합니다.
자리 표시자 | Description | 예제 값 |
---|---|---|
<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 로그인 스크립트용 PowerShell을 사용하여 Azure Stack Hub에 연결을 참조하세요. AzureRM 대신 PowerShell Az cmdlet을 사용하고 엔드포인트 URL, 디렉터리 테넌트 이름과 같은 모든 자리 표시자 값을 바꾸어야 합니다.
product-id 매개 변수 값을 가져옵니다.
Get-AzsProductDeployment
cmdlet을 실행하여 최신 리소스 공급자 배포 목록을 검색합니다. 반환된"value"
컬렉션에는 배포된 각 리소스 공급자에 대한 요소가 포함됩니다. 관심 있는 리소스 공급자를 찾고 다음 속성의 값을 기록해 둡니다.-
"name"
- 값의 두 번째 세그먼트에 리소스 공급자 제품 ID가 포함되어 있습니다. -
"properties"."deployment"."version"
- 현재 배포된 버전 번호가 포함되어 있습니다.
예를 들어 MySQL RP 배포에는 및 버전
"2.0.0.2"
의"microsoft.mysqlrp"
제품 ID가 있을 수 있습니다.-
리소스 공급자 제품 ID 및 버전을 연결하여 리소스 공급자의 패키지 ID를 구성합니다. 예를 들어 이전 단계에서 파생된 값을 사용하여 SQL RP 패키지 ID는 입니다
microsoft.mysqlrp.2.0.0.2
.이전 단계에서 구성한 패키지 ID를 사용하여
Get-AzsProductSecret -PackageId
를 실행하고 리소스 공급자가 사용 중인 비밀 유형의 목록을 검색합니다. 반환된value
컬렉션에서"Certificate"
속성의"properties"."secretKind"
값이 포함된 요소를 찾습니다. 이 요소에는 RP의 인증서 비밀에 대한 속성이 포함되어 있습니다. 이 인증서 비밀에 할당된 이름을 적어 둡니다. 이 이름은"properties"
바로 위에 있는"name"
속성의 마지막 세그먼트입니다.예를 들어 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
마지막으로 cmdlet을
Invoke-AzsProductRotateSecretsAction
사용하여 비밀을 회전합니다.Invoke-AzsProductRotateSecretsAction -ProductId $productId
비밀 회전 진행률 모니터링
Marketplace 서비스에서 리소스 공급자를 선택하여 PowerShell 콘솔에서 또는 관리자 포털에서 비밀 회전 진행률을 모니터링할 수 있습니다.
참고
비밀 회전 시간은 10분 이상 소요될 수 있습니다. 완료되면 리소스 공급자의 상태가 "설치됨"으로 변경됩니다.
진단 로그 수집
Azure Stack Hub에는 진단 로그를 수집, 저장 및 전송하는 여러 가지 방법이 Microsoft 지원. 버전 1.1.93부터 MySQL 리소스 공급자는 Azure Stack Hub 환경에서 로그를 수집하는 표준 방법을 지원합니다. 자세한 내용은 진단 로그 수집을 참조하세요.
버전 1.1.93부터 MySQL 리소스 공급자는 Azure Stack Hub 환경에서 로그를 수집하는 표준 방법을 지원합니다. 이전 버전을 사용하는 경우 MySQL 리소스 공급자를 최신 버전으로 업데이트하는 것이 좋습니다.
잠긴 VM에서 로그를 수집하려면 POWERShell JEA(Just Enough Administration) 엔드포인트 DBAdapterDiagnostics를 사용합니다. 이 엔드포인트는 다음 명령을 제공합니다.
Get-AzsDBAdapterLog. 이 명령은 로그를 진단 리소스 공급자의 zip 패키지를 만들고 세션의 사용자 드라이브에 파일을 저장합니다. 매개 변수 없이 이 명령을 실행할 수 있으며 마지막 4시간 동안의 로그가 수집됩니다.
Remove-AzsDBAdapterLog. 이 명령은 리소스 공급자 VM에서 기존 로그 패키지를 제거합니다.
엔드포인트 요구 사항 및 프로세스
리소스 공급자가 설치되거나 업데이트되면 dbadapterdiag 사용자 계정이 만들어집니다. 이 계정을 사용하여 진단 로그를 수집합니다.
참고
dbadapterdiag 계정 암호는 공급자 배포 또는 업데이트 중에 만든 VM의 로컬 관리자에 사용되는 암호와 동일합니다.
DBAdapterDiagnostics 명령을 사용하려면 리소스 공급자 VM에 대한 원격 PowerShell 세션을 만들고 Get-AzsDBAdapterLog 명령을 실행합니다.
FromDate 및 ToDate 매개 변수를 사용하여 로그 수집에 대한 시간 범위를 설정합니다. 이러한 매개 변수 중 하나 또는 둘 다를 지정하지 않으면 다음 기본값이 사용됩니다.
- FromDate는 현재 시간 4시간 전입니다.
- 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 서버 리소스 공급자 버전 1의 알려진 제한 사항
제한 사항:
배포, 업그레이드 또는 비밀 회전 스크립트가 실패하면 표준 로그 수집 메커니즘에서 일부 로그를 수집할 수 없습니다.
해결 방법:
표준 로그 수집 메커니즘을 사용하는 것 외에도 스크립트가 찾는 추출된 폴더의 Logs 폴더로 이동하여 더 많은 로그를 찾습니다.