MySQL-database beveiligen met een privé-eindpunt

Voltooid

In deze les vergrendelt u de toegang tot uw MySQL-database met behulp van een privé-eindpunt. Een privé-eindpunt is een netwerkinterface die gebruikmaakt van een privé-IP-adres uit uw virtuele netwerk. De netwerkinterface verbindt u privé en veilig met een service die wordt mogelijk gemaakt door Azure Private Link.

Met Azure Private Link hebt u via een privé-eindpunt in uw virtuele netwerk toegang tot Azure PaaS-services (bijvoorbeeld Azure Storage en SQL Database) en in Azure gehoste services van klanten of partners.

Door een privé-eindpunt in te schakelen, brengt u de service naar uw virtuele netwerk.

Eigenschap

Beschrijving

Naam

Een unieke naam binnen de resourcegroep.

Subnet

Het subnet dat moet worden geïmplementeerd, waarbij het privé-IP-adres wordt toegewezen.

Private Link-resource

De private-link-resource om verbinding te maken met behulp van een resource-id of alias, in de lijst met beschikbare typen. Er wordt een unieke netwerk-id gegenereerd voor al het verkeer dat naar deze resource wordt verzonden.

Subresource van doel

De subresource om verbinding te maken. Elk resourcetype private-link heeft verschillende opties om te selecteren op basis van voorkeur.

Goedkeuringsmethode voor verbinding

Automatisch of handmatig. Afhankelijk van de RBAC-machtigingen (op rollen gebaseerd toegangsbeheer) van Azure, kan uw privé-eindpunt automatisch worden goedgekeurd. Als u verbinding maakt met een private-link-resource zonder Azure RBAC-machtigingen, gebruikt u de handmatige methode om de eigenaar van de resource toestemming te geven om de verbinding goed te keuren.

Bericht aanvragen

U kunt een bericht opgeven voor aangevraagde verbindingen die handmatig moeten worden goedgekeurd. Dit bericht kan worden gebruikt om een specifieke aanvraag te identificeren.

Verbindingsstatus

Een eigenschap alleen-lezen die aangeeft of het privé-eindpunt actief is. Alleen privé-eindpunten met een goedgekeurde status kunnen worden gebruikt om verkeer te verzenden. Andere beschikbare statussen:

Goedgekeurd: De verbinding is automatisch of handmatig goedgekeurd en kan worden gebruikt.

In behandeling: De verbinding is handmatig gemaakt en is in behandeling door de eigenaar van de private link-resource.

Geweigerd: de verbinding is geweigerd door de eigenaar van de private-link-resource.

Verbinding verbroken: de verbinding is verwijderd door de eigenaar van de private-link-resource. Het privé-eindpunt wordt informatief en moet worden verwijderd voor opschoning.

Zodra u een privé-eindpunt hebt ingeschakeld, kunt u openbare toegang tot uw database blokkeren.

  1. Om te beginnen moet u het netwerkbeleid voor privé-eindpunten uitschakelen in het subnet dat u gaat gebruiken om de privé-eindpunten te maken.

    az network vnet subnet update \
        --name $PRIVATE_ENDPOINTS_SUBNET_NAME \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VIRTUAL_NETWORK_NAME \
        --disable-private-endpoint-network-policies true
    
  2. Vervolgens maakt u het privé-eindpunt dat overeenkomt met het Azure Database for MySQL exemplaar van één server binnen hetzelfde subnet.

    MYSQL_RESOURCE_ID=$(az resource show -g ${RESOURC_GROUP} -n ${SQL_SERVER_NAME}--resource-type
        "Microsoft.DBforMySQL/servers" \
        --query "id" -o tsv)
    
    az network private-endpoint creates \
        --name pe-openlab-mysql \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VIRTUAL_NETWORK_NAME \
        --subnet $PRIVATE_ENDPOINTS_SUBNET_NAME \
        --private-connection-resource-id $MYSQL_RESOURCE_ID \
        --group-id mysqlServer \
        --connection-name openlab-mysql-connection \
        --location $LOCATION
    

    Nadat u het privé-eindpunt hebt gemaakt, stelt u een privé-Azure DNS-zone in met de naam privatelink.mysql.database.azure.com met een A DNS-record die overeenkomt met de oorspronkelijke DNS-naam met het achtervoegsel mysql.database.azure.com , maar vervangt u dat achtervoegsel door privatelink.mysql.database.azure.com. Uw apps die verbinding maken met de MySQL-database hoeven niet te worden bijgewerkt, maar in plaats daarvan kunnen ze de bestaande verbindingsreeksen blijven gebruiken.

  3. Als u deze configuratie wilt implementeren, maakt u eerst een nieuwe privé-DNS-zone en koppelt u deze aan uw virtuele netwerk.

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name "privatelink.mysql.database.azure.com"
    
    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name "privatelink.mysql.database.azure.com"\
        --name MyDNSLink \
        --virtual-network $VIRTUAL_NETWORK_NAME \
        --registration-enabled false
    
  4. Maak vervolgens een nieuwe A-record die verwijst naar het IP-adres van het zojuist gemaakte privé-eindpunt.

    NIC_ID=$(az network private-endpoint show \
        --name pe-openlab-mysql \
        --resource-group $RESOURCE_GROUP \
        --query 'networkInterfaces[0].id' -o tsv)
    
    NIC_IPADDRESS=$(az resource show \
        --ids $NIC_ID \
        --api-version 2019-04-01 -o json | jq -r '.properties.ipConfigurations[0].properties.privateIPAddress')
    
    az network private-dns record-set a create \
        --name $SQL_SERVER_NAME \
        --zone-name privatelink.mysql.database.azure.com \
        --resource-group $RESOURCE_GROUP
    
    az network private-dns record-set a add-record \
        --record-set-name $SQL_SERVER_NAME \
        --zone-name privatelink.mysql.database.azure.com \
        --resource-group $RESOURCE_GROUP \
        -a $NIC_IPADDRESS
    
  5. U kunt nu de connectiviteit met het openbare eindpunt van uw Azure Database for MySQL exemplaar van één server volledig blokkeren.

    az mysql server update \
        --name $SQL_SERVER_NAME \
    -g $RESOURCE_GROUP \
        --public Disabled