넓은 Azure SQL 방화벽 허용 범위 점검

Azure SQL 방화벽의 넓은 허용 범위를 필요한 클라이언트 주소로 줄이고, 모든 규칙이 함께 허용하는 접근을 확인합니다.

설명

Azure SQL 방화벽에서 넓은 주소 범위를 허용하면 데이터베이스 연결이 필요 없는 출발지까지 포함할 수 있습니다. Ansible의 start_ip_address와 end_ip_address는 필요한 클라이언트의 실제 출발지에 맞게 지정하고, 서버와 데이터베이스에 적용되는 모든 방화벽 규칙을 함께 확인하세요.

적절한 범위는 애플리케이션과 관리 도구의 연결 요구 사항에 따라 달라집니다. 주소 수가 적다는 이유만으로 적절한 접근 제한이 되는 것은 아니며, 공개 네트워크 접근 설정과 인증·권한도 별도로 관리해야 합니다.

Azure SQL Database에서 시작과 끝을 모두 0.0.0.0으로 지정하면 다른 고객의 리소스를 포함한 Azure 서비스 접근을 허용하는 별도 예외가 됩니다. 이 설정을 하나의 클라이언트 주소만 허용하는 규칙으로 오해하지 마세요.

잠재적 영향

  • 공개 엔드포인트에서 실제 요구보다 넓은 주소 범위를 허용하면, 의도하지 않은 출발지에서도 데이터베이스에 연결을 시도할 수 있습니다. 인증 정보나 권한에 문제가 있다면 불필요한 네트워크 허용 범위가 악용 기회를 넓힐 수 있습니다.
  • 필요한 클라이언트를 고려하지 않고 범위를 줄이면 정상적인 애플리케이션이나 관리 연결이 끊길 수 있습니다. 변경 전에 실제 출발지와 연결 경로를 확인하세요.

해결 방법

  • 실제로 필요한 클라이언트의 출발지 주소를 파악하고, 모든 방화벽 규칙을 합쳐 허용되는 범위를 필요한 수준으로 줄이세요. 같은 넓은 범위를 작은 규칙 여러 개로 나누기만 하면 실제 허용 대상은 줄어들지 않습니다.
  • 시작과 끝이 유효한 IPv4 주소이고 순서가 올바른지 검증하세요. 사용하는 연결 경로에서 서비스가 확인하는 출발지 주소를 기준으로 설정하고, 더 이상 필요하지 않은 임시 규칙은 제거하세요.
  • 공개 연결이 필요하지 않다면 프라이빗 연결을 구성하고 공개 네트워크 접근을 비활성화하세요. 필요한 연결이 유지되는지 확인하고 인증 및 데이터베이스 권한도 점검하세요.

예시

다음 발췌는 넓은 허용 범위와 세 주소로 좁힌 범위를 비교합니다. 주소와 리소스 이름은 실제 배포 환경에 맞게 검증해야 하며, 프라이빗 연결이나 인증을 구성하는 코드도 포함하지 않습니다.

넓은 주소 범위

yaml
- name: Create Firewall Rule1
  azure_rm_sqlfirewallrule:
    resource_group: myResourceGroup1
    server_name: firewallrulecrudtest-6285
    name: firewallrulecrudtest-5370
    start_ip_address: 0.0.0.0
    end_ip_address: 172.28.11.138

- name: Create Firewall Rule2
  azure_rm_sqlfirewallrule:
    resource_group: myResourceGroup2
    server_name: firewallrulecrudtest-6285
    name: firewallrulecrudtest-5370
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.11.138

세 주소를 지정한 범위

yaml
- name: Create Firewall Rule
  azure_rm_sqlfirewallrule:
    resource_group: myResourceGroup
    server_name: firewallrulecrudtest-6285
    name: firewallrulecrudtest-5370
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.10.138

설명:

  • 첫 번째 예시: 첫 작업은 0.0.0.0부터 172.28.11.138까지 매우 넓은 범위를 허용합니다. 두 번째 작업의 172.28.10.136부터 172.28.11.138까지도 양 끝을 포함해 259개 주소가 들어갑니다. 각 범위가 실제로 필요한 출발지보다 넓지 않은지 확인하세요.
  • 두 번째 예시: 172.28.10.136부터 172.28.10.138까지 세 개의 사설 주소를 지정합니다. 이 주소가 서비스에서 확인하는 실제 클라이언트의 출발지인지 검증하세요. 이 코드만으로 프라이빗 연결이나 데이터 접근 제어가 구성되지는 않습니다.

참조