Azure Policy 및 이니셔티브를 사용하여 대규모 진단 설정 만들기
Azure 리소스를 모니터링하려면 각 리소스에 대한 진단 설정을 만들어야 합니다. 리소스가 많은 경우 이 프로세스를 관리하기 어려울 수 있습니다. 대규모 진단 설정을 만들고 적용하는 프로세스를 간소화하려면 Azure Policy를 사용하여 새 리소스와 기존 리소스 모두에 대한 진단 설정을 자동으로 생성합니다.
각 Azure 리소스 종류에는 진단 설정에 나열된 고유한 범주 집합이 있습니다. 따라서 각 리소스 종류에는 별도의 정책 정의가 필요합니다. 일부 리소스 종류에는 수정 없이 할당할 수 있는 기본 제공 정책 정의가 있습니다. 다른 리소스 종류의 경우 사용자 지정 정의를 만들 수 있습니다.
로그 범주 그룹
로그 범주 그룹은 유사한 형식의 로그를 함께 그룹화합니다. 범주 그룹을 사용하면 단일 명령으로 여러 로그를 쉽게 참조할 수 있습니다. 모든 로그를 포함하는 allLogs 범주 그룹이 존재합니다. 모든 감사 로그를 포함하는 audit 범주 그룹도 있습니다. 범주 그룹을 사용하여 새로운 로그 범주가 그룹에 추가될 때 동적으로 업데이트되는 정책을 정의할 수 있습니다.
Azure Monitor에 대한 기본 제공 정책 정의
일반적으로 진단을 보낼 세 대상에 해당하는 각 리소스 종류에 대한 세 가지 기본 제공 정책 정의가 있습니다.
- Log Analytics 작업 영역
- Azure Storage 계정
- Event Hubs
필요한 대상에 따라 리소스 종류에 대한 정책을 할당합니다.
몇 단계만으로 진단 설정을 적용할 수 있도록 감사 로그 범주 그룹을 기반으로 하는 일련의 정책 기본 제공 정책 및 이니셔티브가 개발되었습니다. 자세한 내용은 기본 제공 정책을 사용하여 범주 그룹별로 진단 설정 사용을 참조하세요.
Azure Monitor에 대한 기본 제공 정책의 전체 목록은 Azure Monitor에 대한 Azure Policy 기본 제공 정의를 참조하세요.
사용자 지정 정책 정의
기본 제공 정책이 없는 리소스 종류의 경우 사용자 지정 정책 정의를 만들어야 합니다. 기존 기본 제공 정책을 복사한 다음 리소스 종류에 맞게 수정하여 Azure Portal에서 수동으로 새 정책을 만들 수 있습니다. 또는 PowerShell 갤러리에서 스크립트를 사용하여 프로그래밍 방식으로 정책을 만듭니다.
Create-AzDiagPolicy 스크립트는 PowerShell 또는 Azure CLI를 사용하여 설치할 수 있는 특정 리소스 종류에 대한 정책 파일을 만듭니다. 다음 절차에 따라 진단 설정에 대한 사용자 지정 정책 정의를 만듭니다.
Azure PowerShell이 설치되어 있는지 확인합니다.
다음 명령을 사용하여 스크립트를 설치합니다.
Install-Script -Name Create-AzDiagPolicy
매개 변수를 사용하여 스크립트를 실행하여 로그를 보낼 위치를 지정합니다. 구독 및 리소스 종류를 지정하라는 메시지가 표시됩니다.
예를 들어 Log Analytics 작업 영역 및 이벤트 허브에 로그를 보내는 정책 정의를 만들려면 다음 명령을 사용합니다.
Create-AzDiagPolicy.ps1 -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
또는 명령에서 구독 및 리소스 종류를 지정할 수 있습니다. 예를 들어 로그를 Log Analytics 작업 영역 및 SQL Server 데이터베이스용 이벤트 허브로 보내는 정책 정의를 만들려면 다음 명령을 사용합니다.
Create-AzDiagPolicy.ps1 -SubscriptionID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -ResourceType Microsoft.Sql/servers/databases -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
스크립트는 각 정책 정의에 대해 별도의 폴더를 만듭니다. 각 폴더에는 azurepolicy.json, azurepolicy.rules.json 및 azurepolicy.parameters.json이라는 세 개의 파일이 있습니다. Azure Portal에서 정책을 수동으로 만들려는 경우 전체 정책 정의를 포함하는 azurepolicy.json의 내용을 복사하여 붙여넣을 수 있습니다. PowerShell 또는 Azure CLI와 함께 다른 두 파일을 사용하여 명령줄에서 정책 정의를 만듭니다.
다음 예제에서는 PowerShell과 Azure CLI 모두에서 정책 정의를 설치하는 방법을 보여 줍니다. 각 예제에는 모니터링 범주를 지정하여 새 정책 정의를 기본 제공 정책 정의와 그룹화하기 위한 메타데이터가 포함되어 있습니다.
New-AzPolicyDefinition -name "Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace" -policy .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json -parameter .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json -mode All -Metadata '{"category":"Monitoring"}'
az policy definition create --name 'deploy-diag-setting-sql-database--workspace' --display-name 'Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace' --rules 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json' --params 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json' --subscription 'AzureMonitor_Docs' --mode All
Initiative
각 정책 정의에 대한 할당을 만드는 대신, 일반적인 전략은 각 Azure 서비스에 대한 진단 설정을 만드는 정책 정의를 포함하는 이니셔티브를 만드는 것입니다. 환경을 관리하는 방법에 따라 이니셔티브와 관리 그룹, 구독 또는 리소스 그룹 간에 할당을 만듭니다. 이 전략은 다음과 같은 이점을 제공합니다.
- 리소스 종류마다 여러 할당을 만드는 대신 이니셔티브에 대해 단일 할당을 만듭니다. 여러 모니터링 그룹, 구독 또는 리소스 그룹에 동일한 이니셔티브를 사용합니다.
- 새 리소스 유형 또는 대상을 추가해야 하는 경우 이니셔티브를 수정합니다. 예를 들어, 초기에는 Log Analytics 작업 영역에만 데이터를 전송해야 하지만 나중에는 이벤트 허브를 추가할 수 있습니다. 새 할당을 만드는 대신 이니셔티브를 수정합니다.
이니셔티브 만들기에 대한 자세한 내용은 이니셔티브 정의 만들기 및 할당을 참조하세요. 다음 권장 사항을 살펴 보십시오.
- 범주를 모니터링으로 설정하여 관련 기본 제공 및 사용자 지정 정책 정의와 그룹화합니다.
- 이니셔티브에 포함된 정책 정의에 대한 Log Analytics 작업 영역 및 이벤트 허브의 세부 정보를 지정하는 대신 일반적인 이니셔티브 매개 변수를 사용합니다. 이 매개 변수를 사용하면 모든 정책 정의에 대한 공통 값을 쉽게 지정하고 필요한 경우 해당 값을 변경할 수 있습니다.
양도
모니터링할 리소스의 범위에 따라 Azure 관리 그룹, 구독 또는 리소스 그룹에 이니셔티브를 할당합니다. 관리 그룹은 특히 조직에 여러 구독이 있는 경우 범위 지정 정책에 유용합니다.
이니셔티브 매개 변수를 사용하여 이니셔티브의 모든 정책 정의에 대해 작업 영역 또는 다른 세부 정보를 한 번 지정할 수 있습니다.
수정
이니셔티브는 만들어진 각 가상 머신에 적용됩니다. 수정 작업은 이니셔티브의 정책 정의를 기존 리소스에 배포하므로 이미 만들어진 모든 리소스에 대한 진단 설정을 만들 수 있습니다.
Azure Portal을 사용하여 할당을 만들면서 동시에 수정 작업을 만들 수 있습니다. 수정에 대한 자세한 내용은 Azure Policy을 사용하여 비준수 리소스 수정을 참조하세요.
문제 해결
메트릭 범주는 지원되지 않습니다.
진단 설정을 배포할 때 메트릭 범주 'xxxx'는 지원되지 않습니다와 유사한 오류 메시지가 표시됩니다. 이전 배포에 성공한 경우에도 이 오류가 나타날 수 있습니다.
Resource Manager 템플릿, REST API, Azure CLI 또는 Azure PowerShell을 사용할 때 문제가 발생합니다. Azure Portal를 통해 만든 진단 설정은 지원되는 범주 이름만 표시되므로 영향을 받지 않습니다.
이 문제는 기본 API의 최근 변경으로 인해 발생합니다. 'AllMetrics' 이외의 메트릭 범주는 지원되지 않으며 일부 특정 Azure 서비스를 제외하고는 지원되지 않았습니다. 이전에는 진단 설정을 배포할 때 다른 범주 이름이 무시되었습니다. Azure Monitor 백 엔드는 이러한 범주를 'AllMetrics'로 리디렉션했습니다. 2021년 2월을 기준으로 제공된 메트릭 범주가 정확한지 확인하기 위해 백엔드가 업데이트되었습니다. 이 변경으로 인해 일부 배포가 실패했습니다.
이 오류가 발생하면 모든 메트릭 범주 이름을 'AllMetrics'로 바꿔 배포를 업데이트하여 문제를 해결합니다. 배포가 이전에 여러 범주를 추가한 경우에는 'AllMetrics' 참조를 포함하는 단 하나만 유지해야 합니다. 문제가 계속되면 Azure Portal을 통해 Azure 지원에 문의합니다.
resourceID의 ASCII가 아닌 문자로 인해 설정이 사라짐
진단 설정은 비 ASCII 문자(예: Preproducción)가 포함된 Resourceid를 지원하지 않습니다. Azure에서 리소스의 이름을 바꿀 수 없으므로 유일한 옵션은 ASCII가 아닌 문자 없이 새 리소스를 만드는 것입니다. 문자가 리소스 그룹에 있는 경우 그 아래에 있는 리소스를 새 리소스로 이동할 수 있습니다. 이동하지 않으면 리소스를 다시 만들어야 합니다.