프라이빗 엔드포인트를 사용하여 MySQL 데이터베이스 보호

완료됨

이 단원에서는 MySQL 데이터베이스를 서브넷 내에 다시 배포하여 이 데이터베이스에 대한 액세스를 잠급니다. MySQL 유연한 서버는 현재 프라이빗 엔드포인트 연결을 지원하지 않습니다. 따라서 서브넷 내에 배포합니다.

프라이빗 엔드포인트를 사용하도록 설정하면 데이터베이스에 대한 퍼블릭 액세스를 차단할 수 있습니다.

  1. 이전 MySQL 유연한 서버 인스턴스를 삭제합니다.

    az mysql  flexible-server delete \
        --name $MYSQL_SERVER_NAME \
        --resource-group $RESOURCE_GROUP \ 
        --yes
    
  2. 다음으로, 새 MySQL 유연한 서버 인스턴스에 대한 프라이빗 DNS 영역을 만듭니다. DNS 영역을 private.mysql.database.azure.com으로 설정합니다.

    MYSQL_DNS="private.mysql.database.azure.com"
    az network private-dns zone create -g $RESOURCE_GROUP -n $MYSQL_DNSs.
    
  3. 다음으로, MySQL 유연한 서버를 다시 만들고 DNS 영역에 연결합니다. 새 서버 인스턴스를 DNS 영역에 연결하면 MySQL 유연한 서버가 DNS 영역을 VNet에 연결합니다. 이 링크는 데이터베이스 이름에 대한 A 레코드를 DNS 영역에 추가합니다.

    MYSQL_SERVER_NAME=mysql-vnet$APPNAME-$UNIQUEID
    az mysql flexible-server create \
        --name ${MYSQL_SERVER_NAME} \
        --resource-group ${RESOURCE_GROUP}  \
        --location $LOCATION \
        --admin-user myadmin \
        --admin-password ${MYSQL_ADMIN_PASSWORD} \
        --sku-name Standard_B1ms  \
        --tier Burstable \
        --version 5.7 \
        --storage-size 20 \
        --vnet $VIRTUAL_NETWORK_NAME \
        --subnet $DATABASE_SUBNET_NAME \
        --private-dns-zone $MYSQL_DNS
    
  4. petclinic 데이터베이스를 다시 만듭니다.

    az mysql flexible-server db create \
        --server-name $MYSQL_SERVER_NAME \
        --resource-group $RESOURCE_GROUP \
        -d $DATABASE_NAME
    
  5. 새로 만든 MySQL 유연한 서버의 FQDN을 표시합니다. 이 값을 사용하여 구성 리포지토리의 spring.datasource.url 속성을 업데이트합니다.

    az mysql flexible-server show \
        --name $MYSQL_SERVER_NAME \
        --resource-group $RESOURCE_GROUP \
        --query fullyQualifiedDomainName
    
  6. Git Bash 창의 로컬로 복제한 구성 리포지토리에서 즐겨 사용하는 텍스트 편집기를 사용하여 application.yml 파일을 엽니다. 이제 MYSQL Vnet 통합 인스턴스를 사용하도록 datasourceurl을 업데이트합니다.

    url: jdbc:mysql://<your-vnet-integrated-server-name>.mysql.database.azure.com:3306/petclinic?useSSL=true
    
  7. 백 엔드 데이터베이스를 사용하는 Spring Apps를 다시 시작하여 새 연결 문자열 정보를 사용합니다.

    az spring app restart \
        --name customers-service \
        --resource-group $RESOURCE_GROUP \
        --service $SPRING_APPS_SERVICE \
        --no-wait
    
    az spring app restart \
        --name vets-service \
        --resource-group $RESOURCE_GROUP \
        --service $SPRING_APPS_SERVICE \
        --no-wait
    
    az spring app restart \
        --name visits-service \
        --resource-group $RESOURCE_GROUP \
        --service $SPRING_APPS_SERVICE \
        --no-wait
    
    
  8. Spring Petclinic 앱을 찾아보고 데이터를 볼 수 있어야 합니다.

  9. Azure Portal에서 새로 만든 MySQL 유연한 서버로 이동하고 네트워킹 메뉴를 선택합니다. 서버 방화벽을 더 이상 잠글 수 없다는 것을 알 수 있습니다. 그러나 서버는 가상 네트워크를 통해서 들어오는 호출만 허용합니다.