Azure Policy를 사용하여 비준수 리소스 수정

deployIfNotExists 또는 modify 효과가 있는 정책을 준수하지 않는 리소스는 수정을 통해 준수 상태로 전환될 수 있습니다. 할당이 관리 그룹, 구독, 리소스 그룹 또는 개별 리소스에 있는지 여부에 관계없이 수정은 기존 리소스 및 구독에 할당된 정책의 deployIfNotExists 템플릿 또는 modify 작업을 배포하는 수정 작업을 통해 수행됩니다. 이 문서에서는 Azure Policy를 통한 수정을 이해하고 수행하는 데 필요한 단계를 보여 줍니다.

수정 액세스 제어의 작동 방식

Azure Policy는 deployIfNotExists 정책을 평가할 때 템플릿 배포를 시작하거나 수정 정책을 평가할 때 리소스를 수정하는 경우 정책 할당과 연결된 관리 ID를 사용합니다. 정책 할당은 Azure 리소스 권한 부여에 관리 ID를 사용합니다. 정책 서비스에서 만든 시스템이 할당한 관리 ID 또는 사용자가 제공한 사용자 할당 ID를 사용할 수 있습니다. 관리 ID에는 리소스를 수정하는 데 필요한 최소 RBAC(역할 기반 액세스 제어) 역할이 할당되어야 합니다. 관리 ID에서 역할이 누락된 경우 정책 또는 이니셔티브를 할당하는 동안 포털에 오류가 표시됩니다. 포털 사용 시 Azure Policy는 할당이 시작되면 나열된 역할을 관리 ID에 자동으로 부여합니다. Azure SDK(소프트웨어 개발 키트)를 사용하는 경우 관리 ID에 역할을 수동으로 부여해야 합니다. 관리 ID의 위치는 Azure Policy 작업에 영향을 주지 않습니다.

참고

정책 정의를 변경해도 할당 또는 연결된 관리 ID가 자동으로 업데이트되지 않습니다.

수정 보안은 다음 단계를 통해 구성할 수 있습니다.

정책 정의 구성

필수 구성 요소로서 정책 정의는 포함된 템플릿의 콘텐츠를 성공적으로 배포하는 데 필요한 deployIfNotExistsmodify 역할을 정의해야 합니다. 이러한 역할은 미리 채워져 있으므로 기본 제공 정책 정의에 대한 작업이 필요하지 않습니다. 사용자 지정 정책 정의의 경우 roleDefinitionIds 속성을 details 속성 아래에 추가합니다. 이 속성은 환경의 역할과 일치하는 문자열 배열입니다. 전체 예제를 보려면 deployIfNotExists 예제 또는 수정 예제를 참조하세요.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

roleDefinitionIds 속성은 역할의 짧은 roleName을 가져오지 않으며 전체 리소스 식별자를 사용합니다. 환경의 ‘기여자’ 역할 ID를 가져오려면 다음 Azure CLI 코드를 사용합니다.

az role definition list --name "Contributor"

중요

권한은 정책 정의 내에서 roleDefinitionIds를 정의하거나 관리 ID에 권한을 수동으로 할당할 때 가능한 가장 작은 세트로 제한되어야 합니다. 더 많은 모범 사례는 관리 ID 모범 사례 권장 사항을 참조하세요.

관리 ID 구성

각 Azure Policy 할당은 하나의 관리 ID와만 연결할 수 있습니다. 그러나 관리 ID에는 여러 역할이 할당될 수 있습니다. 구성은 두 단계로 이루어집니다. 먼저 시스템이 할당하거나 사용자가 할당한 관리 ID를 만든 다음, 필요한 역할을 부여합니다.

참고

포털을 통해 관리 ID를 만들 때 역할이 관리 ID에 자동으로 부여됩니다. 나중에 정책 정의에서 roleDefinitionIds를 편집하는 경우 포털에서도 새 권한을 수동으로 부여해야 합니다.

관리 ID 만들기

포털을 사용하여 할당을 만드는 경우 Azure Policy에서 시스템이 할당한 관리 ID를 생성하고 정책 정의의 roleDefinitionIds에 정의된 역할을 부여할 수 있습니다. 또는 동일한 역할 할당을 받는 사용자 할당 관리 ID를 지정할 수 있습니다.

Log Analytics 기여자 권한으로 미국 동부에서 시스템이 할당한 관리 ID를 만드는 정책 할당의 스크린샷

