Share via


Azure Policy 정의 modify 효과

modify 효과는 구독이나 리소스의 만들기 또는 업데이트 중에 태그를 추가, 업데이트 또는 제거하는 데 사용됩니다. 일반적인 예는 costCenter와 같은 리소스의 태그를 업데이트하는 것입니다. 기존 비준수 리소스는 수정 작업을 통해 수정할 수 있습니다. 단일 Modify 규칙은 많은 수의 operations를 포함할 수 있습니다. 효과가 Modify로 설정된 정책 할당은 수정하려면 관리 ID가 필요합니다.

modify 효과는 다음 작업을 지원합니다.

  • 리소스 태그를 추가, 바꾸기 또는 제거합니다. 태그의 경우 대상 리소스가 리소스 그룹이 아닌 경우 수정 정책의 모드indexed로 설정되어 있어야 합니다.
  • 가상 머신 및 Virtual Machine Scale Sets의 관리 ID 값(identity.type)을 추가하거나 바꿉니다. 가상 머신 또는 Virtual Machine Scale Sets에 대해서만 identity.type을 수정할 수 있습니다.
  • 특정 별칭의 값을 추가하거나 바꿉니다.
    • Azure PowerShell 4.6.0 이상에서 Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }을 사용하여 modify와 함께 사용할 수 있는 별칭 목록을 가져옵니다.

Important

태그를 관리할 때는 Append 대신 Modify를 사용하는 것이 좋습니다. Modify는 추가 작업 유형 및 기존 리소스를 수정하는 기능을 제공하기 때문입니다. 그러나 관리 ID를 만들 수 없거나 Modify가 아직 리소스 속성에 대한 별칭을 지원하지 않는 경우에는 Append를 사용하는 것이 좋습니다.

Modify 평가

Modify는 리소스의 생성 또는 업데이트하는 도중 리소스 공급자가 요청을 처리하기 전에 평가합니다. 정책 규칙의 if 조건이 충족되면 modify 작업이 요청 콘텐츠에 적용됩니다. 각 modify 작업은 적용 시기를 결정하는 조건을 지정할 수 있습니다. 조건 평가가 false인 작업은 건너뜁니다.

별칭이 지정되면 modify 작업이 리소스 공급자가 요청 콘텐츠를 거부하도록 하는 방식으로 요청 콘텐츠를 변경하지 않는지 확인하기 위해 더 많은 검사가 수행됩니다.

  • 별칭이 매핑되는 속성은 요청의 API 버전에서 Modifiable로 표시됩니다.
  • modify 작업의 토큰 형식은 요청의 API 버전에서 속성에 필요한 토큰 형식과 일치합니다.

이러한 검사 중 하나라도 실패하면 정책 평가가 지정된 conflictEffect로 대체됩니다.

Important

매핑된 속성이 ‘Modifiable’이 아닌 API 버전을 사용하는 요청의 실패를 방지하기 위해, 별칭이 포함된 Modify 정의에는 감사 충돌 효과를 사용하는 것이 좋습니다. 동일한 별칭이 API 버전마다 다르게 동작하는 경우에는 조건부 Modify 작업을 사용하여 각 API 버전에 사용되는 modify 작업을 확인할 수 있습니다.

modify 효과를 사용하는 정책 정의가 평가 주기의 일부로 실행되는 경우 이미 존재하는 리소스를 변경하지 않습니다. 대신 비호환으로 if 조건을 충족하는 모든 리소스를 표시합니다.

Modify 속성

