Cloud/AZURE

Azure Policy 정리

BOKCH1 2025. 6. 10. 22:11

자동화된 보안 감사 체계 구축을 위해, Azure Policy 적용

 

 

 

1. Azure Policy 개론

- 개념 : 리소스의 생성 및 구성 상태를 정의된 규칙(policy definition)으로 제어하는 거버넌스 도구입니다.
- 기능: 비정상 리소스 감지, 수정 요청, 자동 수정(Remediation) 등 가능
- 유형:
          - 정책 정의(Definition): 조건(조건: if), 효과(effect: deny, audit 등)
          - 이니셔티브(Initiative): 여러 정책 정의를 묶은 그룹
- 주요 효과(effect):
          - Deny: 리소스 생성 차단
          - Audit: 비정상 리소스만 감지
          - DeployIfNotExists: 조건에 따라 리소스를 배포하여 보완

- 동작방식

          -  Policy 정의(Definition) >  Policy 할당(Assignment) > (선택) Remediation(자동보완) Task 실행

          -  Policy만으로는 “탐지”만 하며, 자동 보완하려면 remediation까지 구성

 

 

2. 효과

Effect 유형 설명 주요 용도  실무 적용 시 주의사항
Deny 조건에 맞지 않으면 리소스 생성 또는 업데이트를 차단합니다. 리전 제한, 허용된 VM SKU 등 엄격한 정책 리소스 배포 실패로 이어질 수 있으므로 사전 테스트 필요
Audit 조건에 맞지 않는 리소스를 로그로 감지만 합니다. 탐지, 감사 용도 (ex. 태그 누락 확인) 영향 없이 점진 도입 가능
AuditIfNotExists 특정 리소스가 없을 경우 감지 로그 기록 NSG, 진단 설정이 없을 때 감지 리소스 상태 의존 (존재 여부만 체크)
DeployIfNotExists 조건 위반 시 템플릿을 기반으로 리소스를 자동 배포합니다. NSG 자동 연결, 진단 설정 배포 등 Remediation task 필요, Managed Identity 필요
Append 리소스에 특정 속성을 강제로 추가합니다. 태그, 진단 설정 추가 등 Terraform와 충돌 가능성 있음 (drift 발생)
Modify 조건에 따라 리소스 속성 값을 수정합니다. 태그 자동 추가, SKU 변경 등 Terraform와 충돌 가능성 매우 높음
Disabled 정책을 비활성화하여 적용되지 않도록 합니다. 일시 중지, 테스트용 정책은 유지되나 효과 없음
EnforceOPAConstraint Open Policy Agent 규칙을 적용합니다. (미리보기) OPA 기반 고급 정책 사용 커스텀 템플릿 필요, 일반적인 정책과는 다름
EvaluateIfExists 특정 리소스가 있을 때에만 추가 조건을 평가합니다. (미리보기) 조건부 평가에 사용 복합 조건에 유용하지만 가독성 어려움
Manual 수동 검토가 필요한 항목으로 기록됩니다. 감사만 하고 정책 자체로는 처리하지 않음 운영 정책보다는 감사/문서 용도
DisabledWhenNotExists 리소스가 없을 경우에는 정책 평가를 건너뜸 평가 대상 리소스 조건화 잘 쓰이진 않음, 고급 조건에서 사용됨

 

-  실무에서 자주 사용하는 조합

사용 목적 권장 Effect
탐지 및 도입 준비 Audit, AuditIfNotExists
차단 및 보안 강화 Deny
자동 보완/수정 DeployIfNotExists, Modify
속성 강제 주입 Append
정책 중단/유지 보류 Disabled

 

 

3. Terraform과 함께 Azure Policy를 쓰는 방식

- 유의점 : Append, Modify, DeployIfNotExists와 같은 효과는 **Terraform의 선언적 상태(State)**와 충돌 가능성이 있어 Managed Identity, Role Assignment, Remediation 구성을 사전에 검토해야 함.

