教程:在 Azure 密钥保管库中管理 Azure Database for MySQL 灵活服务器凭据
本文内容
可以将 Azure Database for MySQL 灵活服务器连接字符串存储在 Azure Key Vault 中,以确保安全地管理敏感信息,且只有经授权的用户或应用程序才可以访问这些信息。 此外,对连接字符串所做的任何更改都可以在 Key Vault 中轻松更新,而无需修改应用程序代码。
先决条件
需要一个 Azure 订阅。 如果你还没有订阅,请在开始前创建试用帐户 。
对机密的所有访问都通过 Azure Key Vault 进行。 对于本快速入门,请使用 Azure 门户 、Azure CLI 或 Azure PowerShell 创建密钥保管库。 请确保你拥有管理和访问 Key Vault 所需的权限。
根据应用程序所使用的框架安装 .NET、Java、PHP 或 Python。
向 Key Vault 添加机密
若要将机密添加到保管库,请执行以下步骤:
在 Azure 门户中,导航到新的密钥保管库。
在 Key Vault 设置页中,选择“机密”。
选择生成/导入 。
在“创建机密”页面上,提供以下信息 :
上传选项 :手动。
名称 :键入机密的名称。 机密名称在 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”操作所需的权限。
在 Azure 门户 中,导航到 Key Vault 资源。
选择“访问策略”,然后选择“创建”。
在“密钥权限”、“机密权限”和“证书权限”下选择所需要的权限。
在“主体”选择窗格下,在搜索字段中输入用户、应用或服务主体的名称,然后选择相应的结果。 如果使用的是应用的托管标识,请搜索并选择该应用本身的名称。
查看访问策略更改,然后选择“创建”以保存访问策略。
返回“访问策略”页,验证是否已列出你的访问策略。
检索 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}");
}
}
}
在此 Java 代码中,我们使用用于 Java 的 Azure SDK 与 Azure Key Vault 交互。 我们先定义 Key Vault URL 以及要检索的机密(连接字符串)的名称。 然后,使用 SecretClientBuilder 类创建一个 SecretClient 对象。 我们设置 Key Vault URL 并提供 DefaultAzureCredential 来使用 Microsoft Entra ID 进行身份验证。 “DefaultAzureCredential”使用可用的凭据(例如环境变量、托管标识或 Visual Studio Code 身份验证)自动进行身份验证。
接下来,我们在“SecretClient”上使用 getSecret 方法来检索机密。 此方法返回“KeyVaultSecret”对象,可以使用 getValue 方法从该对象获取机密值。 最后,我们将检索到的连接字符串输出到控制台。 请确保将 keyVaultUrl 和 secretName 变量替换为你自己的 Key Vault URL 和机密名称。 接下来,创建一个新的“SecretClient”对象,并传入 Key Vault URI 和凭据对象。 然后,我们可以在客户端对象上调用 GetSecretAsync 方法,并传入要检索的机密的名称。
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
public class KeyVaultDemo {
public static void main(String[] args) {
String keyVaultUrl = "https://my-key-vault.vault.azure.cn/";
String secretName = "my-db-conn-string";
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUrl)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
KeyVaultSecret secret = secretClient.getSecret(secretName);
String connString = secret.getValue();
System.out.println("Connection string retrieved: " + connString);
}
}
在此 PHP 代码中,我们首先需要必要的自动加载文件,并要从用于 PHP 的 Azure SDK 导入所需的类。 我们使用 Azure Key Vault 的 URL 定义 $keyVaultUrl 变量,并使用要检索的机密(连接字符串)的名称定义 $secretName 变量。 接下来,我们创建一个 DefaultAzureCredential 对象,从而使用 Microsoft Entra ID 进行身份验证 - 该服务自动从环境中选取可用的凭据。
然后,创建一个“SecretClient”对象,并传递 Key Vault URL 和凭据对象以使用 Key Vault 进行身份验证。 “SecretClient”上的 getSecret 方法可以通过传递 $secretName 来检索机密。 此方法返回“KeyVaultSecret”对象,可以使用 getValue 方法从该对象获取机密值。 最后,我们将检索到的连接字符串输出到控制台。 请确保已安装必要的 Azure SDK 包,并在 PHP 项目中正确包括自动加载文件。
require_once 'vendor/autoload.php';
use Azure\Identity\DefaultAzureCredential;
use Azure\Security\KeyVault\Secrets\SecretClient;
$keyVaultUrl = 'https://my-key-vault.vault.azure.cn/';
$secretName = 'my-db-conn-string';
$credential = new DefaultAzureCredential();
$client = new SecretClient($keyVaultUrl, $credential);
$secret = $client->getSecret($secretName);
$connString = $secret->getValue();
echo 'Connection string retrieved: ' . $connString;
在此 Python 代码中,我们首先从用于 Python 的 Azure SDK 导入必要的模块。 我们使用 Azure Key Vault 的 URL 定义 key_vault_url 变量,并使用要检索的机密(连接字符串)的名称定义 secret_name 变量。 接下来,我们创建一个 DefaultAzureCredential 对象,来使用 Microsoft Entra ID 进行身份验证。 “DefaultAzureCredential”使用可用的凭据(例如环境变量、托管标识或 Visual Studio Code 身份验证)自动进行身份验证。
然后,创建一个“SecretClient”对象,并传递 Key Vault URL 和凭据对象以使用 Key Vault 进行身份验证。 “SecretClient”上的 get_secret 方法可以通过传递 secret_name 来检索机密。 此方法返回“KeyVaultSecret”对象,可以使用 value 属性从该对象获取机密值。 最后,我们将检索到的连接字符串输出到控制台。 请确保将 key_vault_url 和 secret_name 变量替换为你自己的 Key Vault URL 和机密名称。
from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
key_vault_url = "https://my-key-vault.vault.azure.cn/"
secret_name = "my-db-conn-string"
credential = DefaultAzureCredential()
secret_client = SecretClient(vault_url=key_vault_url, credential=credential)
secret = secret_client.get_secret(secret_name)
conn_string = secret.value
print("Connection string retrieved:", conn_string)
下一步