다음을 통해 공유


Azure Policy를 사용하여 Azure 컨테이너 레지스트리의 준수 감사

Azure Policy는 정책 정의를 만들고, 할당하고, 관리하는 데 사용하는 Azure의 서비스입니다. 정책 정의는 리소스에 대해 다양한 규칙과 효과를 적용하여 리소스를 회사 표준 및 서비스 수준 계약을 준수하는 상태로 유지합니다.

이 문서에서는 Azure Container Registry에 대한 기본 제공 정책 정의를 소개합니다. 해당 정의를 사용하여 새로운 레지스트리 및 기존 레지스트리를 준수하도록 감사합니다.

Azure Policy 이용 요금은 없습니다.

기본 제공 정책 정의

다음 기본 제공 정책 정의는 Azure Container Registry에만 적용됩니다.

이름
(Azure Portal)
설명 효과 버전
(GitHub)
[미리 보기]: Container Registry는 영역 중복이어야 합니다. Container Registry는 영역 중복 여부에 관계없이 구성될 수 있습니다. Container Registry의 zoneRedundancy 속성이 'Disabled'로 설정되면 레지스트리가 영역 중복이 아니라는 의미입니다. 이 정책을 적용하면 Container Registry가 영역 복원력에 맞게 적절하게 구성되어 영역 중단 시 가동 중지 시간의 위험을 줄이는 데 도움이 됩니다. 감사, 거부, 사용 안 함 1.0.0 - 미리 보기
[미리 보기]: Container Registry는 가상 네트워크 서비스 엔드포인트를 사용해야 함 이 정책은 가상 네트워크 서비스 엔드포인트를 사용하도록 구성되지 않은 모든 Container Registry를 감사합니다. 감사, 사용 안 함 1.0.0 - 미리 보기
Azure 레지스트리 컨테이너 이미지의 취약성이 해결되어야 합니다(Microsoft Defender 취약성 관리 제공). 컨테이너 이미지 취약성 평가는 레지스트리에서 CVE(일반적으로 알려진 취약성)을 검사하고 각 이미지에 대한 자세한 취약성 보고서를 제공합니다. 취약성을 해결하면 보안 태세가 크게 향상되어 배포 전에 이미지를 안전하게 사용할 수 있습니다. AuditIfNotExists, 사용 안 함 1.0.1
익명 인증을 사용하지 않도록 컨테이너 레지스트리 구성 인증되지 않은 사용자가 데이터에 액세스할 수 없도록 레지스트리에 대한 익명 끌어오기를 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 끌어오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 수정, 사용 안 함 1.0.0
ARM 대상 토큰 인증을 비활성화하도록 컨테이너 레지스트리 구성 레지스트리에 대한 인증을 위해 Azure Active Directory ARM 대상 그룹 토큰을 사용하지 않도록 설정합니다. 인증에는 ACR(Azure Container Registry) 대상 그룹 토큰만 사용됩니다. 이렇게 하면 레지스트리에서 사용할 토큰만 인증에 사용할 수 있습니다. ARM 대상 그룹 토큰을 사용하지 않도록 설정해도 관리 사용자 또는 범위가 지정된 액세스 토큰의 인증에는 영향을 주지 않습니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 수정, 사용 안 함 1.0.0
로컬 관리자 계정을 사용하지 않도록 컨테이너 레지스트리 구성 로컬 관리자가 액세스할 수 없도록 레지스트리에 대한 관리자 계정을 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 가져오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 수정, 사용 안 함 1.0.1
공용 네트워크 액세스를 사용하지 않도록 컨테이너 레지스트리 구성 공용 인터넷을 통해 액세스할 수 없도록 Container Registry 리소스에 대한 공용 네트워크 액세스를 사용하지 않도록 설정합니다. 이를 통해 데이터 유출 위험을 줄일 수 있습니다. https://aka.ms/acr/portal/public-networkhttps://aka.ms/acr/private-link에서 자세히 알아보세요. 수정, 사용 안 함 1.0.0
리포지토리 범위 액세스 토큰을 사용하지 않도록 컨테이너 레지스트리 구성 리포지토리가 토큰으로 액세스할 수 없도록 레지스트리에 대한 리포지토리 범위 액세스 토큰을 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 끌어오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 수정, 사용 안 함 1.0.0
프라이빗 엔드포인트를 사용하여 컨테이너 레지스트리 구성 프라이빗 엔드포인트는 원본 또는 대상에서 공용 IP 주소 없이 Azure 서비스에 가상 네트워크를 연결합니다. 프라이빗 엔드포인트를 프리미엄 컨테이너 레지스트리 리소스에 매핑하면 데이터 유출 위험을 줄일 수 있습니다. https://aka.ms/privateendpointshttps://aka.ms/acr/private-link에서 자세히 알아보세요. DeployIfNotExists, 사용 안 함 1.0.0
컨테이너 레지스트리는 고객 관리형 키를 사용하여 암호화해야 함 고객 관리형 키를 사용하여 레지스트리 콘텐츠의 미사용 데이터 암호화를 관리합니다. 기본적으로 저장 데이터는 서비스 관리형 키를 사용하여 암호화되지만, 일반적으로 규정 준수 표준을 충족하려면 고객 관리형 키가 필요합니다. 고객 관리형 키를 사용하면 사용자가 만들고 소유한 Azure Key Vault 키를 사용하여 데이터를 암호화할 수 있습니다. 순환 및 관리를 포함하여 키의 수명 주기를 고객이 모두 제어하고 책임져야 합니다. https://aka.ms/acr/CMK에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.1.2
컨테이너 레지스트리는 익명 인증을 사용하지 않도록 설정해야 함 인증되지 않은 사용자가 데이터에 액세스할 수 없도록 레지스트리에 대한 익명 끌어오기를 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 끌어오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리에는 ARM 대상 토큰 인증이 비활성화되어 있어야 함 레지스트리에 대한 인증을 위해 Azure Active Directory ARM 대상 그룹 토큰을 사용하지 않도록 설정합니다. 인증에는 ACR(Azure Container Registry) 대상 그룹 토큰만 사용됩니다. 이렇게 하면 레지스트리에서 사용할 토큰만 인증에 사용할 수 있습니다. ARM 대상 그룹 토큰을 사용하지 않도록 설정해도 관리 사용자 또는 범위가 지정된 액세스 토큰의 인증에는 영향을 주지 않습니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리에는 내보내기가 비활성화되어 이어야 함 내보내기를 비활성화하면 레지스트리의 데이터가 데이터 평면('docker pull')을 통해서만 액세스되도록 하여 보안이 향상됩니다. 데이터는 'acr import' 또는 'acr transfer'를 통해 레지스트리 밖으로 이동할 수 없습니다. 내보내기를 비활성화하려면 공용 네트워크 액세스를 비활성화해야 합니다. https://aka.ms/acr/export-policy에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리는 로컬 관리자 계정을 사용하지 않도록 설정해야 함 로컬 관리자가 액세스할 수 없도록 레지스트리에 대한 관리자 계정을 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 가져오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.1
컨테이너 레지스트리는 리포지토리 범위 액세스 토큰을 사용하지 않도록 설정해야 함 리포지토리가 토큰으로 액세스할 수 없도록 레지스트리에 대한 리포지토리 범위 액세스 토큰을 사용하지 않도록 설정합니다. 관리 사용자, 리포지토리 범위 액세스 토큰, 익명 끌어오기 등의 로컬 인증 방법을 사용하지 않도록 설정하면 컨테이너 레지스트리에서는 인증을 위해 Azure Active Directory ID만 요구하므로 보안이 향상됩니다. https://aka.ms/acr/authentication에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리에 Private Link를 지원하는 SKU가 있어야 함 Azure Private Link를 통해 원본 또는 대상의 공용 IP 주소가 없어도 Azure 서비스에 가상 네트워크를 연결할 수 있습니다. 프라이빗 링크 플랫폼은 Azure 백본 네트워크를 통해 소비자와 서비스 간의 연결을 처리합니다. 전체 서비스 대신 프라이빗 엔드포인트를 컨테이너 레지스트리에 매핑하면 데이터 유출 위험이 줄어듭니다. https://aka.ms/acr/private-link에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리는 무제한 네트워크 액세스를 허용하지 않아야 함 기본적으로 Azure Container Registry는 모든 네트워크에 있는 호스트로부터의 인터넷 연결을 수락합니다. 잠재적인 위협으로부터 레지스트리를 보호하려면 특정 프라이빗 엔드포인트, 공용 IP 주소 또는 주소 범위에서만 액세스를 허용합니다. 레지스트리에 네트워크 규칙이 구성되어 있지 않으면 비정상 리소스에 나타납니다. Container Registry 네트워크 규칙에 대한 자세한 내용은 https://aka.ms/acr/privatelink, https://aka.ms/acr/portal/public-networkhttps://aka.ms/acr/vnet을 참조하세요. 감사, 거부, 사용 안 함 2.0.0
컨테이너 레지스트리는 캐시 규칙 만들기를 방지해야 합니다. 캐시 끌어오기를 통한 끌어오기를 방지하려면 Azure Container Registry에 대한 캐시 규칙 만들기를 사용하지 않도록 설정합니다. https://aka.ms/acr/cache에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0
컨테이너 레지스트리는 프라이빗 링크를 사용해야 함 Azure Private Link를 통해 원본 또는 대상의 공용 IP 주소가 없어도 Azure 서비스에 가상 네트워크를 연결할 수 있습니다. 프라이빗 링크 플랫폼은 Azure 백본 네트워크를 통해 소비자와 서비스 간의 연결을 처리합니다. 전체 서비스 대신 프라이빗 엔드포인트를 컨테이너 레지스트리에 매핑하면 데이터 유출 위험으로부터 보호받을 수 있습니다. https://aka.ms/acr/private-link에서 자세히 알아보세요. 감사, 사용 안 함 1.0.1
컨테이너 레지스트리(microsoft.containerregistry/registries)에 대해 범주 그룹별로 Event Hub에 대한 로깅을 사용하도록 설정 리소스에서 발생하는 작업 및 이벤트를 추적하고 발생하는 변경 내용에 대한 표시 유형과 인사이트를 제공하려면 리소스 로그를 사용하도록 설정해야 합니다. 이 정책은 범주 그룹을 사용하여 로그를 컨테이너 레지스트리(microsoft.containerregistry/registries)에 대한 Event Hub로 라우팅하는 진단 설정을 배포합니다. DeployIfNotExists, AuditIfNotExists, Disabled 1.2.0
컨테이너 레지스트리(microsoft.containerregistry/registries)에 대해 범주 그룹별로 Log Analytics에 대한 로깅을 사용하도록 설정 리소스에서 발생하는 작업 및 이벤트를 추적하고 발생하는 변경 내용에 대한 표시 유형과 인사이트를 제공하려면 리소스 로그를 사용하도록 설정해야 합니다. 이 정책은 범주 그룹을 사용하여 로그를 컨테이너 레지스트리(microsoft.containerregistry/registries)에 대한 Log Analytics 작업 영역으로 라우팅하는 진단 설정을 배포합니다. DeployIfNotExists, AuditIfNotExists, Disabled 1.1.0
컨테이너 레지스트리(microsoft.containerregistry/registries)에 대해 범주 그룹별로 Storage에 대한 로깅을 사용하도록 설정 리소스에서 발생하는 작업 및 이벤트를 추적하고 발생하는 변경 내용에 대한 표시 유형과 인사이트를 제공하려면 리소스 로그를 사용하도록 설정해야 합니다. 이 정책은 범주 그룹을 사용하여 로그를 컨테이너 레지스트리(microsoft.containerregistry/registries)에 대한 스토리지 계정으로 라우팅하는 진단 설정을 배포합니다. DeployIfNotExists, AuditIfNotExists, Disabled 1.1.0
컨테이너 레지스트리에 대해 공용 네트워크 액세스를 사용하지 않도록 설정해야 함 공용 네트워크 액세스를 사용하지 않도록 설정하면 컨테이너 레지스트리가 공용 인터넷에 노출되지 않도록 하여 보안이 향상됩니다. 프라이빗 엔드포인트를 만들면 컨테이너 레지스트리 리소스의 노출을 제한할 수 있습니다. https://aka.ms/acr/portal/public-networkhttps://aka.ms/acr/private-link에서 자세히 알아보세요. 감사, 거부, 사용 안 함 1.0.0