modify 효과의 details 속성에는 수정에 필요한 권한과 태그 값을 추가, 업데이트 또는 제거하는 데 사용되는 operations를 정의하는 모든 하위 속성이 있습니다.

  • roleDefinitionIds(필수)
    • 이 속성은 구독에서 액세스할 수 있는 역할 기반 액세스 제어 역할 ID와 일치하는 문자열 배열을 포함해야 합니다. 자세한 내용은 수정 - 정책 정의 구성을 참조하세요.
    • 정의된 역할에는 Contributor 역할에 부여된 모든 operations가 포함되어야 합니다.
  • conflictEffect(선택 사항)
    • 둘 이상의 정책 정의가 동일한 속성을 수정하거나 지정된 별칭에서 modify 작업이 작동하지 않는 경우에 "우선하는" 정책 정의를 결정합니다.
      • 새 리소스 또는 업데이트된 리소스에서는 deny가 포함된 정책 정의가 우선적으로 적용됩니다. audit이 포함된 정책 정의는 모든 operations를 건너뜁니다. 둘 이상의 정책 정의에 deny 효과가 있는 경우 요청이 충돌로 거부됩니다. 모든 정책 정의에 audit이 있는 경우 충돌하는 정책 정의 중 operations는 처리되지 않습니다.
      • 기존 리소스에서 둘 이상의 정책 정의에 deny 효과가 있는 경우 준수 상태는 Conflict입니다. 하나 이하의 정책 정의에 deny 효과가 있는 경우 할당마다 Non-compliant의 준수 상태를 반환합니다.
    • 사용 가능한 값: audit, deny, disabled.
    • 기본값은 deny입니다.
  • operations(필수)
    • 일치하는 리소스에서 완료될 모든 태그 operations의 배열입니다.
    • 속성
      • operation(필수)
        • 일치하는 리소스에 수행할 작업을 정의합니다. 옵션에는 addOrReplace, Add, Remove가 있습니다. Add추가 효과와 유사하게 작동합니다.
      • field(필수)
        • 추가, 대체 또는 제거할 태그입니다. 태그 이름은 다른 fields와 동일한 명명 규칙을 준수해야 합니다.
      • value(선택 사항)
        • 태그를 설정할 값입니다.
        • 이 속성은 operationaddOrReplace 또는 Add인 경우 필수입니다.
      • condition(선택 사항)
        • true 또는 false로 평가되는 Policy 함수가 있는 Azure Policy 언어 식이 포함된 문자열입니다.
        • Policy 함수 field(), resourceGroup(), subscription()은 지원하지 않습니다.

operations 수정

operations 속성 배열을 사용하면 단일 정책 정의와 다른 방식으로 여러 태그를 변경할 수 있습니다. 각 작업은 operation, fieldvalue 속성으로 구성됩니다. operation은 수정 작업이 태그에 수행하는 작업을 결정하고, field는 어떤 태그가 변경되는지 결정하며, value는 해당 태그에 대한 새 설정을 정의합니다. 아래 예시에서는 다음과 같이 태그를 변경합니다.

  • environment 태그가 이미 다른 값으로 존재하더라도 "Test"로 설정합니다.
  • TempResource태그를 제거합니다.
  • Dept 태그를 정책 할당에 구성된 정책 매개 변수 DeptName으로 설정합니다.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

operation 속성에는 다음과 같은 옵션이 있습니다.

연산 설명
addOrReplace 속성 또는 태그가 다른 값으로 이미 존재하더라도 정의된 속성 또는 태그와 값을 리소스에 추가합니다.
add 정의된 속성 또는 태그와 값을 리소스에 추가합니다.
remove 정의된 속성 또는 태그를 리소스에서 제거합니다.

Modify 예제

예제 1: environment 태그를 추가하고 기존 environment 태그를 "Test"로 바꿉니다.

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "Test"
      }
    ]
  }
}

예제 2: env 태그를 제거하고 environment 태그를 추가하거나 기존 environment 태그를 매개 변수화된 값으로 바꿉니다.

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "conflictEffect": "deny",
    "operations": [
      {
        "operation": "Remove",
        "field": "tags['env']"
      },
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "[parameters('tagValue')]"
      }
    ]
  }
}

예제 3: 스토리지 계정에서 Blob 공용 액세스를 허용하지 않는지 확인합니다. modify 작업은 API 버전이 2019-04-01 이상인 요청을 평가할 때에만 적용됩니다.

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
    ],
    "conflictEffect": "audit",
    "operations": [
      {
        "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
        "operation": "addOrReplace",
        "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
        "value": false
      }
    ]
  }
}

다음 단계