사용자 지정 컴퓨터 구성 정책 정의를 만드는 방법
시작하기 전에 컴퓨터 구성에 대한 개요 페이지와 컴퓨터 구성의 수정 옵션에 대한 세부 정보를 읽어보는 것이 좋습니다.
Important
Azure Virtual Machines에는 컴퓨터 구성 확장이 필요합니다. 모든 머신에서 확장을 대규모로 배포하려면 정책 이니셔티브(Deploy prerequisites to enable machine configuration policies on virtual machines
)를 할당합니다.
구성을 적용하는 컴퓨터 구성 패키지를 사용하려면 Azure VM 게스트 구성 확장 버전 1.26.24 이상 또는 Arc 에이전트 1.10.0 이상이 필요합니다.
AuditIfNotExists
또는 DeployIfNotExists
중 하나를 사용하는 사용자 지정 컴퓨터 구성 정책 정의는 GA(일반 공급) 지원 상태입니다.
다음 단계를 사용하여 규정 준수를 감사하거나 Azure 또는 Arc 사용 머신의 상태를 관리하는 고유한 정책을 만듭니다.
PowerShell 7 및 필수 PowerShell 모듈 설치
먼저 컴퓨터 구성 제작 환경을 설정하여 OS 및 GuestConfiguration 모듈에 필요한 PowerShell 버전을 설치합니다.
컴퓨터 구성 패키지 아티팩트 만들기 및 게시
아직 만들지 않은 경우 사용자 지정 컴퓨터 구성 패키지 아티팩트를 만드는 방법의 단계에 따라 사용자 지정 컴퓨터 구성 패키지를 만들고 게시합니다. 그런 다음, 컴퓨터 구성 패키지 아티팩트를 테스트하는 방법의 단계에 따라 개발 환경에서 패키지의 유효성을 검사합니다.
참고 항목
이 문서의 예제 코드는 $contentUri
변수를 참조합니다. 패키지 아티팩트를 만들고 테스트하기 위해 이전 자습서와 동일한 PowerShell 세션을 사용하는 경우 해당 변수에 이미 패키지에 대한 URI가 있을 수 있습니다.
PowerShell 세션에서 패키지의 URI로 설정된 변수가 없는 경우 $contentUri
변수를 설정해야 합니다. 이 예제에서는 스토리지 계정의 연결 문자열과 New-AzStorageContext
cmdlet을 사용하여 스토리지 컨텍스트를 만듭니다. 그런 다음, 게시된 패키지에 대한 스토리지 Blob을 가져오고 해당 개체의 속성을 사용하여 콘텐츠 URI를 가져옵니다.
$connectionString = '<storage-account-connection-string>'
$context = New-AzStorageContext -ConnectionString $connectionString
$getParams = @{
Context = $context
Container = '<container-name>'
Blob = '<published-package-file-name>'
}
$blob = Get-AzStorageBlob @getParams
$contentUri = $blob.ICloudBlob.Uri.AbsoluteUri
컴퓨터 구성에 대한 정책 요구 사항
컴퓨터 구성 할당의 프로비저닝 및 보고를 자동화하기 위해 정책 정의 메타데이터 섹션에는 게스트 구성 서비스를 위한 두 개의 속성이 포함되어야 합니다.
범주 속성은 Guest Configuration
으로 설정해야 하며 guestConfiguration이라는 섹션에는 컴퓨터 구성 할당에 대한 정보가 포함되어야 합니다. New-GuestConfigurationPolicy
cmdlet은 이 텍스트를 자동으로 만듭니다.
다음 예제에서는 New-GuestConfigurationPolicy
에 의해 자동으로 생성되는 메타데이터 섹션을 보여 줍니다.
"metadata": {
"category": "Guest Configuration",
"guestConfiguration": {
"name": "test",
"version": "1.0.0",
"contentType": "Custom",
"contentUri": "CUSTOM-URI-HERE",
"contentHash": "CUSTOM-HASH-VALUE-HERE",
"configurationParameter": {}
}
}
정의 효과가 DeployIfNotExists
로 설정된 경우 다음 섹션에는 컴퓨터 구성 할당에 대한 배포 세부 정보가 포함되어야 합니다. New-GuestConfigurationPolicy
cmdlet은 이 텍스트를 자동으로 만듭니다.
Azure Policy 정의 만들기
컴퓨터 구성 사용자 지정 정책 패키지가 만들어지고 업로드되면 컴퓨터 구성 정책 정의를 만듭니다. New-GuestConfigurationPolicy
cmdlet은 사용자 지정 정책 패키지를 사용하고 정책 정의를 만듭니다.
New-GuestConfigurationPolicy
의 PolicyId 매개 변수에는 고유한 문자열이 필요합니다. GUID(전역적으로 고유한 식별자)가 필요합니다. 새 정의에는 New-GUID
cmdlet을 사용하여 새 GUID를 생성합니다. 정의를 업데이트할 때 PolicyId에 같은 고유 문자열을 사용하여 올바른 정의가 업데이트되었는지 확인합니다.
New-GuestConfigurationPolicy
cmdlet의 매개 변수는 다음과 같습니다.
- PolicyId: GUID입니다.
- ContentUri: 컴퓨터 구성 콘텐츠 패키지의 공용 HTTP URI입니다.
- DisplayName - 정책 표시 이름입니다.
- 설명: 정책 설명입니다.
- 매개 변수: 해시 테이블에 제공된 정책 매개 변수입니다.
- PolicyVersion: 정책 버전입니다.
- 경로: 정책 정의가 만들어지는 대상 경로. 이 매개 변수를 패키지의 로컬 복사본에 대한 경로로 지정하지 마세요.
- 플랫폼: 컴퓨터 구성 정책 및 콘텐츠 패키지를 위한 대상 플랫폼(Windows/Linux)입니다.
- 모드: (대/소문자 구분:
ApplyAndMonitor
,ApplyAndAutoCorrect
Audit
) 정책에서 구성을 감사하거나 배포해야 하는지 여부를 선택합니다. 기본값은Audit
입니다. - 태그: 정책 정의에 하나 이상의 태그 필터를 추가합니다.
- 범주: 정책 정의에서 범주 메타데이터 필드를 설정합니다.
- LocalContentPath: 컴퓨터 구성 패키지 파일의 로컬 복사본에 대한
.zip
경로입니다. 이 매개 변수는 사용자 할당 관리 ID를 사용하여 Azure Storge Blob에 대한 액세스를 제공하는 경우에 필요합니다. - ManagedIdentityResourceId:
resourceId
컴퓨터 구성 패키지 파일이 포함된 Azure Storage Blob에 대한 읽기 권한이 있는 사용자 할당 관리 ID의.zip
ID입니다. 이 매개 변수는 사용자 할당 관리 ID를 사용하여 Azure Storge Blob에 대한 액세스를 제공하는 경우에 필요합니다. - ExcludeArcMachines: 정책 정의에서 Arc 컴퓨터를 제외해야 임을 지정합니다. 이 매개 변수는 사용자 할당 관리 ID를 사용하여 Azure Storge Blob에 대한 액세스를 제공하는 경우에 필요합니다.
Important
Azure VM과 달리 Arc 연결 컴퓨터는 현재 사용자 할당 관리 ID를 지원하지 않습니다. 따라서 -ExcludeArcMachines
정책 정의에서 해당 컴퓨터를 제외하려면 플래그가 필요합니다. Azure VM에서 할당된 패키지를 다운로드하고 정책을 적용하려면 게스트 구성 에이전트가 Windows 버전 1.29.82.0
이상이어야 하고 Linux의 경우 버전 1.26.76.0
이상이어야 합니다.
Mode 매개 변수에 대한 자세한 내용은 컴퓨터 구성을 위한 수정 옵션을 구성하는 방법 페이지를 참조하세요.
지정된 경로에서 사용자 지정 구성 패키지를 사용하여 감사하는 정책 정의를 만듭니다.
$PolicyConfig = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My audit policy'
Description = 'My audit policy'
Path = './policies/auditIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
}
New-GuestConfigurationPolicy @PolicyConfig
지정된 경로에서 사용자 지정 구성 패키지를 적용하는 정책 정의를 만듭니다.
$PolicyConfig2 = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My deployment policy'
Description = 'My deployment policy'
Path = './policies/deployIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
Mode = 'ApplyAndAutoCorrect'
}
New-GuestConfigurationPolicy @PolicyConfig2
사용자 할당 관리 ID를 사용하여 사용자 지정 구성 패키지를 적용하는 정책 정의를 만듭니다.
$PolicyConfig3 = @{
PolicyId = '_My GUID_'
ContentUri = $contentUri
DisplayName = 'My deployment policy'
Description = 'My deployment policy'
Path = './policies/deployIfNotExists.json'
Platform = 'Windows'
PolicyVersion = 1.0.0
Mode = 'ApplyAndAutoCorrect'
LocalContentPath = "C:\Local\Path\To\Package" # Required parameter for managed identity
ManagedIdentityResourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}" # Required parameter for managed identity
}
New-GuestConfigurationPolicy @PolicyConfig3 -ExcludeArcMachines
참고 항목
PowerShell cmdlet을 사용하여 관리 ID의 resorceId를 검색할 Get-AzUserAssignedIdentity
수 있습니다.
cmdlet 출력은 정책 파일의 정책 표시 이름과 경로가 포함된 개체를 반환합니다. 감사 정책 정의를 만드는 정책 JSON 파일의 이름은 auditIfNotExists.json
이며 구성을 적용하기 위해 정책 정의를 만드는 파일의 이름은 deployIfNotExists.json
입니다.
태그를 사용하여 컴퓨터 구성 정책 필터링
GuestConfiguration 모듈에서 cmdlet으로 생성되는 정책 정의에는 선택적으로 태그에 대한 필터가 포함될 수 있습니다. New-GuestConfigurationPolicy
의 Tag 매개 변수는 개별 태그 항목을 포함하는 해시 테이블의 배열을 지원합니다. 태그는 정책 정의의 if 섹션에 추가되며 정책 할당으로 수정할 수 없습니다.
태그를 필터링하는 정책 정의의 예제 코드 조각은 다음과 같습니다.
"if": {
"allOf" : [
{
"allOf": [
{
"field": "tags.Owner",
"equals": "BusinessUnit"
},
{
"field": "tags.Role",
"equals": "Web"
}
]
},
{
// Original machine configuration content
}
]
}
사용자 지정 컴퓨터 구성 정책 정의에서 매개 변수 사용
컴퓨터 구성은 런타임 시 DSC 구성 속성 재정의를 지원합니다. 이 기능은 패키지의 MOF 파일에 있는 값을 정적으로 간주할 필요가 없음을 의미합니다. 재정의 값은 Azure Policy를 통해 제공되며 DSC 구성을 작성하거나 컴파일하는 방법을 변경하지 않습니다.
컴퓨터 구성은 매개 변수에 대해 다음 값 형식을 지원합니다.
- 문자열
- 부울
- 두 배
- Float
cmdlet New-GuestConfigurationPolicy
및 Get-GuestConfigurationPackageComplianceStatus
에는 Parameters라는 매개 변수가 포함됩니다. 이 매개 변수는 각 매개 변수에 대한 모든 세부 정보를 포함하는 해시 테이블 정의를 사용하고 Azure Policy 정의에 사용되는 각 파일의 필요한 섹션을 만듭니다.
다음 예에서는 서비스를 감사할 정책 정의를 만듭니다. 사용자는 정책 할당 시 이를 목록에서 선택할 수 있습니다.
# This DSC resource definition...
Service 'UserSelectedNameExample' {
Name = 'ParameterValue'
Ensure = 'Present'
State = 'Running'
}
# ...can be converted to a hash table:
$PolicyParameterInfo = @(
@{
# Policy parameter name (mandatory)
Name = 'ServiceName'
# Policy parameter display name (mandatory)
DisplayName = 'windows service name.'
# Policy parameter description (optional)
Description = 'Name of the windows service to be audited.'
# DSC configuration resource type (mandatory)
ResourceType = 'Service'
# DSC configuration resource id (mandatory)
ResourceId = 'UserSelectedNameExample'
# DSC configuration resource property name (mandatory)
ResourcePropertyName = 'Name'
# Policy parameter default value (optional)
DefaultValue = 'winrm'
# Policy parameter allowed values (optional)
AllowedValues = @('BDESVC','TermService','wuauserv','winrm')
})
# ...and then passed into the `New-GuestConfigurationPolicy` cmdlet
$PolicyParam = @{
PolicyId = 'My GUID'
ContentUri = $contentUri
DisplayName = 'Audit Windows Service.'
Description = "Audit if a Windows Service isn't enabled on Windows machine."
Path = '.\policies\auditIfNotExists.json'
Parameter = $PolicyParameterInfo
PolicyVersion = 1.0.0
}
New-GuestConfigurationPolicy @PolicyParam
Azure Policy 정의 게시
마지막으로 New-AzPolicyDefinition
cmdlet을 사용하여 정책 정의를 게시할 수 있습니다. 아래 명령은 컴퓨터 구성 정책을 정책 센터에 게시합니다.
New-AzPolicyDefinition
명령을 실행하려면 Azure에서 정책 정의를 만들기 위한 액세스 권한이 필요합니다.
특정 권한 부여 요구 사항은 Azure Policy 개요 페이지에 설명되어 있습니다. 권장되는 기본 제공 역할은 Resource Policy Contributor
입니다.
New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\auditIfNotExists.json'
또는 정책이 DINE(존재하지 않는 경우) 배포인 경우 다음 명령을 사용합니다.
New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\deployIfNotExists.json'
Azure에서 만든 정책 정의를 사용하는 마지막 단계는 정의를 할당하는 단계입니다. Portal, Azure CLI 및 Azure PowerShell을 사용하여 정의를 할당하는 방법을 참조하세요.
정책 수명 주기
정책 정의의 업데이트를 릴리스하려면 게스트 구성 패키지와 Azure Policy 정의 세부 정보를 모두 변경합니다.
참고 항목
컴퓨터 구성 할당의 version
속성은 Microsoft에서 호스팅하는 패키지에만 영향을 줍니다. 사용자 지정 콘텐츠의 버전을 관리하는 가장 좋은 방법은 버전을 파일 이름에 포함하는 것입니다.
먼저, New-GuestConfigurationPackage
를 실행할 때, 이전 버전과는 차별되는 고유한 패키지의 이름을 지정합니다. 이름에 버전 번호를 포함할 수 있습니다(예: PackageName_1.0.0
). 이 예의 숫자는 패키지를 고유하게 만드는 데만 사용되며 패키지를 다른 패키지보다 최신 버전 또는 이전 버전으로 간주하도록 지정하기 위한 것은 아닙니다.
둘째, 다음 각 설명에 따라 New-GuestConfigurationPolicy
cmdlet에 사용된 매개 변수를 업데이트합니다.
- 버전:
New-GuestConfigurationPolicy
cmdlet을 실행할 때 현재 게시된 것보다 큰 버전 번호를 지정해야 합니다. - contentUri:
New-GuestConfigurationPolicy
cmdlet을 실행할 때 패키지의 위치에 대한 URI를 지정해야 합니다. 패키지 버전을 파일 이름에 포함하면 각 릴리스에서 속성의 값이 변경됩니다. - contentHash:
New-GuestConfigurationPolicy
cmdlet은 이 속성을 자동으로 업데이트합니다. 이는New-GuestConfigurationPackage
에서 만든 패키지의 해시 값입니다. 게시하는.zip
파일에 대한 속성이 정확해야 합니다. contentUri 속성만 업데이트되면 확장에서 콘텐츠 패키지를 거부합니다.
업데이트된 패키지를 릴리스하는 가장 쉬운 방법은 이 문서에 설명된 프로세스를 반복하고 업데이트된 버전 번호를 지정하는 것입니다. 해당 프로세스는 모든 속성이 올바르게 업데이트되었음을 보장합니다.
다음 단계
- Azure Portal을 사용하여 사용자 지정 정책 정의를 할당합니다.
- 컴퓨터 구성에 대한 규정 준수 세부 정보 정책 할당을 보는 방법을 알아봅니다.