Azure Policy를 사용한 오류 해결

정책 정의를 만들거나 SDK를 사용하거나 Kubernetes에 대한 Azure Policy 추가 기능을 설정하는 경우 오류가 발생할 수 있습니다. 이 문서에서는 발생 가능한 다양한 일반적 오류에 대해 설명하고 해당 오류를 해결하는 방법을 설명합니다.

오류 세부 정보 찾기

오류 세부 정보의 위치는 작업 중인 Azure Policy의 양상에 따라 다릅니다.

  • 사용자 지정 정책을 사용하여 작업하는 경우 Azure Portal로 이동하여 스키마에 대한 린팅 피드백을 얻거나 결과로 도출된 준수 데이터를 검토하여 리소스 평가 방법을 확인합니다.
  • 다양한 SDK 중 하나를 사용하여 작업하는 경우 SDK는 함수가 실패한 이유에 대한 세부 정보를 제공합니다.
  • Kubernetes에 대한 추가 기능을 사용하여 작업하는 경우 클러스터의 로깅을 시작합니다.

일반 오류

시나리오: 별칭을 찾을 수 없음

문제

정책 정의에 잘못되었거나 존재하지 않는 별칭이 사용되었습니다. Azure Policy는 별칭을 사용하여 Azure Resource Manager 속성에 매핑합니다.

원인

정책 정의에 잘못되었거나 존재하지 않는 별칭이 사용되었습니다.

해결

먼저 Resource Manager 속성에 별칭이 있는지 확인합니다. 사용 가능한 별칭을 조회하려면 Visual Studio Code에 대한 Azure Policy 확장 또는 SDK로 이동합니다. Resource Manager 속성에 대한 별칭이 존재하지 않으면 지원 티켓을 만듭니다.

시나리오: 평가 세부 정보가 최신 상태가 아님

문제

리소스가 시작 안 됨 상태이거나 준수 세부 정보가 최신이 아닙니다.

원인

새 정책 또는 이니셔티브 할당을 적용하는 데 약 5분이 걸립니다. 기존 할당 범위 내에서 새로운 리소스 또는 업데이트된 리소스가 사용할 수 있게 되는 데에는 약 15분이 소요됩니다. 표준 준수 검사는 24시간마다 수행됩니다. 자세한 내용은 평가 트리거를 참조하세요.

해결

먼저 평가가 끝나고 Azure Portal 또는 SDK에서 준수 결과를 사용할 수 있게 될 때까지 적정 시간 기다립니다. Azure PowerShell 또는 REST API를 사용하여 새 평가 검사를 시작하려면 온디맨드형 평가 검사를 참조하세요.

시나리오: 예상대로 준수하지 않음

문제

리소스가 리소스에 대해 예상되는 준수 또는 미준수 평가 상태에 있지 않습니다.

원인

리소스가 정책 할당에 대한 올바른 범위에 속하지 않거나 정책 정의가 의도한 대로 작동하지 않습니다.

해결

정책 정의 문제를 해결하려면 다음을 수행합니다.

  1. 먼저 평가가 끝나고 Azure Portal 또는 SDK에서 준수 결과를 사용할 수 있게 될 때까지 적정 시간을 기다립니다.

  2. Azure PowerShell 또는 REST API를 사용하여 새 평가 검사를 시작하려면 온디맨드형 평가 검사를 참조하세요.

  3. 할당 매개 변수와 할당 범위가 올바르게 설정되어 있는지 확인하세요.

  4. 정책 정의 모드를 확인합니다.

    • 모든 리소스 종류에 대한 모드는 all이어야 합니다.
    • 정책 정의가 태그나 위치를 확인하는 경우 모드는 indexed이어야 합니다.
  5. 리소스의 범위가 제외되거나면제되지 않았는지 확인합니다.

  6. 정책 할당에 대한 준수에서 0/0 리소스를 표시하는 경우 할당 범위 내에서 적용 가능한 리소스가 결정되지 않은 것입니다. 정책 정의와 할당 범위를 모두 확인합니다.

  7. 준수될 것이라 예상되는 리소스가 미준수 리소스로 나타나는 경우 미준수 이유 확인을 참조하세요. 정의를 평가된 속성 값과 비교하면 리소스가 미준수로 나타나는 이유를 알 수 있습니다.

    • 대상 값이 잘못된 경우 정책 정의를 수정하세요.
    • 현재 값이 잘못된 경우 resources.azure.com을 통해 리소스 페이로드의 유효성을 검사합니다.
  8. RegEx 문자열 매개 변수(예: Microsoft.Kubernetes.Data 및 기본 제공 정의 ‘컨테이너 이미지는 신뢰할 수 있는 레지스트리에서만 배포되어야 함’)를 지원하는 리소스 공급자 모드 정의의 경우 RegEx 문자열 매개 변수가 올바른지 확인합니다.

  9. 다른 일반적인 문제 및 솔루션에 대해서는 문제 해결: 예상대로 적용되지 않음을 참조하세요.

