다음을 통해 공유


자습서: 사용자 지정 정책 정의 만들기

사용자 지정 정책 정의를 사용하면 고객이 Azure 사용에 대한 자체 규칙을 정의할 수 있습니다. 이러한 규칙은 종종 다음 항목을 적용합니다.

  • 보안 사례.
  • Cost Management.
  • 조직별 규칙(예: 이름 지정 또는 위치).

사용자 지정 정책을 만드는 비즈니스 요인이 무엇이든, 새 사용자 지정 정책을 정의하는 단계는 동일합니다.

사용자 지정 정책을 만들기 전에 정책 샘플을 검사하여 요구 사항과 일치하는 기존 정책이 있는지 여부를 확인합니다.

사용자 지정 정책을 만드는 단계는 다음과 같습니다.

  • 비즈니스 요구 사항 식별
  • 각 요구 사항을 Azure 리소스 속성에 매핑
  • 속성을 별칭에 매핑
  • 사용할 효과 결정
  • 정책 정의 작성

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

ID 요구 사항

정책 정의를 만들기 전에, 정책의 의도를 이해해야 합니다. 이 자습서에서는 일반적인 엔터프라이즈 보안 요구 사항을 목표로 사용하여 관련된 단계를 설명합니다.

  • 각 스토리지 계정은 HTTPS에 대해 사용하도록 설정해야 합니다.
  • HTTP에 대해 각 스토리지 계정을 사용하지 않도록 설정해야 합니다.

요구 사항에서 "사용" 및 "사용 안 함" 리소스 상태를 정확하게 식별해야 합니다.

리소스의 예상 상태를 정의하지만 비준수 리소스로 수행하려는 작업을 정의하지 않았습니다. Azure Policy는 많은 효과를 지원합니다. 이 자습서에서는 비즈니스 규칙을 준수하지 않는 경우 리소스를 만들지 못하도록 비즈니스 요구 사항을 정의합니다. 이 목표를 달성하기 위해 거부 효과를 사용합니다. 또한 특정 할당에 대한 정책을 일시 중단하려고 합니다. 사용하지 않도록 설정된 효과를 사용하고 정책 정의에서 효과를 매개 변수만듭니다.

리소스 속성 확인

비즈니스 요구 사항에 따라 Azure Policy를 통해 감사할 Azure 리소스는 스토리지 계정입니다. 그러나 우리는 정책 정의에 어떤 속성을 사용해야 하는지 아직 모릅니다. Azure Policy는 리소스의 JSON 표현을 기준으로 평가되므로 해당 리소스에서 사용할 수 있는 속성을 이해해야 합니다.

Azure 리소스의 속성을 확인하는 방법은 여러 가지가 있습니다. 이 자습서의 각 내용은 다음과 같습니다.

  • VS Code용 Azure Policy 확장입니다.
  • ARM 템플릿(Azure Resource Manager 템플릿)
    • 기존 리소스를 내보냅니다.
    • 만들기 환경.
    • 빠른 시작 템플릿(GitHub).
    • 템플릿 참조 문서입니다.
  • Azure Resource Explorer.

VS Code 확장에서 리소스 보기

VS Code 확장을 사용하여 사용자 환경에서 리소스를 찾고 각 리소스에 대한 Resource Manager 속성을 볼 수 있습니다.

ARM 템플릿

관리하려는 속성이 포함된 ARM 템플릿을 찾는 여러 가지 방법이 있습니다.

포털의 기존 리소스

속성을 찾는 가장 간단한 방법은 동일한 형식의 기존 리소스를 살펴보는 것입니다. 적용하려는 설정을 사용하여 이미 구성된 리소스는 비교 값을 제공합니다. 특정 리소스에 대한 Azure Portal의 설정에서 템플릿 내보내기 페이지를 확인합니다.

Warning

Azure Portal에서 내보낸 ARM 템플릿은 deployIfNotExists 정책 정의에서 ARM 템플릿의 deployment 속성에 직접 연결할 수 없습니다.

Azure Portal의 기존 리소스에 대한 템플릿 내보내기 페이지의 스크린샷.

스토리지 계정에 대해 이렇게 하면 다음 예제와 비슷한 템플릿이 표시됩니다.

"resources": [
  {
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
      "name": "Standard_LRS",
      "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
      "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
      "networkAcls": {
        "bypass": "AzureServices",
        "virtualNetworkRules": [],
        "ipRules": [],
        "defaultAction": "Allow"
      },
      "supportsHttpsTrafficOnly": false,
      "encryption": {
        "services": {
          "file": {
            "enabled": true
          },
          "blob": {
            "enabled": true
          }
        },
        "keySource": "Microsoft.Storage"
      }
    },
    "dependsOn": []
  }
]

아래에 properties 는 .로 설정된 값이 supportsHttpsTrafficOnly 있습니다 false. 이 속성은 우리가 찾고 있는 속성일 수 있습니다. 또한 리소스는 type .입니다 Microsoft.Storage/storageAccounts. 이 형식은 정책을 이 형식의 리소스에만 적용하도록 제한할 수 있습니다.

포털에서 리소스 만들기