포털에서 시스템이 할당한 관리 ID를 설정하려면:

  1. 할당 만들기/편집 보기의 수정 탭에 있는 관리 ID 유형 아래에서 시스템이 할당한 관리 ID가 선택되어 있는지 확인합니다.

  2. 관리 ID를 배치할 위치를 지정합니다.

포털에서 사용자가 할당한 관리 ID를 설정하려면:

  1. 할당 만들기/편집 보기의 수정 탭에 있는 관리 ID 유형 아래에서 사용자가 할당한 관리 ID가 선택되어 있는지 확인합니다.

  2. 관리 ID가 호스트되는 범위를 지정합니다. 관리 ID의 범위는 할당 범위와 동일할 필요는 없지만 동일한 테넌트에 있어야 합니다.

  3. 기존 사용자 할당 ID에서 관리 ID를 선택합니다.

정의된 역할을 통해 관리 ID에 권한 부여

중요

필요한 수정 작업을 실행하는 데 필요한 권한이 관리 ID에 없는 경우 포털을 통해서만 자동으로 권한이 부여됩니다. 포털을 통해 관리 ID를 만드는 경우 이 단계를 건너뛸 수 있습니다.

다른 모든 방법의 경우 역할 추가를 통해 액세스 권한을 할당의 관리 ID에 수동으로 부여해야 합니다. 그렇지 않으면 수정 배포가 실패합니다.

수동 권한이 필요한 예제 시나리오는 다음과 같습니다.

  • Azure SDK(소프트웨어 개발 키트)를 통해 할당을 만든 경우
  • deployIfNotExists 또는 modify로 수정된 리소스가 정책 할당 범위를 벗어난 경우
  • 템플릿이 정책 할당 범위를 벗어난 리소스의 속성에 액세스하는 경우

포털을 사용하여 정의된 역할을 할당의 관리 ID에 부여하는 두 가지 방법은 액세스 제어(IAM)를 사용하거나, 정책 또는 이니셔티브 할당을 수정하고 저장을 선택하는 것입니다.

할당의 관리 ID에 역할을 추가하려면 다음 단계를 수행합니다.

  1. 모든 서비스를 선택한 후 정책을 검색하고 선택하여 Azure Portal에서 Azure Policy 서비스를 시작합니다.

  2. Azure Policy 페이지의 왼쪽에서 할당을 선택합니다.

  3. 관리 ID가 있는 할당을 찾아 이름을 선택합니다.

  4. 편집 페이지에서 할당 ID 속성을 찾습니다. 할당 ID는 다음과 같이 표시됩니다.

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    관리 ID의 이름은 할당 리소스 ID의 끝부분(이 예제에서는 2802056bfc094dfb95d4d7a5)입니다. 할당 리소스 ID의 이 부분을 복사합니다.

  5. 역할 정의를 수동으로 추가해야 하는 리소스 또는 리소스 상위 컨테이너(리소스 그룹, 구독, 관리 그룹)로 이동합니다.

  6. 리소스 페이지에서 액세스 제어(IAM) 링크를 선택한 다음 액세스 제어 페이지 위쪽의 + 역할 할당 추가를 선택합니다.

  7. 정책 정의에서 roleDefinitionId와 일치하는 적절한 역할을 선택합니다. 다음에 대한 액세스 할당: 은 기본값인 ‘Azure AD 사용자, 그룹 또는 애플리케이션’으로 설정해 둡니다. 선택 상자에 앞에서 찾은 할당 리소스 ID 부분을 붙여넣거나 입력합니다. 검색이 완료되면 이름이 같은 개체를 클릭하여 ID를 선택하고 저장을 클릭합니다.

수정 작업 만들기

모든 서비스를 선택한 후 정책을 검색하고 선택하여 Azure Portal에서 Azure Policy 서비스를 시작합니다.

모든 서비스에서 정책을 검색하는 스크린샷

1단계: 수정 작업 만들기 시작

포털을 통해 수정 작업을 만드는 세 가지 방법이 있습니다.

옵션 1: 수정 페이지에서 수정 작업 만들기

  1. Azure Policy 페이지의 왼쪽에서 수정을 선택합니다.

    정책 페이지의 수정 노드 스크린샷

  2. 모든 deployIfNotExistsmodify 정책 할당은 수정할 정책 탭에 표시됩니다. 비준수 리소스가 있는 리소스를 선택하여 새 수정 작업 페이지를 엽니다.

  3. 단계에 따라 수정 작업 세부 정보를 지정합니다.

