Azure Policy 정의 modify 효과
modify
효과는 구독이나 리소스의 만들기 또는 업데이트 중에 태그를 추가, 업데이트 또는 제거하는 데 사용됩니다. 기존 비규격 리소스는 수정 작업으로 수정할 수도 있습니다. 효과가 Modify로 설정된 정책 할당은 수정하려면 관리 ID가 필요합니다. 효과를 사용하는 modify
일반적인 예는 'costCenter'와 같은 리소스에 대한 태그를 업데이트하는 것입니다.
리소스 속성에 대한 수정 동작에는 몇 가지 미묘한 차이가 있습니다. 수정을 건너뛰는 경우 시나리오에 대해 자세히 알아봅니다.
단일 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
와 함께 사용할 수 있는 별칭 목록을 가져옵니다.
- Azure PowerShell 4.6.0 이상에서
Important
태그를 관리할 때는 Append 대신 Modify를 사용하는 것이 좋습니다. Modify는 추가 작업 유형 및 기존 리소스를 수정하는 기능을 제공하기 때문입니다. 그러나 관리 ID를 만들 수 없거나 Modify가 아직 리소스 속성에 대한 별칭을 지원하지 않는 경우에는 Append를 사용하는 것이 좋습니다.
Modify 평가
Modify는 리소스의 생성 또는 업데이트하는 도중 리소스 공급자가 요청을 처리하기 전에 평가합니다. 정책 규칙의 if
조건이 충족되면 modify
작업이 요청 콘텐츠에 적용됩니다. 각 modify
작업은 적용 시기를 결정하는 조건을 지정할 수 있습니다.
별칭이 지정되면 modify
작업이 리소스 공급자가 요청 콘텐츠를 거부하도록 하는 방식으로 요청 콘텐츠를 변경하지 않는지 확인하기 위해 더 많은 검사가 수행됩니다.
- 별칭이 매핑되는 속성은 요청의 API 버전에서 Modifiable로 표시됩니다.
modify
작업의 토큰 형식은 요청의 API 버전에서 속성에 필요한 토큰 형식과 일치합니다.
이러한 검사 중 하나라도 실패하면 정책 평가가 지정된 conflictEffect
로 대체됩니다.
Important
매핑된 속성이 ‘Modifiable’이 아닌 API 버전을 사용하는 요청의 실패를 방지하기 위해, 별칭이 포함된 Modify 정의에는 충돌 효과 감사를 사용하는 것이 좋습니다. 동일한 별칭이 API 버전마다 다르게 동작하는 경우에는 조건부 Modify 작업을 사용하여 각 API 버전에 사용되는 modify
작업을 확인할 수 있습니다.
건너뛴 수정
평가 중에 수정 작업을 건너뛰는 경우가 있습니다.
- 기존 리소스: 효과를 사용하는
modify
정책 정의가 평가 주기의 일부로 실행되면 이미 존재하는 리소스를 변경하지 않습니다. 대신 조건을 충족if
하는 모든 리소스를 비준수로 표시하므로 수정 작업을 통해 수정할 수 있습니다. - 해당 없음: 배열의 연산
operations
조건이 false로 평가되면 해당 특정 작업을 건너뜁습니다. - 속성을 수정할 수 없음: 요청에 대해 지정된 별칭을 요청의 API 버전에서 수정할 수 없는 경우 평가에서 충돌 효과를 사용합니다. 충돌 효과가 거부로 설정되면 요청이 차단됩니다. 충돌 효과가 감사로 설정되면 요청이 허용되지만
modify
작업을 건너뜁습니다. - 속성이 없음: 요청의 리소스 페이로드에 속성이 없는 경우 수정을 건너뛸 수 있습니다. 경우에 따라 수정 가능한 속성은 다른 속성 내에 중첩되고
Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled
와 같은 별칭이 있습니다. “부모” 속성(이 경우deleteRetentionPolicy
)이 요청에 없으면 해당 속성이 의도적으로 생략된 것으로 간주되므로 수정을 건너뜁니다. 실용적인 예제를 보려면 존재하지 않는 속성의 예제 섹션으로 이동합니다. - 비 VM 또는 VMSS ID 작업: 수정 작업이 Virtual Machine 또는 Virtual Machine Scale Set 이외의 리소스에서 필드를 추가하거나 바꾸려
identity.type
고 하면 정책 평가가 모두 건너뛰어 수정이 수행되지 않습니다. 이 경우 리소스는 정책에 적용되지 않는 것으로 간주됩니다.
존재하지 않는 속성의 예
리소스 속성 수정은 API 요청 및 업데이트된 리소스 페이로드에 따라 달라집니다. 페이로드는 Azure Portal과 같은 사용되는 클라이언트 및 리소스 공급자와 같은 기타 요인에 따라 달라질 수 있습니다.
VM(가상 머신)에서 태그를 수정하는 정책을 적용한다고 상상해 보십시오. 크기 조정 또는 디스크 변경 중과 같이 VM이 업데이트 될 때마다 태그는 VM 페이로드의 내용에 관계없이 적절하게 업데이트됩니다. 태그는 VM 속성과 독립적이기 때문입니다.
그러나 VM에서 속성을 수정하는 정책을 적용하는 경우 수정은 리소스 페이로드에 따라 달라집니다. 업데이트 페이로드에 포함되지 않은 속성을 수정하려고 하면 수정이 수행되지 않습니다. 예를 들어 VM(별칭)의 속성을 패치할 assessmentMode
때 발생할 수 있습니다 Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode
. 속성이 "중첩"되므로 부모 속성이 요청에 포함되지 않은 경우 이 누락은 의도적인 것으로 간주되고 수정을 건너뜁니다. 수정을 수행하려면 리소스 페이로드에 이 컨텍스트가 포함되어야 합니다.
Modify 속성
modify
효과의 details
속성에는 수정에 필요한 권한과 태그 값을 추가, 업데이트 또는 제거하는 데 사용되는 operations
를 정의하는 모든 하위 속성이 있습니다.
roleDefinitionIds
(필수)- 이 속성은 구독에서 액세스할 수 있는 역할 기반 액세스 제어 역할 ID와 일치하는 문자열 배열을 포함해야 합니다. 자세한 내용은 수정 - 정책 정의 구성을 참조하세요.
- 정의된 역할에는 Contributor 역할에 부여된 모든 operations가 포함되어야 합니다.
conflictEffect
(선택 사항)- 둘 이상의 정책 정의가 동일한 속성을 수정하거나 지정된 별칭에서
modify
작업이 작동하지 않는 경우에 "우선하는" 정책 정의를 결정합니다.- 새 리소스 또는 업데이트된 리소스에서는 deny가 포함된 정책 정의가 우선적으로 적용됩니다. audit이 포함된 정책 정의는 모든
operations
를 건너뜁니다. 둘 이상의 정책 정의에 deny 효과가 있는 경우 요청이 충돌로 거부됩니다. 모든 정책 정의에 audit이 있는 경우 충돌하는 정책 정의 중operations
는 처리되지 않습니다. - 기존 리소스에서 둘 이상의 정책 정의에 deny 효과가 있는 경우 준수 상태는 Conflict입니다. 하나 이하의 정책 정의에 deny 효과가 있는 경우 할당마다 Non-compliant의 준수 상태를 반환합니다.
- 새 리소스 또는 업데이트된 리소스에서는 deny가 포함된 정책 정의가 우선적으로 적용됩니다. audit이 포함된 정책 정의는 모든
- 사용 가능한 값: audit, deny, disabled.
- 기본값은 deny입니다.
- 둘 이상의 정책 정의가 동일한 속성을 수정하거나 지정된 별칭에서
operations
(필수)- 일치하는 리소스에서 완료될 모든 태그 operations의 배열입니다.
- 속성
operation
(필수)- 일치하는 리소스에 수행할 작업을 정의합니다. 옵션은
addOrReplace
,Add
,Remove
입니다. Add
는 추가 효과와 유사하게 작동합니다.Remove
는 리소스 태그에 대해서만 지원됩니다.
- 일치하는 리소스에 수행할 작업을 정의합니다. 옵션은
field
(필수)- 추가, 대체 또는 제거할 태그입니다. 태그 이름은 다른 fields와 동일한 명명 규칙을 준수해야 합니다.
value
(선택 사항)- 태그를 설정할 값입니다.
- 이 속성은
operation
이 addOrReplace 또는 Add인 경우 필수입니다.
condition
(선택 사항)- true 또는 false로 평가되는 Policy 함수가 있는 Azure Policy 언어 식이 포함된 문자열입니다.
- Policy 함수
field()
,resourceGroup()
,subscription()
은 지원하지 않습니다.
operations 수정
operations
속성 배열을 사용하면 단일 정책 정의와 다른 방식으로 여러 태그를 변경할 수 있습니다. 각 작업은 operation
, field
및 value
속성으로 구성됩니다. 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
}
]
}
}
다음 단계
- Azure Policy 샘플에서 예제를 검토합니다.
- Azure Policy 정의 구조를 검토합니다.
- 프로그래밍 방식으로 정책을 만드는 방법을 이해합니다.
- 규정 준수 데이터를 가져오는 방법을 알아봅니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.
- Azure 관리 그룹을 검토합니다.