컴퓨터 구성 패키지에 서명하는 방법
컴퓨터 구성 사용자 지정 정책은 SHA256 해시를 사용하여 정책 패키지가 변경되지 않았는지 확인합니다. 또한 필요에 따라 고객은 인증서를 사용하여 패키지에 서명하고 컴퓨터 구성 확장에서 강제로 서명된 콘텐츠만 허용하도록 할 수 있습니다.
이 시나리오를 사용하려면 다음 두 단계를 완료해야 합니다.
- cmdlet을 실행하여 콘텐츠 패키지에 서명합니다.
- 코드에 서명해야 하는 컴퓨터에 태그를 추가합니다.
코드 서명 인증서를 사용하여 서명 유효성 검사
서명 유효성 검사 기능을 사용하려면 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을 이용하여 생성된 정책 정의에서 컴퓨터 구성 확장을 통해 요구 사항을 사용합니다.
관련 콘텐츠
GuestConfiguration
모듈을 사용하여 사용자 환경의 대규모 관리를 위한 Azure Policy 정의를 생성합니다.- Azure Portal을 사용하여 사용자 지정 정책 정의를 할당합니다.
- 컴퓨터 구성에 대한 규정 준수 세부 정보 정책 할당을 보는 방법을 알아봅니다.