포털을 이용하는 또 다른 방법은 리소스 만들기 환경입니다. 포털을 통해 스토리지 계정을 만들 때 고급 탭 아래의 옵션은 보안 전송이 필요합니다. 이 속성은 사용 안 함사용 옵션을 제공합니다. 정보 아이콘에는 이 옵션이 원하는 속성일 가능성이 있음을 확인하는 더 많은 텍스트가 있습니다. 그러나 포털은 이 화면의 속성 이름을 알려주지 않습니다.

검토 + 만들기 탭에서 페이지 하단을 보면 자동화 템플릿 다운로드 링크가 있습니다. 이 링크를 선택하면 우리가 구성한 리소스를 만드는 템플릿이 열립니다. 이 예에서는 다음과 같은 두 가지 핵심 정보가 보입니다.

...
"supportsHttpsTrafficOnly": {
  "type": "bool"
}
...
"properties": {
  "accessTier": "[parameters('accessTier')]",
  "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

이 정보는 속성 형식을 알려주며 찾고 있는 속성도 확인합니다 supportsHttpsTrafficOnly .

GitHub의 빠른 시작 템플릿

GitHub의 Azure 빠른 시작 템플릿 에는 다양한 리소스용으로 빌드된 수백 개의 ARM 템플릿이 있습니다. 이러한 템플릿을 통해 원하는 리소스 속성을 찾을 수 있습니다. 일부 속성은 원하는 것으로 보일 수 있지만 다른 속성을 제어합니다.

리소스 참조 문서

올바른 속성인지 확인 supportsHttpsTrafficOnly 하려면 스토리지 공급자의 스토리지 계정 리소스대한 ARM 템플릿 참조를 확인합니다. 속성 개체는 유효한 매개 변수 목록을 갖고 있습니다. StorageAccountPropertiesCreateParameters 개체 링크를 선택하면 허용 가능한 속성의 테이블이 표시됩니다. supportsHttpsTrafficOnly 가 있으며 설명은 비즈니스 요구 사항과 관련하여 찾고 있는 내용과 일치합니다.

Azure 리소스 탐색기

Azure 리소스를 살펴보는 또 다른 방법은 Azure Resource Explorer(미리 보기)입니다. 이 도구는 구독의 컨텍스트를 사용하므로 Azure 자격 증명을 사용하여 웹 사이트에 인증해야 합니다. 인증되면 공급자, 구독, 리소스 그룹 및 리소스별로 찾아볼 수 있습니다.

스토리지 계정 리소스를 찾아서 속성을 살펴봅니다. 여기에서도 supportsHttpsTrafficOnly 속성을 볼 수 있습니다. 설명서 탭을 선택하면 속성 설명이 우리가 참조 문서에서 찾은 내용과 일치하는 것을 볼 수 있습니다.

속성 별칭 찾기

리소스 속성을 확인했지만 해당 속성을 별칭에 매핑해야 합니다.

Azure 리소스의 별칭을 확인하는 몇 가지 방법이 있습니다. 이 자습서의 각 내용은 다음과 같습니다.

  • VS Code용 Azure Policy 확장입니다.
  • Azure CLI
  • Azure PowerShell.

VS Code 확장에서 별칭 가져오기

VS Code 확장용 Azure Policy 확장을 사용하면 리소스를 쉽게 찾아보고 별칭을 검색할 수 있습니다.

참고 항목

VS Code 확장은 Resource Manager 모드 속성만 노출하고 리소스 공급자 모드 속성은 표시하지 않습니다.

Azure CLI

Azure CLI에서 az provider 명령 그룹은 리소스 별칭을 검색하는 데 사용됩니다. 앞에서 Azure 리소스에 Microsoft.Storage 대해 얻은 세부 정보를 기반으로 네임스페이스를 필터링합니다.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

결과에는 명명 supportsHttpsTrafficOnly된 스토리지 계정에서 지원하는 별칭이 표시됩니다. 이 별칭이 있다는 것은 비즈니스 요구 사항을 적용하는 정책을 작성할 수 있다는 의미입니다.

Azure PowerShell

Azure PowerShell에서 Get-AzPolicyAlias cmdlet은 리소스 별칭을 검색하는 데 사용됩니다. 이전에 Azure 리소스에 Microsoft.Storage 대해 얻은 세부 정보를 기반으로 네임스페이스를 필터링합니다.

# Login first with Connect-AzAccount if not using Cloud Shell

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Azure CLI와 마찬가지로 결과에는 명명 supportsHttpsTrafficOnly된 스토리지 계정에서 지원하는 별칭이 표시됩니다.

사용할 효과 결정

비 규격 리소스를 어떻게 할 것인지 결정하는 사안은 무엇을 평가할 것인지 결정하는 사안만큼 중요합니다. 비 규격 리소스에 대해 나올 수 있는 각 대응을 효과라고 합니다. 효과는 비 규격 리소스가 로깅되는지, 차단되는지, 데이터가 추가되었는지 또는 리소스를 규정 준수 상태로 되돌리기 위한 배포가 연결되는지 여부를 제어합니다.

이 예제에서는 deny Azure 환경에서 비준수 리소스를 만들지 않기 때문에 원하는 효과입니다. 감사는 정책 효과를 설정 deny하기 전에 정책 효과를 결정하는 데 적합한 첫 번째 선택입니다. 할당별 효과를 보다 쉽게 변경하는 한 가지 방법은 효과를 매개 변수화하는 것입니다. 자세한 내용은 매개 변수를 참조하세요.

정의 작성

우리가 관리하려는 대상의 속성 세부 정보와 별칭을 확보했습니다. 다음으로 정책 규칙 자체를 구성합니다. 정책 언어에 익숙하지 않은 경우 정책 정의를 구성하는 방법에 대한 정책 정의 구조를 참조합니다. 다음은 정책 정의의 모양에 대한 빈 템플릿입니다.

{
  "properties": {
    "displayName": "<displayName>",
    "description": "<description>",
    "mode": "<mode>",
    "parameters": {
              <parameters>
    },
    "policyRule": {
      "if": {
              <rule>
      },
      "then": {
        "effect": "<effect>"
      }
    }
  }
}

메타데이터

처음 세 개 구성 요소는 정책 메타데이터입니다. 이러한 구성 요소는 우리가 값을 만들 대상을 알고 있기 때문에 값을 쉽게 제공할 수 있습니다. 모드는 주로 태그 및 리소스 위치와 관련이 있습니다. 태그를 지원하는 리소스로 평가를 제한할 필요가 없으므로 모든 값을 mode사용합니다.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

매개 변수

평가 변경에 매개 변수를 사용하지는 않았지만 매개 변수를 사용하여 문제 해결을 위해 변경할 effect 수 있도록 하려고 합니다. 매개 변수를 effectType 정의하고 매개 변수만 deny disabled및 .로 제한합니다. 이러한 두 옵션은 비즈니스 요구 사항과 일치합니다. 완성된 매개 변수 블록은 다음 예제와 비슷합니다.

"parameters": {
  "effectType": {
    "type": "string",
    "defaultValue": "Deny",
    "allowedValues": [
      "Deny",
      "Disabled"
    ],
    "metadata": {
      "displayName": "Effect",
      "description": "Enable or disable the execution of the policy"
    }
  }
},

정책 규칙

정책 규칙 작성은 사용자 지정 정책 정의를 빌드하는 최종 단계입니다. 테스트할 두 문을 확인했습니다.

  • 스토리지 계정은 type .입니다 Microsoft.Storage/storageAccounts.
  • 스토리지 계정이 supportsHttpsTrafficOnly 아닙니다 true.

두 명령문이 모두 true여야 하므로 논리 연산자를 allOf 사용합니다. effectType 정적 선언을 만드는 대신 매개 변수를 효과에 전달합니다. 완성된 규칙은 다음 예제와 비슷합니다.

"if": {
  "allOf": [
    {
      "field": "type",
      "equals": "Microsoft.Storage/storageAccounts"
    },
    {
      "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
      "notEquals": "true"
    }
  ]
},
"then": {
  "effect": "[parameters('effectType')]"
}

완성된 정의

정책의 세 부분이 모두 정의되었으며, 다음은 완성된 정의입니다.

{
  "properties": {
    "displayName": "Deny storage accounts not using only HTTPS",
    "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
    "mode": "all",
    "parameters": {
      "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
          "Deny",
          "Disabled"
        ],
        "metadata": {
          "displayName": "Effect",
          "description": "Enable or disable the execution of the policy"
        }
      }
    },
    "policyRule": {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
          }
        ]
      },
      "then": {
        "effect": "[parameters('effectType')]"
      }
    }
  }
}

