다음을 통해 공유


Azure Policy를 사용하여 Linux VM의 확장 설치 제한

Linux VM에 특정 확장이 설치되지 않도록 하려면 Azure CLI를 사용하여 리소스 그룹 내의 VM 확장을 제한하는 Azure Policy를 만들면 됩니다. Linux용 Azure VM 확장의 기본 사항을 알아보려면 Linux용 가상 머신 확장 및 기능을 참조하세요.

이 자습서에서는 지속적으로 최신 버전으로 업데이트되는 Azure Cloud Shell 내의 CLI를 사용합니다. Azure CLI를 로컬에서 실행하려면 버전 2.0.26 이상을 설치해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

규칙 파일 만들기

사용 가능한 확장을 제한하려면 확장을 식별하는 규칙을 만들어야 합니다.

이 예제에서는 Azure Cloud Shell에서 규칙 파일을 정의하여 허용되지 않는 VM 확장 설치를 거부하는 방법을 보여 줍니다. 그러나 Azure CLI에서 로컬로 작업하는 경우 로컬 파일을 만들고 경로(~/clouddrive)를 로컬 파일 시스템의 파일 경로로 바꿀 수 있습니다.

  1. bash Cloud Shell에서 텍스트 편집기를 사용하여 ~/clouddrive/azurepolicy.rules.json 파일을 만듭니다.

  2. 다음 .json 콘텐츠를 복사하여 파일에 붙여넣고 저장합니다.

{
	"if": {
		"allOf": [
			{
				"field": "type",
				"equals": "Microsoft.Compute/virtualMachines/extensions"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/publisher",
				"equals": "Microsoft.OSTCExtensions"
			},
			{
				"field": "Microsoft.Compute/virtualMachines/extensions/type",
				"in": "[parameters('notAllowedExtensions')]"
			}
		]
	},
	"then": {
		"effect": "deny"
	}
}

매개 변수 파일 만들기

승인되지 않은 확장 목록을 전달하는 데 사용할 구조를 만드는 매개 변수 파일도 필요합니다.

이 예제에서는 Cloud Shell에서 Linux VM에 대한 매개 변수 파일을 만드는 방법을 보여 줍니다.

  1. 이전에 열린 bash Cloud Shell 텍스트 편집기를 사용하여 ~/clouddrive/azurepolicy.parameters.json 파일을 만듭니다.

  2. 다음 .json 콘텐츠를 복사하여 파일에 붙여넣고 저장합니다.

{
	"notAllowedExtensions": {
		"type": "Array",
		"metadata": {
			"description": "The list of extensions that will be denied. Example: CustomScriptForLinux, VMAccessForLinux etc.",
			"displayName": "Denied extension"
		}
	}
}

정책 만들기

정책 정의는 사용하려는 구성을 저장하는 데 사용되는 개체입니다. 정책 정의는 규칙 및 매개 변수 파일을 사용하여 정책을 정의합니다. az policy definition create를 사용하여 정책 정의를 만듭니다.

이 예제에서 규칙 및 매개 변수는 Cloud Shell 또는 로컬 파일 시스템에서 .json 파일로 만들고 저장한 파일입니다.

az policy definition create \
   --name 'not-allowed-vmextension-linux' \
   --display-name 'Block VM Extensions' \
   --description 'This policy governs which VM extensions that are blocked.' \
   --rules '~/clouddrive/azurepolicy.rules.json' \
   --params '~/clouddrive/azurepolicy.parameters.json' \
   --mode All

정책 할당

이 예제에서는 az policy assignment create를 사용하여 리소스 그룹에 정책을 할당합니다. myResourceGroup 리소스 그룹에서 생성된 VM은 Linux VM 액세스 또는 Linux용 사용자 지정 스크립트 확장을 설치할 수 없습니다.

참고 항목

정책을 할당하려면 리소스 그룹이 있어야 합니다.

az account list를 사용하여 구독 ID를 찾고 다음 예제에서 자리 표시자를 바꿉니다.

az policy assignment create \
   --name 'not-allowed-vmextension-linux' \
   --scope /subscriptions/<subscription Id>/resourceGroups/myResourceGroup \
   --policy "not-allowed-vmextension-linux" \
   --params '{
		"notAllowedExtensions": {
			"value": [
				"VMAccessForLinux",
				"CustomScriptForLinux"
			]
		}
	}'

정책 테스트

새 VM을 만들고 새 사용자를 추가하여 정책을 테스트합니다.

az vm create \
    --resource-group myResourceGroup \
	--name myVM \
	--image myImage \
	--generate-ssh-keys

참고 항목

myResourceGroup, myVM, myImage 값을 상황에 맞게 바꾸세요.

VM 액세스 확장을 사용하여 myNewUser라는 새 사용자를 만듭니다.

az vm user update \
  --resource-group myResourceGroup \
  --name myVM \
  --username myNewUser \
  --password 'mynewuserpwd123!'

할당 제거

az policy assignment delete --name 'not-allowed-vmextension-linux' --resource-group myResourceGroup

정책 제거

az policy definition delete --name 'not-allowed-vmextension-linux'

다음 단계

자세한 내용은 Azure Policy를 참조하세요.