데이터베이스 및 서버 보호

완료됨

데이터베이스 인증 및 권한 부여는 일반적으로 오픈 소스 데이터베이스를 보호하는 방법입니다. Azure에 해당 데이터베이스를 호스팅하면 이러한 보호를 강화할 수 있습니다.

Adventureworks 데이터베이스 개발자로서, 회사의 Azure Database for PostgreSQL 보호를 개선하려고 합니다.

이 단원에서는 온-프레미스 PostgreSQL 데이터베이스를 Azure로 마이그레이션한 후에 어떤 추가 보호가 가능한지를 살펴봅니다.

데이터 보호

PostgreSQL 및 MySQL에는 데이터베이스에 액세스할 수 있는 사용자 및 사용자가 해당 데이터베이스의 항목에 대해 가지는 권한을 제어하는 자체 인증 및 권한 부여 메커니즘이 있습니다. 사용자 및 권한 관리는 마이그레이션 전에 했던 것과 거의 동일한 방식으로 계속되어야 합니다. pgAdmin 및 MySQL Workbench 같은 관리 도구를 사용하면 Azure에 호스트된 서버에 연결할 수 있습니다.

하지만 Azure는 서버에 대한 추가 보호를 제공합니다. 이 보호는 다음과 같이 세 가지 수준에서 작용합니다.

  1. 서버에 대한 액세스를 제어하여 알 수 없거나 신뢰할 수 없는 원본의 트래픽을 필터링합니다.
  2. 트래픽이 클라이언트와 서버 간에 이동할 때 트래픽을 보호하여 조작하거나 가로챌 수 없도록 합니다.
  3. 일반적인 외부 위협으로부터 서버 자체를 보호합니다.

이어지는 섹션에서는 각 항목에 대해 자세히 설명합니다.

방화벽 규칙을 사용하여 트래픽 필터링

Azure Database for MySQL 또는 PostgreSQL은 Microsoft에서 관리하는 방화벽 내에서 실행됩니다. 기본적으로 이 방화벽은 어떤 것도 통과할 수 없습니다. 이전 모듈에 설명된 대로, 방화벽 규칙을 추가하여 지정된 IP 주소 블록의 트래픽을 사용하도록 설정합니다. 트래픽 전송이 허용된 IP 주소를 자주 적극적으로 검토하고 더 이상 필요하지 않은 클라이언트의 IP 주소를 제거하는 것이 좋습니다.

데이터베이스를 사용해야 하는 다른 Azure 서비스를 실행하는 경우 해당 서비스에 대한 방화벽을 열어야 합니다. Azure Portal에 있는 Azure Database for MySQL 또는 PostgreSQL 서비스의 연결 보안 페이지에서 Azure 서비스에 대한 액세스 허용 작업 설정이 ON이 되도록 선택하세요.

Image highlighting the Allow access to Azure services action setting in the firewall configuration for Azure Database for MySQL or PostgreSQL

참고 항목

방화벽에 대한 모든 변경 내용이 활성 상태가 되려면 최대 5분의 시간이 걸릴 수 있습니다.

모든 Azure 서비스에 대해 서버를 여는 것은 너무 과도한 경우가 있을 수도 있습니다. Azure Database for MySQL 또는 PostgreSQL의 범용 버전이나 메모리 최적화 버전을 실행하는 경우에는 Azure 가상 네트워크 규칙을 사용하여 가상 네트워크 수준에서 트래픽을 필터링합니다. 가상 네트워크 규칙을 사용하면 자체 가상 네트워크에서 시작된 트래픽은 서버에 액세스하도록 허용할 수 있습니다. 다른 네트워크의 트래픽은 차단됩니다.

Image showing the virtual network rules for Azure Database for MySQL or PostgreSQL

방화벽 유지 관리 작업을 스크립팅해야 하는 경우 Azure CLI를 사용합니다. 방화벽 규칙을 추가, 삭제, 표시하는 다음 예에서는 Azure Database for MySQL에 대해 작업을 수행하는 az mysql 명령을 사용합니다. PostgreSQL 명령을 실행하는 경우 해당 az postgres 명령을 대신 사용합니다. 매개 변수는 동일합니다.

13.83.152.0에서 13.83.152.15 범위의 클라이언트에 대한 액세스 허용

az mysql server firewall-rule create \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1 \
    --start-ip-address 13.83.152.0 \
    --end-ip-address 13.83.152.15

모든 방화벽 규칙 나열

az mysql server firewall-rule list \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name]

FirewallRule1 세부 정보 표시

az mysql server firewall-rule show \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1

FirewallRule1 제거. 이 규칙의 주소 범위에 있는 클라이언트는 액세스가 거부됨

az mysql server firewall-rule delete \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1

Azure 서비스에 대한 액세스를 사용하도록 설정하려면 0.0.0.0start-ip-addressend-ip-address 값을 사용하여 방화벽 규칙을 생성합니다.

az msysql server vnet-rule 명령을 사용하여 유사한 방식으로 가상 네트워크 규칙을 만들고 관리합니다.

SSL을 사용하여 트래픽 보호

Azure Database for MySQL 또는 PostgreSQL에 대한 SSL 보호는 기본적으로 사용하도록 설정되어 있습니다. Azure Portal에 있는 Azure Database for MySQL 또는 PostgreSQL 서비스의 연결 보안 페이지에서 SSL 연결 적용 설정을 사용하여 SSL을 사용하지 않도록 설정했다가 다시 사용하도록 설정할 수 있습니다.