완성된 정의는 새 정책 만들기에 사용할 수 있습니다. 포털 및 각 SDK(Azure CLI, Azure PowerShell 및 REST API)는 여러 방법으로 정의를 수락하므로, 각각의 명령을 검토하여 올바른 사용법을 확인하세요. 그 후 매개 변수화된 효과를 사용하여 적절한 리소스에 할당하고 스토리지 계정의 보안을 관리하세요.

리소스 정리

이 자습서에서 리소스 작업을 완료한 경우 다음 단계를 사용하여 만든 할당 또는 정의를 삭제합니다.

  1. Azure Policy 페이지의 왼쪽 창에 있는 작성 아래에서 정의(또는 할당을 삭제하려는 경우 할당을 선택)를 선택합니다.

  2. 제거할 새 이니셔티브 또는 정책 정의(또는 할당)를 검색합니다.

  3. 행을 마우스 오른쪽 단추로 클릭하거나 정의(또는 할당) 끝에 있는 줄임표를 선택하고 정의 삭제(또는 할당 삭제)를 선택합니다.

검토

이 자습서에서는 다음 작업을 성공적으로 완료했습니다.

  • 비즈니스 요구 사항 식별
  • 각 요구 사항을 Azure 리소스 속성에 매핑
  • 속성을 별칭에 매핑
  • 사용할 효과 결정
  • 정책 정의 작성

다음 단계

다음으로, 사용자 지정 정책 정의를 사용하여 정책을 만들고 할당합니다.