빠른 시작: Bicep 파일을 사용하여 비규격 리소스를 식별하는 정책 할당 만들기
이 빠른 시작에서는 Bicep 파일을 사용하여 리소스가 Azure Policy를 준수하는지 유효성을 검사하는 정책 할당을 만듭니다. 정책은 리소스 그룹에 할당되고 관리 디스크를 사용하지 않는 가상 머신을 감사합니다. 정책 할당을 만든 후 비준수 가상 머신을 식별합니다.
Bicep은 선언적 구문을 사용하여 Azure 리소스를 배포하는 DSL(도메인 특정 언어)입니다. 간결한 구문, 신뢰할 수 있는 형식 안전성 및 코드 다시 사용에 대한 지원을 제공합니다. Bicep은 Azure에서 코드형 인프라 솔루션에 대한 최고의 제작 환경을 제공합니다.
기본 제공 정책 또는 이니셔티브 정의를 할당할 때 버전을 참조하는 것은 선택 사항입니다. 기본 제공 정의의 정책 할당은 기본적으로 최신 버전으로 지정되며 별도로 지정하지 않는 한 자동으로 부 버전 변경 내용을 상속합니다.
필수 조건
- Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- Bicep.
- Azure PowerShell 또는 Azure CLI.
- Visual Studio Code 및 Visual Studio Code용 Bicep 확장.
Microsoft.PolicyInsights
는 Azure 구독에 등록되어야 합니다. 리소스 공급자를 등록하려면 리소스 공급자를 등록할 수 있는 권한이 있어야 합니다. 해당 권한은 기여자 및 소유자 역할에 포함되어 있습니다.- 관리 디스크를 사용하지 않는 가상 머신이 하나 이상 포함된 리소스 그룹입니다.
Bicep 파일 검토
Bicep 파일은 리소스 그룹 범위에 대한 정책 할당을 만들고 기본 제공 정책 정의 관리 디스크를 사용하지 않는 VM 감사를 할당합니다.
다음 Bicep 파일을 policy-location.bicep으로 만듭니다.
- Visual Studio Code를 열고 파일>새 텍스트 파일을 선택합니다.
- Bicep 파일을 복사하여 Visual Studio Code에 붙여넣습니다.
- 파일>저장을 선택하고 파일 이름에 policy-assignment.bicep을 사용합니다.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
name: policyAssignmentName
scope: resourceGroup()
properties: {
policyDefinitionId: policyDefinitionID
description: 'Policy assignment to resource group scope created with Bicep file'
displayName: policyDisplayName
nonComplianceMessages: [
{
message: 'Virtual machines should use managed disks'
}
]
}
}
output assignmentId string = assignment.id
Bicep 파일에 정의된 리소스 종류는 Microsoft.Authorization/policyAssignments입니다.
Bicep 파일은 세 가지 매개 변수를 사용하여 정책 할당을 배포합니다.
policyAssignmentName
은 이름이 audit-vm-managed-disks인 정책 할당을 만듭니다.policyDefinitionID
는 기본 제공 정책 정의의 ID를 사용합니다. 참고로 ID를 가져오는 명령은 템플릿을 배포하는 섹션에 있습니다.policyDisplayName
은 Azure Portal에 표시되는 표시 이름을 만듭니다.
Bicep 파일에 대한 자세한 내용은 다음을 참조하세요.
- 더 많은 Bicep 샘플을 찾으려면 코드 샘플 찾아보기로 이동합니다.
- 배포용 템플릿 참조에 대해 자세히 알아보려면 Azure 템플릿 참조로 이동합니다.
- Bicep 파일 개발 방법을 알아보려면 Bicep 설명서를 참조하세요.
- 구독 수준 배포에 대해 알아보려면 Bicep 파일을 사용한 구독 배포로 이동합니다.
Bicep 파일 배포
Azure PowerShell 또는 Azure CLI를 사용하여 Bicep 파일을 배포할 수 있습니다.
Visual Studio Code 터미널 세션에서 Azure에 연결합니다. 구독이 두 개 이상인 경우 명령을 실행하여 구독에 대한 컨텍스트를 설정합니다. <subscriptionID>
를 Azure 구독 ID로 바꿉니다.
Connect-AzAccount
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
Microsoft.PolicyInsights
가 등록되었는지 확인할 수 있습니다. 그렇지 않은 경우 명령을 실행하여 리소스 공급자를 등록할 수 있습니다.
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
자세한 내용은 Get-AzResourceProvider 및 Register-AzResourceProvider에서 확인하세요.
다음 명령은 policyDefinitionID
매개 변수의 값을 표시합니다.
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
다음 명령은 리소스 그룹에 정책 정의를 배포합니다. <resourceGroupName>
을 리소스 그룹 이름으로 바꿉니다.
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}
New-AzResourceGroupDeployment @deployparms
$rg
변수는 리소스 그룹의 속성을 저장합니다. $deployparms
변수는 스플래팅을 사용하여 매개 변수 값을 만들고 가독성을 향상합니다. New-AzResourceGroupDeployment
명령은 $deployparms
변수에서 정의된 매개 변수 값을 사용합니다.
Name
은 리소스 그룹의 배포에 대해 출력 및 Azure에 표시되는 배포 이름입니다.ResourceGroupName
은$rg.ResourceGroupName
속성을 사용하여 정책이 할당된 리소스 그룹의 이름을 가져옵니다.TemplateFile
은 로컬 컴퓨터에서 Bicep 파일의 이름과 위치를 지정합니다.
다음 명령을 사용하여 정책 할당의 배포를 확인할 수 있습니다.
이 명령은 $rg.ResourceId
속성을 사용하여 리소스 그룹의 ID를 가져옵니다.
Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name : audit-vm-managed-disks
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName : audit-vm-managed-disks
ResourceGroupName : {resourceGroupName}
ResourceType : Microsoft.Authorization/policyAssignments
SubscriptionId : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties
자세한 내용은 get-AzPolicyAssignment에서 확인하세요.
비규격 리소스 식별
정책 할당이 배포되면 리소스 그룹에 배포된 가상 머신이 관리 디스크 정책을 준수하도록 감사됩니다.
새 정책 할당에 대한 준수 상태가 활성화되고 정책 상태에 대한 결과를 제공하는 데 몇 분 정도 걸립니다.
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
$complianceparms
변수는 Get-AzPolicyState
명령에서 사용되는 매개 변수 값을 만듭니다.
ResourceGroupName
은$rg.ResourceGroupName
속성에서 리소스 그룹 이름을 가져옵니다.PolicyAssignmentName
은 정책 할당을 만들 때 사용된 이름을 지정합니다.Filter
는 식을 사용하여 정책 할당을 준수하지 않는 리소스를 찾습니다.
결과는 다음 예시와 유사하며 ComplianceState
는 NonCompliant
를 보여 줍니다.
Timestamp : 2/20/2024 18:55:45
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant : False
SubscriptionId : {subscriptionId}
ResourceType : Microsoft.Compute/virtualMachines
ResourceLocation : {location}
ResourceGroup : {resourceGroupName}
ResourceTags : tbd
PolicyAssignmentName : audit-vm-managed-disks
PolicyAssignmentOwner : tbd
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds : {managementGroupId}
ComplianceState : NonCompliant
AdditionalProperties : {[complianceReasonCode, ]}
자세한 내용은 Get-AzPolicyState에서 확인하세요.
리소스 정리
Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Azure PowerShell 세션에서 로그아웃하려면 다음을 수행합니다.
Disconnect-AzAccount
다음 단계
이 빠른 시작에서는 Azure 환경에서 규정 비준수 리소스를 식별하는 정책 정의를 할당했습니다.
리소스 준수의 유효성을 검사하는 정책을 할당하는 방법에 대해 자세히 알아보려면 자습서를 계속 진행합니다.