Azure Stack Hub의 비밀 순환

이 문서에서는 Azure Stack Hub 인프라 리소스 및 서비스와의 보안 통신을 유지하기 위해 비밀 회전을 수행하기 위한 지침을 제공합니다.

개요

Azure Stack Hub는 비밀을 사용하여 인프라 리소스 및 서비스와의 보안 통신을 유지합니다. Azure Stack Hub 인프라의 무결성을 유지하려면 운영자는 조직의 보안 요구 사항과 일치하는 빈도로 비밀을 회전할 수 있는 기능이 필요합니다.

비밀이 만료에 가까워지면 관리자 포털에서 다음 경고가 생성됩니다. 비밀 회전을 완료하면 다음 경고가 해결됩니다.

  • 보류 중인 서비스 계정 암호 만료
  • 보류 중인 내부 인증서가 만료됨
  • 보류 중인 외부 인증서가 만료됨

경고

만료되기 전에 관리자 포털에서 트리거되는 경고에는 다음 두 단계가 있습니다.

  • 만료 90일 전에 경고 경고가 생성됩니다.
  • 만료 30일 전에 중요한 경고가 생성됩니다.

이러한 알림을 받으면 비밀 회전을 완료하는 것이 중요 합니다. 이렇게 하지 않으면 워크로드가 손실되고 Azure Stack Hub가 다시 배포될 수 있습니다.

경고 모니터링 및 수정에 대한 자세한 내용은 Azure Stack Hub의 상태 및 경고 모니터링을 참조하세요.

참고

1811 이전 버전의 Azure Stack Hub 환경에는 보류 중인 내부 인증서 또는 비밀 만료에 대한 경고가 표시 될 수 있습니다. 이러한 경고는 부정확하며 내부 비밀 회전을 실행하지 않고 무시해야 합니다. 부정확한 내부 비밀 만료 경고는 1811년에 해결된 알려진 문제입니다. 환경이 2년 동안 활성화되지 않는 한 내부 비밀은 만료되지 않습니다.

사전 요구 사항

  1. 지원되는 버전의 Azure Stack Hub를 실행하고 인스턴스가 실행 중인 Azure Stack Hub 버전에 사용 가능한 최신 핫픽스를 적용하는 것이 좋습니다. 예를 들어 2008을 실행하는 경우 2008에 사용할 수 있는 최신 핫픽스를 설치했는지 확인합니다.

    중요

    1811 이전 버전의 경우:

    • 비밀 회전이 이미 수행된 경우 비밀 회전을 다시 수행하기 전에 버전 1811 이상으로 업데이트해야 합니다. 비밀 회전은 권한 있는 엔드포인트 를 통해 실행되어야 하며 Azure Stack Hub 운영자 자격 증명이 필요합니다. 환경에서 비밀 회전이 실행되었는지 여부를 모르는 경우 비밀 회전을 수행하기 전에 1811로 업데이트합니다.
    • 확장 호스트 인증서를 추가하기 위해 비밀을 회전할 필요가 없습니다. 확장 호스트 인증서를 추가하려면 Azure Stack Hub에 대한 확장 호스트 준비 문서의 지침을 따라야 합니다.
  2. 계획된 유지 관리 작업을 사용자에게 알립니다. 업무 외 시간 동안 가능한 한 정상적인 유지 관리 기간을 예약합니다. 유지 관리 작업은 사용자 워크로드와 포털 작업 모두에 영향을 줄 수 있습니다.

  3. 비밀을 회전하는 동안 운영자는 경고가 열리고 자동으로 닫힙니다. 이는 예상된 동작이며 경고를 무시해도 됩니다. 운영자는 Test-AzureStack PowerShell cmdlet을 사용하여 이러한 경고의 유효성을 확인할 수 있습니다. System Center Operations Manager를 사용하여 Azure Stack Hub 시스템을 모니터링하는 운영자의 경우 유지 관리 모드로 시스템을 배치하면 이러한 경고가 ITSM 시스템에 도달하지 못하지만 Azure Stack Hub 시스템에 연결할 수 없게 되면 계속 경고합니다.

외부 비밀 회전

중요

다음을 위한 외부 비밀 회전:

이 섹션에서는 외부 연결 서비스를 보호하는 데 사용되는 인증서의 회전에 대해 설명합니다. 이러한 인증서는 Azure Stack Hub 운영자가 다음 서비스에 대해 제공합니다.

  • 관리자 포털
  • Public portal
  • Administrator Azure Resource Manager
  • Global Azure Resource Manager
  • Administrator Key Vault
  • Key Vault
  • Admin Extension Host
  • ACS(BLOB, 테이블 및 큐 스토리지 포함)
  • ADFS*
  • 그래프*

