설명
이미지를 가져오기만 하는 워크로드에 게시 권한까지 부여하면 침해된 주체가 이미지를 업로드하거나 태그를 변경할 수 있습니다. 이미지 소비, 게시와 레지스트리 관리에 필요한 권한을 구분해야 합니다. AcrPush는 이미지 읽기·쓰기를 허용하지만 레지스트리 구성 관리 권한을 제공하지는 않습니다.
잠재적 영향
- 불필요한 쓰기 권한으로 이미지나 태그가 변경되어 변조된 이미지가 배포될 수 있습니다.
- 침해된 워크로드가 다른 배포에 영향을 미칠 수 있습니다.
해결 방법
이미지 가져오기만 필요한 주체에는 레지스트리의 권한 모드에 맞는 읽기 역할을 부여하세요. RBAC Registry Permissions 모드에서는 AcrPull을, ABAC를 사용하는 모드에서는 필요한 저장소로 범위를 제한한 Container Registry Repository Reader를 검토하세요. 게시·관리 주체를 분리하고 다른 역할 할당을 포함한 실제 권한을 확인하세요.
예시
RBAC Registry Permissions 모드에서 이미지 소비용 kubelet ID의 역할을 비교합니다.
변경 전
hcl
resource "azurerm_role_assignment" "workload" {
principal_id = azurerm_kubernetes_cluster.example.kubelet_identity[0].object_id
role_definition_name = "AcrPush"
scope = azurerm_container_registry.example.id
}
AcrPush는 이미지 가져오기와 게시를 모두 허용합니다. 가져오기만 필요한 워크로드에는 쓰기 권한이 불필요합니다.
변경 후
hcl
resource "azurerm_role_assignment" "workload" {
principal_id = azurerm_kubernetes_cluster.example.kubelet_identity[0].object_id
role_definition_name = "AcrPull"
scope = azurerm_container_registry.example.id
}
이 역할 할당은 AcrPull로 이미지 읽기를 허용합니다. 별도의 역할이나 자격 증명으로 쓰기 권한이 남아 있지 않은지 확인하세요.