다음을 통해 공유


컴퓨터 구성 패키지에 서명하는 방법

컴퓨터 구성 사용자 지정 정책은 SHA256 해시를 사용하여 정책 패키지가 변경되지 않았는지 확인합니다. 또한 필요에 따라 고객은 인증서를 사용하여 패키지에 서명하고 컴퓨터 구성 확장에서 강제로 서명된 콘텐츠만 허용하도록 할 수 있습니다.

이 시나리오를 사용하려면 다음 두 단계를 완료해야 합니다.

  1. cmdlet을 실행하여 콘텐츠 패키지에 서명합니다.
  2. 코드에 서명해야 하는 컴퓨터에 태그를 추가합니다.

코드 서명 인증서를 사용하여 서명 유효성 검사

서명 유효성 검사 기능을 사용하려면 Protect-GuestConfigurationPackage cmdlet을 실행하여 게시하기 전 패키지에 서명합니다. 이 cmdlet에는 '코드 서명' 인증서가 필요합니다. '코드 서명' 인증서가 없는 경우 예제에 따라 다음 스크립트를 사용하여 테스트 목적으로 자체 서명된 인증서를 만들어 보세요.

Windows 서명 유효성 검사

# How to create a self sign cert and use it to sign Machine Configuration
# custom policy package

# Create Code signing cert
$codeSigningParams = @{
    Type          = 'CodeSigningCert'
    DnsName       = 'GCEncryptionCertificate'
    HashAlgorithm = 'SHA256'
}
$certificate = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$privateKey = @{
    Cert     = $certificate
    Password = Read-Host "Enter password for private key" -AsSecureString
    FilePath = '<full-path-to-export-private-key-pfx-file>'
}
$publicKey = @{
    Cert     = $certificate
    FilePath = '<full-path-to-export-public-key-cer-file>'
    Force    = $true
}
Export-PfxCertificate @privateKey
Export-Certificate    @publicKey

# Import the certificate
$importParams = @{
    FilePath          = $privateKey.FilePath
    Password          = $privateKey.Password
    CertStoreLocation = 'Cert:\LocalMachine\My'
}
Import-PfxCertificate @importParams

# Sign the policy package
$certToSignThePackage = Get-ChildItem -Path Cert:\LocalMachine\My |
    Where-Object { $_.Subject -eq "CN=GCEncryptionCertificate" }
$protectParams = @{
    Path        = '<path-to-package-to-sign>'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Linux 서명 유효성 검사

# generate gpg key
gpg --gen-key

$emailAddress      = '<email-id-used-to-generate-gpg-key>'
$publicGpgKeyPath  = '<full-path-to-export-public-key-gpg-file>'
$privateGpgKeyPath = '<full-path-to-export-private-key-gpg-file>'

# export public key
gpg --output $publicGpgKeyPath --export $emailAddress

# export private key
gpg --output $privateGpgKeyPath --export-secret-key $emailAddress

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = '<path-to-package-to-sign>'
    PrivateGpgKeyPath = $privateGpgKeyPath
    PublicGpgKeyPath  = $publicGpgKeyPath
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Protect-GuestConfigurationPackage cmdlet의 매개 변수는 다음과 같습니다.

  • 경로: 컴퓨터 구성 패키지의 전체 경로입니다.
  • 인증서: 패키지에 서명하기 위한 코드 서명 인증서입니다. 이 매개 변수는 Windows 콘텐츠에 서명하는 경우에만 지원됩니다.
  • PrivateGpgKeyPath: 프라이빗 키 .gpg 파일의 전체 경로입니다. 이 매개 변수는 Linux용 콘텐츠에 서명할 때만 지원됩니다.
  • PublicGpgKeyPath: 공개 키 .gpg 파일의 전체 경로입니다. 이 매개 변수는 Linux용 콘텐츠에 서명할 때만 지원됩니다.

인증서 요구 사항

컴퓨터 구성 에이전트는 인증서 공개 키가 Windows 컴퓨터의 "신뢰할 수 있는 게시자" 및 Linux 컴퓨터의 /usr/local/share/ca-certificates/gc 경로에 있다고 간주합니다. 노드에서 서명된 콘텐츠를 확인하려면 사용자 지정 정책을 적용하기 전 컴퓨터에 인증서 공개 키를 설치합니다.

VM 내의 일반 도구를 사용하거나 Azure Policy를 사용하여 인증서 공개 키를 설치할 수 있습니다. Azure Policy를 사용하는 예제 템플릿은 인증서를 사용하여 컴퓨터를 배포하는 방법을 보여 줍니다. Key Vault 액세스 정책은 배포하는 동안 Compute 리소스 공급자가 인증서에 액세스할 수 있도록 허용해야 합니다. 자세한 단계는 Azure Resource Manager에서 가상 머신에 대한 Key Vault 설정을 참조하세요.

다음은 서명 인증서에서 공개 키를 내보내 컴퓨터로 가져오는 예입니다.

$Cert = Get-ChildItem -Path Cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq 'CN=<CN-of-your-signing-certificate>' } |
    Select-Object -First 1

$Cert | Export-Certificate -FilePath '<path-to-export-public-key-cer-file>' -Force

태그 요구 사항

콘텐츠를 게시한 후에는 이름이 GuestConfigPolicyCertificateValidation이고 값이 enabled인 태그를 코드 서명이 필요한 모든 가상 머신에 추가합니다. Azure Policy를 사용하여 태그를 대규모로 제공할 수 있는 방법은 태그 샘플을 참조하세요. 이 태그가 준비되면 New-GuestConfigurationPolicy cmdlet을 이용하여 생성된 정책 정의에서 컴퓨터 구성 확장을 통해 요구 사항을 사용합니다.