중복되는 사용자 지정 기본 제공 정책 정의 또는 사용자 지정 정의에 문제가 계속 발생하는 경우 정책 작성에서 지원 티켓을 만들어 문제를 올바르게 라우팅합니다.

시나리오: 예상대로 적용되지 않음

문제

Azure Policy가 작업을 수행할 것으로 예상했던 리소스가 작업을 수행하지 않으며 Azure 활동 로그에 항목이 없습니다.

원인

사용 안 함의 enforcementMode 설정에 대해 정책 할당이 구성되어 있지 않습니다. enforcementMode가 사용하지 않도록 설정되어 있는 동안 정책 효과는 적용되지 않으며 활동 로그에도 항목이 없습니다.

해결

다음을 수행하여 정책 할당 적용 문제를 해결합니다.

  1. 먼저 평가가 끝나고 Azure Portal 또는 SDK에서 준수 결과를 사용할 수 있게 될 때까지 적정 시간을 기다립니다.

  2. Azure PowerShell 또는 REST API를 사용하여 새 평가 검사를 시작하려면 온디맨드형 평가 검사를 참조하세요.

  3. 할당 매개 변수 및 할당 범위를 올바르게 설정하고 enforcementMode사용하도록 설정했는지 확인하세요.

  4. 정책 정의 모드를 확인합니다.

    • 모든 리소스 종류에 대한 모드는 all이어야 합니다.
    • 정책 정의가 태그나 위치를 확인하는 경우 모드는 indexed이어야 합니다.
  5. 리소스의 범위가 제외되거나면제되지 않았는지 확인합니다.

  6. 리소스 페이로드가 정책 논리와 일치하는지 확인합니다. HAR(HTTP Archive) 추적을 캡처하거나 ARM 템플릿(Azure Resource Manager 템플릿) 속성을 검토하여 해당 작업을 수행할 수 있습니다.

  7. 다른 일반적인 문제 및 솔루션에 대해서는 문제 해결: 예상대로 준수하지 않음을 참조하세요.

중복되는 사용자 지정 기본 제공 정책 정의 또는 사용자 지정 정의에 문제가 계속 발생하는 경우 정책 작성에서 지원 티켓을 만들어 문제를 올바르게 라우팅합니다.

시나리오: Azure Policy에 의해 거부됨

문제

리소스 만들기 또는 업데이트가 거부되었습니다.

원인

새 리소스 또는 업데이트된 리소스 범위에 대한 정책 할당이 거부 효과가 있는 정책 정의의 기준을 충족합니다. 해당 정의를 충족하는 리소스는 만들거나 업데이트할 수 없습니다.

해결

거부 정책 할당의 오류 메시지에는 정책 정의 및 정책 할당 ID가 포함됩니다. 메시지의 오류 정보가 누락된 경우에도 활동 로그에서 해당 정보를 사용할 수 있습니다. 해당 정보를 사용하여 리소스 제한을 이해하고 요청에서 리소스 속성을 허용되는 값과 일치하도록 조정하는 방법에 대한 세부 정보를 확인하세요.

시나리오: 정의는 여러 리소스 종류를 대상으로 함

문제

여러 리소스 종류를 포함하는 정책 정의는 생성 또는 업데이트 중에 다음 오류로 인해 유효성 검사에 실패합니다.

