教程:保护 Azure 资源管理器模板部署中的项目

了解如何使用 Azure 存储帐户和共享访问签名 (SAS) 保护 Azure 资源管理器模板中使用的项目。 部署项目是指完成部署所需的任何文件以及主模板文件。 例如,在教程:使用 Azure 资源管理器模板导入 SQL BACPAC 文件中,主模板创建 Azure SQL 数据库;它还调用一个 BACPAC 文件来创建表和插入数据。 BACPAC 文件是一个项目。 该项目存储在具有公共访问权限的 Azure 存储帐户中。 在本教程中,你将使用 SAS 来授予对自己 Azure 存储帐户中 BACPAC 文件的有限访问权限。 有关 SAS 的详细信息,请参阅使用共享访问签名 (SAS)

若要了解如何保护链接的模板,请参阅教程:创建链接的 Azure 资源管理器模板

本教程涵盖以下任务:

  • 准备 BACPAC 文件
  • 打开现有模板
  • 编辑模板
  • 部署模板
  • 验证部署

如果没有 Azure 订阅,请在开始前创建一个试用帐户

先决条件

若要完成本文,需要做好以下准备:

准备 BACPAC 文件

在本部分准备 BACPAC 文件,以便在部署资源管理器模板时可以安全访问该文件。 本部分包括五个过程:

  • 下载 BACPAC 文件。
  • 创建 Azure 存储帐户。
  • 创建存储帐户 Blob 容器。
  • 将 BACPAC 文件上传到该容器。
  • 检索 BACPAC 文件的 SAS 令牌。

若要使用 PowerShell 脚本自动完成这些步骤,请参阅上传链接的模板中的脚本。

下载 BACPAC 文件

下载 BACPAC 文件,并以相同的名称 SQLDatabaseExtension.bacpac 将其保存到本地计算机。

创建存储帐户

  1. 选择以下映像在 Azure 门户中打开一个资源管理器模板。

    Deploy to Azure

  2. 选择“编辑模板”。

  3. 输入以下属性:

    • “部署解决方案模板”面板。

      名称
      订阅 选择你的 Azure 订阅。
      资源组 选择“新建”并为其提供一个名称。 资源组是 Azure 资源的容器,用于实现管理目的。 在本教程中,可为存储帐户和 Azure SQL 数据库使用同一个资源组。 请记下此资源组名称,因为稍后在本教程中创建 Azure SQL 数据库时需要用到。
      资源组位置 选择一个区域。 例如,中国北部
    • 选择“编辑参数”,显示“参数”面板。

      名称
      存储帐户类型 使用默认值,即 Standard_LRS
      位置 使用默认值,即 [resourceGroup().location]。 这意味着,你将使用存储帐户的资源组位置。
      • 选择“确定” 。
  4. 选择“查看法律条款”,然后选择“创建”。

  5. 选择“创建” 。

  6. 选择门户右上角的通知图标(钟形图标)查看部署状态。

    资源管理器教程门户通知窗格

  7. 成功部署存储帐户后,在通知窗格中选择“转到资源组”打开该资源组。

创建 Blob 容器

在上传任何文件之前,需要创建一个 Blob 容器。

  1. 选择存储帐户以将其打开。 应会看到,资源组中只列出了一个存储帐户。 你的存储帐户名称不同于以下屏幕截图所示的名称。

    资源管理器教程存储帐户

  2. 选择“Blob”磁贴。

    资源管理器教程 Blob

  3. 选择顶部的“+ 容器”创建新容器。

  4. 输入以下值:

    • 名称:输入 sqlbacpac
    • 公共访问级别:使用默认值“专用(不允许匿名访问)”。
  5. 选择“确定” 。

  6. 选择“sqlbacpac”打开新建的容器。

将 BACPAC 文件上传到容器

  1. 选择“上传”。

  2. 输入以下值:

    • 文件:遵照说明选择前面下载的 BACPAC 文件。 默认名称为 SQLDatabaseExtension.bacpac
    • 身份验证类型:选择“SAS”。 “SAS”是默认值。
  3. 选择“上传”。 成功上传文件后,容器中应会列出其文件名。

生成 SAS 令牌

  1. 右键单击容器中的“SQLDatabaseExtension.bacpac”,并选择“生成 SAS”。

  2. 输入以下值:

    • 权限:使用默认值“读取”。
    • 开始和过期日期/时间:默认值为使用 SAS 令牌八小时。 如果需要更多的时间来完成本教程,请更新“过期时间”。
    • 允许的 IP 地址:将此字段留空。
    • 允许的协议:使用默认值“HTTPS”。
    • 签名密钥:使用默认值“密钥 1”。
  3. 选择“生成 Blob SAS 令牌和 URL”。

  4. 复制“Blob SAS URL”。 URL 的中间是文件名 SQLDatabaseExtension.bacpac。 文件名将 URL 划分为三个部分:

    部署模板时需要使用这三个值。