Image highlighting the Enforce SSL connection setting on the Connection security page for Azure Database for MySQL or PostgreSQL

Azure Advanced Threat Protection을 사용하여 서버 보호

Advanced Threat Protection은 Azure에서 제공하는 추가 보안 계층입니다. Advanced Threat Protection은 서버에 대한 액세스를 모니터링하여 비정상적이거나 악의적일 가능성이 있는 동작의 패턴을 찾습니다. 이러한 동작이 감지되면 지정된 메일 주소로 경고가 전송되도록 지정해 놓습니다.

감지되는 비정상적인 활동의 패턴은 다음과 같습니다.

  • 예기치 않거나 비정상적인 위치에서 액세스합니다.
  • 비정상적인 Azure 데이터 센터에서 액세스합니다.
  • 인식된 공격 도구와 같이 유해할 수 있는 애플리케이션에서 액세스합니다.
  • 실패한 로그인이 매우 여러 번 빠르게 연속적으로 발생하는 경우 무차별 암호 대입 공격이 있는 것을 나타낼 수 있습니다.

Azure Portal에 있는 해당 서비스의 Advanced Threat Protection 페이지에서 Advanced Threat Protection을 사용하도록 설정할 수 있습니다.

Image showing the Advanced Threat Protection page for Azure Database for MySQL or PostgreSQL

서버 백업 및 복원

Azure Database for MySQL 또는 PostgreSQL 서비스는 다음 일정에 따라 서버를 자동으로 백업합니다.

  • 전체 백업이 매주 수행되며 첫 번째 전체 백업은 서버를 만드는 즉시 발생합니다.
  • 차등 백업이 하루에 두 번 수행됩니다.
  • 트랜잭션 로그 백업이 5분마다 수행됩니다.

전체 서버가 백업됩니다. 개별 데이터베이스는 백업할 수 없으며 수동으로 백업을 강제할 수 없습니다.

백업 옵션 설정

이러한 백업을 사용하여 백업 파일이 보존된 특정 시점으로 복원합니다. 기본적으로 백업은 7일 동안 보관되지만 최대 35일 동안 유지할 수 있습니다. 백업 저장 방법도 지정합니다. 로컬 중복 백업은 서버와 동일한 지역에 보관되고 지역 중복 백업은 다른 지역의 데이터 센터에 복사됩니다. 지역 중복 옵션은 범용 및 메모리 최적화 가격 책정 계층의 서버에서만 사용할 수 있습니다. 백업 옵션은 Azure Portal에 있는 해당 서버의 가격 책정 계층 페이지에서 설정합니다.

Image showing the backup configuration section of the pricing tiers page for Azure Database for MySQL or PostgreSQL

서버 복원

Azure Database for MySQL 또는 PostgreSQL에서는 특정 시점 및 지역 복원이라는 두 가지 유형의 서버 복원 작업을 지원합니다. 두 경우 모두 복원 작업에서 새 서버를 생성합니다. 원본 서버는 계속 사용할 수 있습니다. 애플리케이션이 복원된 데이터를 사용하도록 하려면 애플리케이션을 다시 구성하여 새 서버를 사용하도록 해야 합니다. 또한 클라이언트와 서비스에서 연결할 수 있도록 새 서버의 방화벽을 열어야 합니다.

중요

삭제된 서버는 복원할 수 없습니다. 서버를 삭제하면 해당 서버와 연결된 백업도 삭제됩니다.

지정 시간 복원

특정 시점 복원에서는 원본 서버의 백업을 사용하여 새 서버를 만들고 지정된 시간으로 서버를 롤포워드합니다. Azure Portal에 있는 해당 서버의 개요 페이지에서 도구 모음의 복원 명령을 사용하여 복원 작업을 시작합니다. 새 서버의 이름과 특정 시점을 입력하라는 메시지가 표시됩니다.

Image showing the point-in-time restore page for Azure Database for MySQL or PostgreSQL

명령줄에서 복원 작업을 수행하려는 경우 Azure CLI는 az mysql/postgres server restore 명령을 지원합니다. 예를 들면 다음과 같습니다.

az mysql server restore \
    --resource-group [resource group name] \
    --name [new Azure Database for MySQL server name] \
    --source-server [original Azure Database for MySQL server name] \
    --restore-point-in-time "2019-10-23T02:10:00+08:00"

지역 복원

지역 복원은 지역 중복 스토리지에 보관된 백업을 사용하여 서버 전체를 복원하는 것입니다. Azure Portal을 사용하여 새 서버를 만드는 경우 지역 중복 백업을 데이터 원본으로 지정합니다. 새 서버가 만들어지면 이 백업의 데이터베이스로 채워집니다.

Image showing the server details section when creating an Azure Database for MySQL or PostgreSQL server

Azure CLI는 명령줄에서 지역 복원을 수행하는 az mysql/postgres server georestore 명령을 제공합니다.

지역 중복 백업을 다른 지역에 복제하는 데는 최대 1시간이 걸릴 수 있습니다. 다른 지역에서 지역 복원을 수행해야 하는 경우 이로 인해 최대 1시간 분량의 데이터가 손실될 수 있습니다.