The policy definition '{0}' targets multiple resource types, but the policy rule is authored in a way that makes the policy not applicable to the target resource types '{1}'.

원인

정책 정의 규칙에 대상 리소스 종류에 의해 평가되지 않는 하나 이상의 조건이 있습니다.

해결

별칭을 사용하는 경우 그 앞에 형식 조건을 추가하여 별칭이 속한 리소스 종류에 대해서만 별칭이 평가되는지 확인합니다. 대안은 정책 정의를 여러 정의로 분할하여 여러 리소스 종류를 대상으로 지정하지 않도록 하는 것입니다.

시나리오: 구독 제한 초과

문제

정책 할당에 대한 규정 준수를 검색할 때 Azure Portal의 규정 준수 페이지에 오류 메시지가 표시됩니다.

원인

요청에서 선택한 범위 아래의 구독 수가 5,000개 구독 제한을 초과했습니다. 규정 준수 결과가 부분적으로 표시될 수 있습니다.

해결

자식 구독 수가 적은 보다 세부적인 범위를 선택하여 전체 결과를 확인합니다.

템플릿 오류

시나리오: 정책 지원 함수가 템플릿에서 처리됨

문제

Azure Policy는 정책 정의에서만 사용할 수 있는 여러 ARM 템플릿 함수 및 함수를 지원합니다. Resource Manager는 해당 기능을 정책 정의의 일부가 아닌 배포의 일부로서 처리합니다.

원인

parameter() 또는 resourceGroup()과 같은 지원되는 함수를 사용하면 정책 정의 및 Azure Policy 엔진에서 처리하는 함수를 허용하는 대신 배포 시간에 함수의 처리된 결과가 발생합니다.

해결

