教程:在 Azure 密钥保管库中管理 Azure Database for MySQL 灵活服务器凭据

可以将 Azure Database for MySQL 灵活服务器连接字符串存储在 Azure Key Vault 中,以确保安全地管理敏感信息,且只有经授权的用户或应用程序才可以访问这些信息。 此外,对连接字符串所做的任何更改都可以在 Key Vault 中轻松更新,而无需修改应用程序代码。

先决条件

  • 需要一个 Azure 订阅。 如果你还没有订阅,请在开始前创建试用帐户
  • 对机密的所有访问都通过 Azure Key Vault 进行。 对于本快速入门,请使用 Azure 门户Azure CLIAzure PowerShell 创建密钥保管库。 请确保你拥有管理和访问 Key Vault 所需的权限。
  • 根据应用程序所使用的框架安装 .NET、Java、PHP 或 Python。

向 Key Vault 添加机密

若要将机密添加到保管库,请执行以下步骤:

  1. 在 Azure 门户中,导航到新的密钥保管库。
  2. 在 Key Vault 设置页中,选择“机密”。
  3. 选择生成/导入
  4. 在“创建机密”页面上,提供以下信息
    • 上传选项:手动。
    • 名称:键入机密的名称。 机密名称在 Key Vault 中必须是唯一的。 该名称必须是 1-127 个字符的字符串,以字母开头且仅包含 0-9、a-z、A-Z 和 -。 有关命名的详细信息,请参阅 Key Vault 对象、标识符和版本控制
    • :键入机密的值。 Key Vault API 接受机密值并将其作为字符串返回。
    • 让其他值保留默认设置。 选择创建

收到机密已成功创建的消息后,可以在列表中选择该机密。

有关详细信息,请参阅关于 Azure Key Vault 机密

配置访问策略

在 Key Vault 设置中,配置适当的访问策略,以向需要从 Key Vault 检索 Azure Database for MySQL 灵活服务器连接字符串的用户或应用程序授予访问权限。 确保授予对机密执行“Get”操作所需的权限。

  1. Azure 门户中,导航到 Key Vault 资源。
  2. 选择“访问策略”,然后选择“创建”。
  3. 在“密钥权限”、“机密权限”和“证书权限”下选择所需要的权限。
  4. 在“主体”选择窗格下,在搜索字段中输入用户、应用或服务主体的名称,然后选择相应的结果。 如果使用的是应用的托管标识,请搜索并选择该应用本身的名称。
  5. 查看访问策略更改,然后选择“创建”以保存访问策略。
  6. 返回“访问策略”页,验证是否已列出你的访问策略。

检索 Azure Database for MySQL 灵活服务器连接字符串

在应用程序或脚本中,使用 Azure Key Vault SDK 或客户端库对 Azure Database for MySQL 灵活服务器连接字符串进行身份验证并从 Key Vault 中检索该字符串。 需要提供适当的身份验证凭据和访问权限才能访问 Key Vault。 从 Azure Key Vault 中检索 Azure Database for MySQL 灵活服务器连接字符串后,可以在应用程序中使用它建立与 Azure Database for MySQL 灵活服务器数据库的连接。 将检索到的连接字符串作为参数传递给数据库连接代码。

用于检索连接字符串的代码示例

下面是从 Key Vault 机密检索连接字符串的几个代码示例。

在此代码中,我们将使用用于 .NET 的 Azure SDK。 我们定义 Key Vault 的 URI 以及要检索的机密(连接字符串)的名称。 然后,创建一个新的 DefaultAzureCredential 对象,该对象表示应用程序访问 Key Vault 要使用的身份验证信息。

using System;
using System.Threading.Tasks;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

namespace KeyVaultDemo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var kvUri = "https://my-key-vault.vault.azure.cn/";
            var secretName = "my-db-conn-string";

            var credential = new DefaultAzureCredential();
            var client = new SecretClient(new Uri(kvUri), credential);

            var secret = await client.GetSecretAsync(secretName);
            var connString = secret.Value;

            Console.WriteLine($"Connection string retrieved: {connString}");
        }
    }
}

下一步