- Best Practice : Policy에서는 Terraform에서 만든 리소스를 변경하지 않도록, 역할 분리

     a. 정책도 Terraform 코드로 선언
     b. Managed Identity는 수동 생성 또는 Terraform으로 구성
     c. Terraform으로 만든 리소스를 Policy에서 변경하지 않도록 주의
     d. Terraform 상태 관리 (terraform import, lifecycle ignore_changes) 등 병행 고려

- 예시 시나리오

상황 조치
NSG 누락된 NIC이 발견됨 AuditIfNotExists로 감지 → Terraform 코드에 NSG 추가
태그 누락 리소스 있음 Audit로 감지 후 Terraform에 태그 선언 보완
개발자가 수동으로 VM 생성 Deny 정책으로 배포 차단 → Terraform 통해만 생성 유도
스토리지 HTTPS 미적용 감지 Audit + Terraform 수정 또는 Remediation 작업 수동 실행

  

 

 

4. 테라폼 코드 예제

- 정책 정의 (deny-location-policy.json)

{
  "mode": "All",  // 리소스 타입에 관계없이 모든 리소스에 적용
  "policyRule": {
    "if": {
      "field": "location",  // 리소스 생성 위치를 확인
      "notIn": ["korea central", "korea south"]  // 한국 리전이 아니면
    },
    "then": {
      "effect": "deny"  // 리소스 생성을 거부
    }
  }
}

- Terraform 코드 (정책 정의 + 할당)

# 커스텀 정책 정의
resource "azurerm_policy_definition" "deny_location" {
  name         = "deny-non-korea-location"        # 정책 내부 이름 (중복 불가)
  policy_type  = "Custom"                         # 사용자 정의 정책
  mode         = "All"                            # 모든 리소스 타입 대상
  display_name = "Deny Non-Korea Locations"       # 포털에 표시될 이름
  policy_rule  = file("deny-location-policy.json")  # 위 JSON 파일을 불러와 정책 본문으로 사용
}

# 정책을 구독 범위에 할당
resource "azurerm_policy_assignment" "deny_location_assign" {
  name                 = "assign-deny-non-korea"  # 정책 할당 이름
  policy_definition_id = azurerm_policy_definition.deny_location.id  # 위에서 정의한 정책 참조
  scope                = data.azurerm_subscription.primary.id  # 적용 범위: 구독 전체
}

 

 

 

5. 기본 아키텍쳐에 권장되는 Azure Policy 10선

비교적 단순한 아키텍처에 적용하면 좋을 Azure Policy를 꼽아보았다.

정책 종류 정책 목적 예시 정책 설명 효과 유형  추천 이유
1. 리전 통제 비용/규제 거버넌스 한국 외 리전 배포 차단 (location notIn) Deny 일반적으로 특정 리전에만 배포함
2. 태그 관리 자산 식별 및 비용 분석 태그 누락 리소스 감지 (tags not exists) Audit 리소스 추적 및 책임자 관리 용이
3. NSG 검사 네트워크 보안 강화 NSG 없는 NIC 감지 Audit or DeployIfNotExists SAP VM 네트워크 보안 필수
4. 퍼블릭 IP 제한 외부 노출 방지 Private zone의 퍼블릭 IP 존재 시 감지 Audit VPN 환경에서 불필요한 외부노출 방지
5. 스토리지 HTTPS 데이터 전송 보안 HTTPS 미사용 스토리지 감지 Deny or Audit 민감한 데이터 보호
6. VNet Peering 검사 네트워크 연결 정책 확인 특정 VNet Peering만 허용 Audit 허용된 네트워크 구성만 유지
7. VM 크기 제한 비용 및 성능 제어 특정 VM SKU 외 배포 차단 Deny 과도한 사이즈 비허용
8. VPN Gateway SKU 제한 고비용 방지 VPN Gateway SKU가 S2 이상이면 감지 Audit 필요 이상 스펙 사용 방지
9. NSG Inbound 제한 포트 제한 All IP를 Allow하는 NSG 감지 (HTTP/HTTPS 제외) Audit 내부망 중심 아키텍처 보호
10. 리소스 이름 규칙 네이밍 표준화 이름 접두사/형식 위반 리소스 감지 (name notLike) Audit 일관성 있는 리소스 관리