정책 할당 만들기

  • Azure Portal, Azure CLI, Resource Manager 템플릿 또는 Azure Policy SDK를 사용하여 정책 할당을 만듭니다.
  • 정책 할당 범위를 리소스 그룹, 구독 또는 Azure 관리 그룹으로 지정합니다. 컨테이너 레지스트리 정책 할당은 범위 내의 기존 컨테이너 레지스트리 및 새 컨테이너 레지스트리에 적용됩니다.
  • 언제든지 정책 적용을 사용하거나 사용하지 않도록 설정할 수 있습니다.

참고 항목

정책 할당을 만들거나 업데이트한 후 할당에서 정의된 범위의 리소스를 평가하는 데 약간의 시간이 걸립니다. 정책 평가 트리거에 대한 정보를 참조하세요.

정책 준수 검토

Azure Portal, Azure 명령줄 도구 또는 Azure Policy SDK를 사용하여 정책 할당에서 생성된 준수 정보에 액세스합니다. 자세한 내용은 Azure 리소스의 준수 데이터 가져오기를 참조하세요.

리소스가 규정 비준수인 경우 여러 가지 원인이 있을 수 있습니다. 이유를 확인하거나 원인이 된 변경을 찾으려면 비준수 확인을 참조하세요.

포털의 정책 준수:

  1. 모든 서비스를 선택하고 정책을 검색합니다.

  2. 규정 준수를 선택합니다.

  3. 필터를 사용하여 준수 상태를 제한하거나 정책을 검색합니다.

    포털의 정책 준수

  4. 정책을 선택하여 준수 세부 정보 및 이벤트 집계를 검토합니다. 필요한 경우 리소스 준수에 대한 특정 레지스트리를 선택합니다.

