빠른 시작: Terraform을 사용하여 비규격 리소스를 식별하는 정책 할당 만들기
Azure의 규정 준수를 이해하는 첫 번째 단계는 리소스 상태를 식별하는 것입니다. 이 빠른 시작에서는 관리 디스크를 사용하지 않는 가상 머신을 식별하는 정책 할당을 만들고 할당하는 과정을 단계별로 안내합니다.
이 프로세스가 끝나면 구독에서 관리 디스크를 사용하지 않는 가상 머신을 식별합니다. 이 가상 머신은 정책 할당을 비준수합니다.
기본 제공 정책 또는 이니셔티브 정의를 할당할 때 버전을 참조하는 것은 선택 사항입니다. 기본 제공 정의의 정책 할당은 기본적으로 최신 버전으로 지정되며 별도로 지정하지 않는 한 자동으로 부 버전 변경 내용을 상속합니다.
필수 조건
- Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- 사용자 환경에 구성된 Terraform 버전 0.12.0 이상. 자세한 내용은 Azure Cloud Shell을 사용하여 Terraform 구성을 참조하세요.
- 이 빠른 시작에서는 Azure CLI 버전 2.13.0 이상을 실행해야 합니다. 버전을 확인하려면
az --version
을 실행합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
Terraform 구성, 변수 및 출력 파일 만들기
이 빠른 시작에서는 정책 할당을 만들고 관리 디스크를 사용하지 않는 VM 감사 정의를 할당합니다. 이 정책 정의는 정책 정의에 설정된 조건을 준수하지 않는 리소스를 식별합니다.
Terraform 구성, 변수 및 출력 파일을 구성합니다. Azure Policy에 대한 Terraform 리소스는 Azure 공급자를 사용합니다.
policy-assignment
라는 새 폴더를 만들고 디렉터리를 변경합니다.다음 코드로
main.tf
를 만듭니다.참고 항목
관리 그룹에서 정책 할당을 만들려면 azurerm_management_group_policy_assignment 리소스를 사용하고 리소스 그룹에는 azurerm_resource_group_policy_assignment를 사용하고 구독의 경우 azurerm_subscription_policy_assignment 리소스를 사용합니다.
provider "azurerm" { features {} } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.96.0" } } } resource "azurerm_subscription_policy_assignment" "auditvms" { name = "audit-vm-manageddisks" subscription_id = var.cust_scope policy_definition_id = "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" description = "Shows all virtual machines not using managed disks" display_name = "Audit VMs without managed disks assignment" }
다음 코드로
variables.tf
를 만듭니다.variable "cust_scope" { default = "{scope}" }
범위는 정책 할당이 적용되는 리소스 또는 리소스 그룹을 결정합니다. 관리 그룹에서 개별 리소스에 이르기까지 다양할 수 있습니다.
{scope}
를 선언된 리소스에 따라 다음 패턴 중 하나로 바꿔야 합니다.- 구독:
/subscriptions/{subscriptionId}
- 리소스 그룹:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
- 리소스:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
- 구독:
다음 코드로
output.tf
를 만듭니다.output "assignment_id" { value = azurerm_subscription_policy_assignment.auditvms.id }
Terraform 초기화 및 계획 만들기
Terraform을 초기화하여 필요한 공급자를 다운로드한 다음, 계획을 만듭니다.
terraform init 명령을 실행합니다. 이 명령은 Terraform 구성에서 Azure 리소스 그룹을 만드는 데 필요한 Azure 모듈을 다운로드합니다.
terraform init
Terraform에 대한 Azure CLI를 사용하여 인증합니다. 자세한 내용은 Azure 공급자: Azure CLI를 사용하여 인증을 참조하세요.
az login
terraform plan 명령 및 out 매개 변수를 사용하여 실행 계획을 만듭니다.
terraform plan -out assignment.tfplan
참고 항목
실행 계획 및 보안 유지에 대한 자세한 내용은 Terraform 계획: 보안 경고를 참조하세요.
Terraform 실행 계획 적용
실행 계획을 적용합니다.
terraform apply 명령을 실행하고 이미 생성된 assignment.tfplan
을 지정합니다.
terraform apply assignment.tfplan
이제 Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
메시지를 사용하여 정책 할당이 생성됩니다. outputs.tf
파일을 정의했으므로 assignment_id도 반환됩니다.
비규격 리소스 식별
이 새 할당에서 규정을 준수하지 않는 리소스를 보려면 terraform apply
에서 반환된 assignment_id를 사용합니다. 이를 통해 다음 명령을 실행하여 JSON 파일로 출력되는 비규격 리소스의 리소스 ID를 가져옵니다.
armclient post "/subscriptions/<subscriptionID>/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$filter=IsCompliant eq false and PolicyAssignmentId eq '<policyAssignmentID>'&$apply=groupby((ResourceId))" > <json file to direct the output with the resource IDs into>
결과는 다음 예제와 유사합니다.
{
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 3,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachineId>"
},
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionId>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine2Id>"
},
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/<subscriptionId>/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"ResourceId": "/subscriptions/<subscriptionName>/resourcegroups/<rgname>/providers/microsoft.compute/virtualmachines/<virtualmachine3ID>"
}
]
}
결과는 Azure Portal 보기에서 비준수 리소스 아래 나열된 것과 비교할 수 있습니다.
리소스 정리
만든 할당을 제거하려면 Azure CLI를 사용하거나 terraform destroy
를 사용하여 Terraform 실행 계획을 취소합니다.
Azure CLI
az policy assignment delete --name 'audit-vm-manageddisks' --scope '/subscriptions/<subscriptionID>/<resourceGroupName>'
Terraform
terraform destroy
다음 단계
이 빠른 시작에서는 Azure 환경에서 규정 비준수 리소스를 식별하는 정책 정의를 할당했습니다.
새 리소스가 규정을 준수하는지 확인하는 정책을 할당하는 방법을 알아보려면 다음 자습서를 계속 진행하세요.