함수를 정책 정의의 일부로 전달하려면 [을 사용하여 전체 문자열을 이스케이프 처리하여 속성이 [[resourceGroup().tags.myTag]와 같이 표시되도록 합니다. 이스케이프 문자를 사용하면 Resource Manager가 템플릿을 처리할 때 값을 문자열로 취급합니다. 그런 다음 Azure Policy는 함수를 정책 정의에 배치하여 예상대로 동적이 될 수 있도록 합니다. 자세한 내용은 Azure Resource Manager 템플릿의 구문 및 식을 참조하세요.

Kubernetes 설치 오류에 대한 추가 기능

시나리오: 암호 오류로 인해 Helm 차트를 사용하여 설치하지 못함

문제

helm install azure-policy-addon 명령이 실패하고 다음 오류 중 하나를 반환합니다.

  • !: event not found
  • Error: failed parsing --set data: key "<key>" has no value (cannot end with ,)

원인

생성된 암호에는 Helm 차트가 분할 중인 쉼표(,)가 포함되어 있습니다.

해결

helm install azure-policy-addon을 실행할 때 암호 값에서 쉼표(,)를 백슬래시(\)로 이스케이프 처리합니다.

시나리오: 이름이 이미 존재하여 Helm 차트를 사용하여 설치하지 못함

문제

helm install azure-policy-addon 명령이 실패하고 다음과 같은 오류를 반환합니다.

  • Error: cannot re-use a name that is still in use

원인

이름이 azure-policy-addon인 Helm 차트가 이미 설치되었거나 부분적으로 설치되었습니다.

해결

지침에 따라 Kubernetes 추가 기능에 대한 Azure Policy를 제거한 후 helm install azure-policy-addon 명령을 다시 실행합니다.

시나리오: Azure 가상 머신 사용자 할당 ID가 시스템 할당 관리 ID로 대체됨

문제

머신 내부에서 감사 설정에 게스트 구성 정책 이니셔티브를 할당한 후에는 머신에 할당된 사용자 할당 관리 ID가 더 이상 할당되지 않습니다. 시스템 할당 관리 ID만 할당됩니다.

원인

게스트 구성 DeployIfNotExists 정의에 이전에 사용되었던 적이 있는 정책 정의는 시스템 할당 ID가 머신에 할당되었음을 확인하는 동시에 사용자 할당 ID 할당을 제거합니다.

해결

이전에 이 문제를 일으킨 정의는 [사용되지 않음]으로 표시되며, 사용자 할당 관리 ID를 제거하지 않고 필수 조건을 관리하는 정책 정의로 대체됩니다. 수동 단계가 필요합니다. [사용되지 않음]으로 표시되는 기존 정책 할당을 삭제하고, 원래와 동일한 이름을 사용하는 업데이트된 필수 조건 정책 이니셔티브 및 정책 정의로 대체합니다.

자세한 내용은 블로그 게시물 게스트 구성 감사 정책에 대해 릴리스된 중요 변경 내용을 참조하세요.

Kubernetes 일반 오류에 대한 추가 기능

시나리오: 송신 제한으로 인해 추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 없음

문제

추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 없으며 다음 오류 중 하나가 반환됩니다.

  • failed to fetch token, service not reachable
  • Error getting file "Get https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-allowed-images/template.yaml: dial tcp 151.101.228.133.443: connect: connection refused

원인

해당 문제는 클러스터 송신이 잠겨 있을 경우 발생합니다.

해결

다음 문서에서 설명하는 도메인 및 포트가 열려 있는지 확인합니다.

시나리오: add-pod-identity 구성으로 인해 추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 없음

문제

추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 없으며 다음 오류 중 하나가 반환됩니다.

  • azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https://gov-prod-policy-data.trafficmanager.net/checkDataPolicyCompliance?api-version=2019-01-01-preview: StatusCode=404
  • adal: Refresh request failed. Status Code = '404'. Response body: getting assigned identities for pod kube-system/azure-policy-8c785548f-r882p in CREATED state failed after 16 attempts, retry duration [5]s, error: <nil>

원인

해당 오류는 클러스터에 aad-pod-identity가 설치되어 있고 add-pod-identity에서 kube-system Pod가 제외되지 않은 경우 발생합니다.

add-pod-identity 구성 요소 NMI(Node Managed Identity) Pod는 Azure 인스턴스 메타데이터 엔드포인트에 대한 호출을 가로채는 노드의 iptables를 수정합니다. 해당 설정은 Pod에서 add-pod-identity를 사용하지 않는 경우에도 메타데이터 엔드포인트에 대한 모든 요청이 NMI에 의해 차단됨을 의미합니다. AzurePodIdentityException CRD(CustomResourceDefinition)은 add-pod-identity를 알리도록 구성하여 CRD에 정의된 레이블과 일치하는 Pod에서 유래하는 메타데이터 엔드포인트에 대한 모든 요청이 NMI를 처리하지 않고 프록시되도록 할 수 있습니다.

해결

AzurePodIdentityException CRD를 구성하여 add-pod-identitykube 시스템 네임스페이스에서 kubernetes.azure.com/managedby: aks 레이블이 있는 시스템 Pod를 제외합니다.

자세한 내용은 특정 Pod/애플리케이션에 대한 Azure AD(Azure Active Directory) Pod ID 사용 안 함을 참조하세요.

예외를 구성하려면 다음 예제를 따르세요.

apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzurePodIdentityException
metadata:
  name: mic-exception
  namespace: default
spec:
  podLabels:
    app: mic
    component: mic
---
apiVersion: "aadpodidentity.k8s.io/v1"
kind: AzurePodIdentityException
metadata:
  name: aks-addon-exception
  namespace: kube-system
spec:
  podLabels:
    kubernetes.azure.com/managedby: aks

시나리오: 리소스 공급자가 등록되지 않음

문제

추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 있지만 추가 기능 로그에서 다음 오류 중 하나를 표시합니다.

  • The resource provider 'Microsoft.PolicyInsights' is not registered in subscription '{subId}'. See https://aka.ms/policy-register-subscription for how to register subscriptions.

  • policyinsightsdataplane.BaseClient#CheckDataPolicyCompliance: Failure responding to request: StatusCode=500 -- Original Error: autorest/azure: Service returned an error. Status=500 Code="InternalServerError" Message="Encountered an internal server error.

원인

‘Microsoft.PolicyInsights’ 리소스 공급자가 등록되지 않았습니다. 정책 정의를 가져오고 준수 데이터를 반환하려면 추가 기능에 리소스 공급자가 등록되어 있어야 합니다.

해결

클러스터 구독에서 ‘Microsoft.PolicyInsights’ 리소스 공급자를 등록합니다. 자세한 내용은 리소스 공급자 등록을 참조하세요.

시나리오: 구독을 사용하지 않도록 설정되어 있음

문제

추가 기능이 Azure Policy 서비스 엔드포인트에 도달할 수 있지만 다음과 같은 오류를 표시합니다.

The subscription '{subId}' has been disabled for azure data-plane policy. Please contact support.

원인

해당 오류는 구독이 문제를 일으키는 것으로 확인되어 기능 플래그 Microsoft.PolicyInsights/DataPlaneBlocked가 추가된 것으로 인해 구독이 차단되었음을 의미합니다.

해결

해당 문제를 조사하고 해결하려면 기능 팀에 문의하세요.

시나리오: ‘게스트 구성’ 범주의 정의는 Azure Portal에서 복제할 수 없습니다.

문제

정책 정의에 대한 Azure Portal 페이지에서 사용자 지정 정책 정의를 만들려고 시도할 때 ‘중복 정의’ 단추를 선택합니다. 정책을 할당하면 게스트 구성 할당 리소스가 없기 때문에 컴퓨터가 비규격 상태임을 알게 됩니다.

원인

게스트 구성은 게스트 구성 할당 리소스를 만들 때 정책 정의에 추가된 사용자 지정 메타데이터를 사용합니다. Azure Portal의 ‘중복 정의’ 활동에서는 사용자 지정 메타데이터를 복사하지 않습니다.

해결

포털을 사용하는 대신 정책 인사이트 API를 사용하여 정책 정의를 복제합니다. 다음 PowerShell 샘플에서는 옵션을 제공합니다.

# duplicates the built-in policy which audits Windows machines for pending reboots
$def = Get-AzPolicyDefinition -id '/providers/Microsoft.Authorization/policyDefinitions/4221adbc-5c0f-474f-88b7-037a99e6114c' | % Properties
New-AzPolicyDefinition -name (new-guid).guid -DisplayName "$($def.DisplayName) (Copy)" -Description $def.Description -Metadata ($def.Metadata | convertto-json) -Parameter ($def.Parameters | convertto-json) -Policy ($def.PolicyRule | convertto-json -depth 15)

시나리오: 거부 정책이 할당되었음에도 연결에 실패하면 Kubernetes 리소스가 만들어집니다.

문제

Kubernetes 클러스터 연결에 실패하는 경우 Gatekeeper의 장애 시 열림(fail-open) 동작으로 인해 새로 만들거나 업데이트된 리소스에 대한 평가가 무시될 수 있습니다.

원인

GK 장애 시 열림 모델은 의도적으로 커뮤니티 피드백을 기반으로 합니다. Gatekeeper 설명서는 여기(https://open-policy-agent.github.io/gatekeeper/website/docs/failing-closed#considerations)에 나와 있는 이유로 확장됩니다.

해결

위의 이벤트에서 kube-apiserver가 제공하는 허용 웹후크 메트릭을 통해 오류 사례를 모니터링할 수 있습니다. 또한 만들 때 평가가 무시되면 개체가 만들어지더라도 Azure Policy 규정 준수에 대해 고객에게 플래그로 비준수 상태인 것으로 보고됩니다.

위와 관계없이 이러한 시나리오에서 Azure 정책은 클러스터에서 마지막으로 알려진 정책을 유지하고 가드 레일을 그대로 유지합니다.

다음 단계

해당 문서에 나열되어 있지 않거나 해결할 수 없는 문제의 경우 다음 채널 중 하나를 방문하여 지원을 받으세요.

  • Microsoft Q&A를 통해 전문가의 답변을 받으세요.
  • @AzureSupport에 연결하세요. Twitter의 해당 공식 Microsoft Azure 리소스는 Azure 커뮤니티를 올바른 답변, 지원 및 전문가에게 연결하여 고객 환경을 개선하는 데 도움이 됩니다.
  • 여전히 도움이 필요한 경우 Azure 지원 사이트로 이동하여 지원 요청 제출을 선택합니다.