Azure CLI의 정책 준수

Azure CLI를 사용하여 준수 데이터를 가져올 수도 있습니다. 예를 들어 CLI에서 az policy assignment list 명령을 사용하여 적용된 Azure Container Registry 정책의 정책 ID를 가져옵니다.

az policy assignment list --query "[?contains(displayName,'Container Registries')].{name:displayName, ID:id}" --output table

샘플 출력:

Name                                                                                   ID
-------------------------------------------------------------------------------------  --------------------------------------------------------------------------------------------------------------------------------
Container Registries should not allow unrestricted network access           /subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/b4faf132dc344b84ba68a441
Container Registries should be encrypted with a Customer-Managed Key (CMK)  /subscriptions/<subscriptionID>/providers/Microsoft.Authorization/policyAssignments/cce1ed4f38a147ad994ab60a

그런 다음 az policy state list를 실행하여 특정 정책 ID의 모든 리소스에 대해 JSON 형식의 준수 상태를 반환합니다.

az policy state list \
  --resource <policyID>

또는 az policy state list를 실행하여 myregistry와 같은 특정 레지스트리 리소스의 JSON 형식 준수 상태를 반환합니다.

az policy state list \
 --resource myregistry \
 --namespace Microsoft.ContainerRegistry \
 --resource-type registries \
 --resource-group myresourcegroup

다음 단계