설명
클라이언트 인증서로 호출자를 확인해야 하는 Function App이 인증서를 요구하지 않으면 이 인증 절차 없이 요청을 받을 수 있습니다. 모든 함수에 상호 TLS가 필요한 것은 아니므로 서비스의 인증 요구를 먼저 확인하세요. 인증서를 받는 것과 신뢰할 수 있는 호출자로 검증하는 것은 별개의 작업입니다.
잠재적 영향
- 인증서 기반 접근 요건을 충족하지 못할 수 있습니다.
- 인증서가 없는 클라이언트의 요청이 애플리케이션에 도달할 수 있습니다.
- 전달받은 인증서를 검증하지 않으면 승인되지 않은 호출자를 허용할 수 있습니다.
해결 방법
상호 TLS가 필요하면 HTTPS를 적용하고 클라이언트 인증서를 Required로 설정하세요. 현재 리소스에서는 client_certificate_enabled와 client_certificate_mode를 함께 확인하세요. 애플리케이션에서 인증서의 신뢰성·유효성과 호출 권한을 검증하고 인증서가 없거나 유효하지 않은 요청이 거부되는지 테스트하세요.
예시
AzureRM 3.x의 기존 Function App에서 client_cert_mode를 비교하는 부분 예제입니다. 스토리지 등 필수 설정과 HTTPS 적용은 별도로 구성하세요. 현재 리소스의 인증서 설정 이름은 다를 수 있습니다.
변경 전
hcl
resource "azurerm_function_app" "example" {
name = "test-azure-functions"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
app_service_plan_id = azurerm_app_service_plan.example.id
client_cert_mode = "Optional"
}
변경 후
hcl
resource "azurerm_function_app" "example" {
name = "test-azure-functions"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
app_service_plan_id = azurerm_app_service_plan.example.id
client_cert_mode = "Required"
}
변경 전의 Optional은 인증서를 필수로 요구하지 않습니다. 변경 후의 Required는 인증서 제출을 요구하지만, 전달된 인증서에 대한 애플리케이션 검증과 인가도 필요합니다.