打开现有模板

在此会话中,修改在教程:使用 Azure 资源管理器模板导入 SQL BACPAC 文件中创建的模板,以通过 SAS 令牌调用 BACPAC 文件。 在 SQL 扩展教程中开发的模板已在 https://armtutorials.blob.core.windows.net/sqlextensionbacpac/azuredeploy.json 位置共享。

  1. 在 Visual Studio Code 中,选择“文件”>“打开文件”。

  2. 在“文件名”中粘贴以下 URL:

    https://armtutorials.blob.core.windows.net/sqlextensionbacpac/azuredeploy.json
    
  3. 选择“打开”以打开该文件。

    该模板中定义了五个资源:

    • Microsoft.Sql/servers
    • Microsoft.SQL/servers/securityAlertPolicies
    • Microsoft.SQL/servers/filewallRules
    • Microsoft.SQL/servers/databases
    • Microsoft.SQL/server/databases/extensions

    在自定义模板之前,不妨对其进行一些基本的了解。

    Note

    你应当将文件中的 "storageUri": "https://hditutorialdata.blob.core.windows.net/usesqoop/SqoopTutorial-2016-2-23-11-2.bacpac" 变更为在 先决条件 中实际创建的 storageUri 值。 storageUri 部分看起来类似于以下格式:"storageUri": "https://<your-storage-account>.blob.core.chinacloudapi.cn/sqlextensionbacpac/SQLDatabaseExtension.bacpac"

  4. 选择“文件”>“另存为”,将该文件的副本保存到名为 azuredeploy.json 的本地计算机。

编辑模板

添加以下附加参数:

"_artifactsLocation": {
    "type": "string",
    "metadata": {
        "description": "The base URI where artifacts required by this template are located."
    }
},
"_artifactsLocationSasToken": {
    "type": "securestring",
    "metadata": {
        "description": "The sasToken required to access _artifactsLocation."
    },
    "defaultValue": ""
},
"bacpacFileName": {
    "type": "string",
    "defaultValue": "SQLDatabaseExtension.bacpac",
    "metadata": {
        "description": "The bacpac for configure the database and tables."
    }
}

资源管理器教程安全项目参数

更新以下两个元素的值:

"storageKey": "[parameters('_artifactsLocationSasToken')]",
"storageUri": "[uri(parameters('_artifactsLocation'), parameters('bacpacFileName'))]",

部署模板

Note

本文进行了更新,以便使用新的 Azure PowerShell Az 模块。 若要详细了解新的 Az 模块和 AzureRM 兼容性,请参阅新 Azure Powershell Az 模块简介。 有关安装说明,请参阅安装 Azure PowerShell

有关部署过程,请参阅部署模板部分。 改用以下 PowerShell 部署脚本:

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. chinaeast)"
$adminUsername = Read-Host -Prompt "Enter the virtual machine admin username"
$adminPassword = Read-Host -Prompt "Enter the admin password" -AsSecureString
$artifactsLocation = Read-Host -Prompt "Enter the artifacts location"
$artifactsLocationSasToken = Read-Host -Prompt "Enter the artifacts location SAS token" -AsSecureString
$bacpacFileName = Read-Host -Prompt "Enter the BACPAC file name"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment `
    -ResourceGroupName $resourceGroupName `
    -adminUser $adminUsername `
    -adminPassword $adminPassword `
    -_artifactsLocation $artifactsLocation `
    -_artifactsLocationSasToken $artifactsLocationSasToken `
    -bacpacFileName $bacpacFileName `
    -TemplateFile azuredeploy.json

使用生成的密码。 请参阅先决条件。 有关 _artifactsLocation、_artifactsLocationSasToken 和 bacpacFileName 的值,请参阅生成 SAS 令牌

验证部署

在门户中,从新部署的资源组中选择 SQL 数据库。 选择“查询编辑器(预览)”,然后输入管理员凭据。 此时会看到两个表导入到数据库中:

Azure 资源管理器部署 sql 扩展 BACPAC

清理资源

不再需要 Azure 资源时,请通过删除资源组来清理部署的资源。

  1. 在 Azure 门户上的左侧菜单中选择“资源组”。
  2. 在“按名称筛选”字段中输入资源组名称。
  3. 选择资源组名称。 应会看到,该资源组中总共有六个资源。
  4. 在顶部菜单中选择“删除资源组”。

后续步骤

在本教程中,你已部署 SQL Server、SQL 数据库,并已使用 SAS 令牌导入 BACPAC 文件。 若要了解如何跨多个区域部署 Azure 资源,以及如何使用安全部署做法,请参阅