옵션 2: 비준수 정책 할당에서 수정 작업 만들기

  1. Azure Policy 페이지의 왼쪽에서 규정 준수를 선택합니다.

  2. deployIfNotExists 또는 modify 효과가 포함된 비준수 정책 또는 이니셔티브 할당을 선택합니다.

  3. 페이지 위쪽의 수정 작업 만들기 단추를 선택하여 새 수정 작업 페이지를 엽니다.

  4. 단계에 따라 수정 작업 세부 정보를 지정합니다.

옵션 3: 정책 할당 중 수정 작업 만들기

할당할 정책 또는 이니셔티브 정의에 deployIfNotExists 또는 Modify 효과가 있는 경우 마법사의 수정 탭에서 정책 할당과 동시에 수정 작업을 만드는 수정 작업 만들기 옵션을 제공합니다.

참고

이는 수정 작업을 만들기 위한 가장 간소화된 방법이며 구독에 할당된 정책에 대해 지원됩니다. 관리 그룹에 할당된 정책의 경우 평가에서 리소스 규정 준수가 확인되면 옵션 1 또는 옵션 2를 사용하여 수정 작업을 만들어야 합니다.

  1. 포털의 할당 마법사에서 수정 탭으로 이동합니다. 수정 작업 만들기 확인란을 선택합니다.

  2. 수정 작업이 이니셔티브 할당에서 시작되는 경우 드롭다운에서 수정할 정책을 선택합니다.

  3. 관리 ID를 구성하고, 마법사의 나머지 부분을 작성합니다. 할당을 만들면 수정 작업이 만들어집니다.

2단계: 수정 작업 세부 정보 지정

이 단계는 옵션 1 또는 옵션 2를 사용하여 수정 작업 만들기를 시작하는 경우에만 적용됩니다.

  1. 수정 작업이 이니셔티브 할당에서 시작되는 경우 드롭다운에서 수정할 정책을 선택합니다. 하나의 deployIfNotExists 또는 modify 정책은 한 번에 하나의 수정 작업을 통해 수정할 수 있습니다.

  2. 필요에 따라 새 수정 작업 페이지에서 수정 설정을 수정합니다.

    • 실패 임계값 백분율 - 실패 백분율이 지정된 임계값을 초과하는 경우 수정 작업이 실패할지 여부를 지정하는 데 사용됩니다. 0~100 사이 숫자로 제공됩니다. 기본적으로 실패 임계값은 100%입니다.
    • 리소스 수 - 지정된 수정 작업에서 수정할 비준수 리소스 수를 결정합니다. 기본값은 500(이전 제한)입니다. 최대 수는 50,000개 리소스입니다.
    • 병렬 배포 - 동시에 수정할 리소스 수를 결정합니다. 허용되는 값은 한 번에 1~30개 리소스입니다. 기본값은 10입니다.

    참고

    수정 작업이 시작된 후에는 이러한 설정을 변경할 수 없습니다.

  3. 같은 페이지에서 범위 줄임표를 통해 정책이 할당된 자식 리소스를 선택하여(개별 리소스 개체까지 포함) 수정할 리소스를 필터링합니다. 또한 위치 드롭다운 목록을 사용하여 리소스를 추가로 필터링합니다.

    수정 노드 및 수정할 리소스의 그리드 스크린샷

  4. 수정을 선택하여 리소스를 필터링한 후에 수정 작업을 시작합니다. 정책 준수 페이지에서 수정 작업 탭이 열리고 작업 진행 상태가 표시됩니다. 수정 작업으로 만든 배포가 바로 시작됩니다.

    수정 작업 탭의 스크린샷 및 기존 수정 작업의 진행률입니다.

3단계: 수정 작업 진행률 추적

  1. 수정 페이지의 수정 작업 탭으로 이동합니다. 수정 작업을 클릭하여 사용된 필터링, 현재 상태 및 수정할 리소스 목록에 대한 세부 정보를 확인합니다.

  2. 수정 작업 ​​세부 정보 페이지에서 마우스 오른쪽 단추로 리소스를 클릭하여 수정 작업의 배포 또는 리소스를 확인합니다. 행 끝에서 관련 이벤트를 선택하여 오류 메시지와 같은 세부 정보를 확인합니다.

    작업 수정 탭에서 리소스에 대한 컨텍스트 메뉴의 스크린샷

수정 작업을 통해 배포된 리소스는 정책 할당 세부 정보 페이지의 배포된 리소스 탭에 추가됩니다.

다음 단계