*AD FS(Active Directory Federated Services)를 사용하는 경우에 적용됩니다.

준비

외부 비밀을 회전하기 전에

  1. 매개 변수를 Test-AzureStack 사용하여 -group SecretRotationReadiness PowerShell cmdlet을 실행하여 비밀을 회전하기 전에 모든 테스트 출력이 정상인지 확인합니다.

  2. 교체용 새 외부 인증서 집합을 준비합니다.

    • 새 집합은 Azure Stack Hub PKI 인증서 요구 사항에 설명된 인증서 사양과 일치해야 합니다.

    • CSR(인증서 서명 요청)을 생성하여 CA(인증 기관)에 제출합니다. 인증서 서명 요청 생성에 설명된 단계를 사용하고 PKI 인증서 준비의 단계를 사용하여 Azure Stack Hub 환경에서 사용할 수 있도록 준비합니다. Azure Stack Hub는 다음 컨텍스트에서 새 CA(인증 기관)의 외부 인증서에 대한 비밀 회전을 지원합니다.

      CA에서 회전 CA로 회전 Azure Stack Hub 버전 지원
      Self-Signed Enterprise 1903 & 년 이후
      Self-Signed Self-Signed 지원되지 않음
      Self-Signed 공용* 1803 & 년 이후
      Enterprise Enterprise 1803 & 이후, 배포 시 사용된 것과 동일한 엔터프라이즈 CA인 경우 1803-1903
      Enterprise Self-Signed 지원되지 않음
      Enterprise 공용* 1803 & 년 이후
      공용* Enterprise 1903 & 년 이후
      공용* Self-Signed 지원되지 않음
      공용* 공용* 1803 & 년 이후

      ** 일부입니다.

    • PKI 인증서 유효성 검사에 설명된 단계를 사용하여 준비하는 인증서의 유효성을 검사해야 합니다.

    • 암호에 특수 문자(예$: ,*,,#,@or)가 없는지 확인합니다.).

    • PFX 암호화가 TripleDES-SHA1인지 확인합니다. 문제가 발생하면 Azure Stack Hub PKI 인증서의 일반적인 문제 해결을 참조하세요.

  3. 회전에 사용되는 인증서의 백업을 안전한 백업 위치에 저장합니다. 회전을 실행하여 실패할 경우 회전을 다시 실행하기 전에 파일 공유의 인증서를 백업 복사본으로 바꿉니다. 백업 복사본을 안전한 백업 위치에 보관합니다.

  4. ERCS VM에서 액세스할 수 있는 파일 공유를 만듭니다. CloudAdmin ID가 파일 공유를 읽고 쓸 수 있어야 합니다.

  5. 파일 공유에 액세스할 수 있는 컴퓨터에서 PowerShell ISE 콘솔을 엽니다. 파일 공유로 이동하여 외부 인증서를 저장할 디렉터리를 만듭니다.

  6. 네트워크 파일 공유에 CertDirectoryMaker.ps1 다운로드하고 스크립트를 실행합니다. 스크립트는 ID 공급자에 따라 .\Certificates\AAD 또는 .\Certificates\ADFS를 준수하는 폴더 구조를 만듭니다. 폴더 구조는 \Certificates 폴더와 \AAD 또는 \ADFS 폴더로 시작해야 합니다. 나머지 하위 디렉터리는 모두 이전 구조에 포함됩니다. 예를 들면 다음과 같습니다.

    • 파일 공유 = \\IPAddress>\<ShareName>
    • Azure AD 공급자에 대한 인증서 루트 폴더 = \Certificates\AAD
    • 전체 경로 = \\IPAddress>\<ShareName>\Certificates\AAD

    중요

    나중에 실행 Start-SecretRotation 하면 폴더 구조의 유효성을 검사합니다. 규격이 아닌 폴더 구조는 다음 오류를 throw합니다.

    Cannot bind argument to parameter 'Path' because it is null.
    + CategoryInfo          : InvalidData: (:) [Test-Certificate], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Test-Certificate
    + PSComputerName        : xxx.xxx.xxx.xxx
    
  7. 2단계에서 만든 새 대체 외부 인증서 집합을 #6단계에서 만든 \Certificates\IdentityProvider> 디렉터리에 복사합니다. CertName>의 형식을 <cert.<regionName>.<externalFQDN> 따라야 합니다.

    Azure AD ID 공급자에 대한 폴더 구조의 예는 다음과 같습니다.

        <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
                      │
                      ├───KeyVault
                      │       <CertName>.pfx
                      │
                      ├───KeyVaultInternal
                      │       <CertName>.pfx
                      │
                      ├───Public Extension Host
                      │       <CertName>.pfx
                      │
                      └───Public Portal
                              <CertName>.pfx
    
    

회전

외부 비밀을 회전하려면 다음 단계를 완료합니다.

  1. 다음 PowerShell 스크립트를 사용하여 비밀을 회전합니다. 이 스크립트를 사용하려면 PEP(권한 있는 엔드포인트) 세션에 액세스해야 합니다. PEP는 PEP를 호스트하는 VM(가상 머신)의 원격 PowerShell 세션을 통해 액세스됩니다. 통합 시스템을 사용하는 경우 각각 다른 호스트의 VM(Prefix-ERCS01, Prefix-ERCS02 또는 Prefix-ERCS03) 내에서 실행되는 PEP의 인스턴스가 세 개 있습니다.

    # 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
    

    스크립트에서 수행하는 단계는 다음과 같습니다.

    • CloudAdmin 계정을 사용하여 Privileged 엔드포인트를 사용하여 PowerShell 세션을 만들고 세션을 변수로 저장합니다. 이 변수는 다음 단계에서 매개 변수로 사용됩니다.

    • Invoke-Command를 실행하여 PEP 세션 변수를 매개 변수로 전달합니다.

    • 다음 매개 변수를 사용하여 PEP 세션에서 실행됩니다 Start-SecretRotation .

      • -PfxFilesPath: 이전에 만든 인증서 디렉터리의 네트워크 경로입니다.
      • -PathAccessCredential: 공유에 대한 자격 증명에 대한 PSCredential 개체입니다.
      • -CertificatePassword: 생성된 모든 pfx 인증서 파일에 사용되는 암호의 보안 문자열입니다.
  2. 외부 비밀 회전에는 약 1시간이 걸립니다. 성공적으로 완료되면 콘솔에 메시지가 표시되고, 그 다음에 메시지가 Action plan finished with status: 'Completed'표시됩니다ActionPlanInstanceID ... CurrentStatus: 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에 대한 매개 변수만 -Internal 사용합니다.

    # 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. 성공적으로 완료되면 콘솔에 메시지가 표시되고, 그 다음에 메시지가 Action plan finished with status: 'Completed'표시됩니다ActionPlanInstanceID ... CurrentStatus: Completed.

    참고

    비밀 순환이 실패하면 오류 메시지의 지침을 따르고 -Internal-ReRun 매개 변수를 사용하여 Start-SecretRotation을 다시 실행합니다.

    Start-SecretRotation -Internal -ReRun
    

    비밀 회전 오류가 반복되면 지원에 문의하세요.

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을 실행합니다. Set-BMCCredential에서 선택적 -BypassBMCUpdate 매개 변수를 사용하는 경우 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은 매개 변수의 PEP 세션을 전달하는 스크립트 블록을 사용하여 Invoke-Command Azure Stack Hub 권한 있는 엔드포인트에 -Session 대해서만 실행할 수 있습니다. 기본적으로 모든 외부 네트워크 인프라 엔드포인트의 인증서만 회전합니다.

매개 변수 형식 필수 위치 기본값 Description
PfxFilesPath String False named 없음 모든 외부 네트워크 엔드포인트 인증서를 포함하는 \Certificates 디렉터리에 대한 파일 공유 경로입니다. 외부 비밀을 회전할 때만 필요합니다. 끝 디렉터리가 \Certificates여야 합니다.
CertificatePassword SecureString False named 없음 -PfXFilesPath에 제공된 모든 인증서의 암호입니다. 외부 비밀이 회전될 때 PfxFilesPath가 제공되는 경우 필수 값입니다.
Internal String False named 없음 내부 플래그는 Azure Stack Hub 운영자가 내부 인프라 비밀을 회전하려고 할 때마다 사용해야 합니다.
PathAccessCredential PSCredential False named 없음 모든 외부 네트워크 엔드포인트 인증서를 포함하는 \Certificates 디렉터리의 파일 공유에 대한 PowerShell 자격 증명입니다. 외부 비밀을 회전할 때만 필요합니다.
ReRun SwitchParameter False named 없음 실패한 시도 후 비밀 회전이 다시 시도될 때마다 사용해야 합니다.

구문

외부 비밀 회전의 경우

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 보안에 대해 자세히 알아보기