练习 - 设置沙盒环境

已完成

在本单元中,你将设置要在整个模块中使用的资源。 设想一个基本体系结构,它包含一个用于托管客户使用的应用程序的服务器。 该服务器连接到某个数据库以存储该应用程序的数据。 该应用程序在虚拟机 (VM) 上运行。 该数据库最近从 VM 上运行的 SQL Server 数据库迁移到了 Azure SQL 数据库服务上的数据库。 为了演示如何保护数据库,请设置以下资源以便在整个模块中使用:

  • 名为“appServer”的 Linux VM。 此服务器充当用户要连接到的应用程序服务器。 它需要连接到数据库。 在 VM 上安装 sqlcmd 以模拟一个应用程序,该应用程序在与数据库建立连接的 appServer 上运行。
  • Azure SQL 数据库逻辑服务器。 此逻辑服务器需要托管一个或多个数据库。
  • 名为 marketplaceDb 的逻辑服务器上的一个数据库。 你将使用 AdventureWorksLT 演示数据库创建该数据库,因此可以获得一些可用的表和数据。 此数据包括一些敏感数据,例如你想要妥善保护的电子邮件地址和电话号码。

创建 Azure SQL 数据库

  1. 首先设置一些变量。 使用所选值替换 [] 中显示的以下值。 [password] 必须至少包含八个字符,并且至少包含以下三个类别的字符:大写字符、小写字符、数字和非字母数字字符。 保存该值供稍后使用。

    export ADMINLOGIN='[ServerAdmin]'
    export PASSWORD='[password]'
    export SERVERNAME=[server-name]
    export RESOURCEGROUP=<rgn>[sandbox resource group name]</rgn>
    export LOCATION=$(az group show --name $RESOURCEGROUP | jq -r '.location')
    
  2. 运行以下命令,创建新的 Azure SQL 数据库逻辑服务器。

    az sql server create \
        --name $SERVERNAME \
        --resource-group $RESOURCEGROUP \
        --location $LOCATION \
        --admin-user $ADMINLOGIN \
        --admin-password $PASSWORD
    
  3. 运行以下命令,以在创建的逻辑服务器上创建名为 marketplaceDb 的数据库。 此命令使用 AdventureWorksLT 数据库作为模板,因此你可以获得一些可用的预填充表。

    az sql db create --resource-group $RESOURCEGROUP \
        --server $SERVERNAME \
        --name marketplaceDb \
        --sample-name AdventureWorksLT \
        --service-objective Basic
    
  4. 运行以下命令以获取此数据库的连接字符串。

    az sql db show-connection-string --client sqlcmd --name marketplaceDb --server $SERVERNAME | jq -r
    

    输出应与下面的示例类似。 请将此命令复制到方便访问的位置,因为稍后在本模块中需要使用此命令连接到数据库。 请注意命令中的 [username][password] 占位符,需要将其替换为之前在变量中指定的 ADMINLOGINPASSWORD 凭据。

    sqlcmd -S tcp:server12345.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

创建并配置 Linux 虚拟机

通过一些示例创建要使用的 Linux VM。

  1. 运行以下命令来创建虚拟机。 此命令可能需要几分钟才能完成。

    az vm create \
      --resource-group $RESOURCEGROUP \
      --name appServer \
      --image Ubuntu2204 \
      --size Standard_DS2_v2 \
      --public-ip-sku Standard \
      --generate-ssh-keys
    

    此命令完成后,你应会看到如下例所示的输出。

    {
      "fqdns": "",
      "id": "/subscriptions/nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn/resourceGroups/learn-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn/providers/Microsoft.Compute/virtualMachines/appServer",
      "location": "westus",
      "macAddress": "nn-nn-nn-nn-nn-nn",
      "powerState": "VM running",
      "privateIpAddress": "nn.nn.nn.nn",
      "publicIpAddress": "nnn.nnn.nnn.nnn",
      "resourceGroup": "learn-nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn",
      "zones": ""
    }
    
  2. 成功创建 VM 后,使用 SSH 连接到其公共 IP 地址。

    ssh nnn.nnn.nnn.nnn
    

    其中,nnn.nnn.nnn.nnn 是上一步中 publicIpAddress 输出的值。

    注意

    需要注意两点。 首先,你不需要密码,因为你在 VM 创建过程中生成了 SSH 密钥对。 其次,首次将 shell 连接到 VM 时,系统会显示有关主机真实性的提示。 之所以出现这种情况,是因为你要连接到 IP 地址而不是主机名。 回答“”会将 IP 地址保存为用于连接的有效主机,并允许继续建立连接。

  3. 通过在 Linux VM 上安装 mssql-tools 来完成操作,以便可以通过 sqlcmd 连接到数据库。

    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
    source ~/.bashrc
    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
    sudo apt-get update
    sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev
    

    注意

    对于其中一些命令,将滚动显示很多文本,因此请确保在输入最后一个命令后按 Enter 以确保它运行。

你已创建 Azure SQL 数据库逻辑服务器、该逻辑服务器上的数据库,以及用于模拟从应用程序服务器建立网络连接的名为 appServer 的虚拟机。 接下来,让我们了解如何正确保护数据库。