Azure Key Vault是一个安全可靠的存储库,用于存储在.NET Core应用程序中使用的令牌、密钥、密码、证书和其他敏感数据。接下来我们讲讲如何在C#中使用它。

在构建.NET Core应用程序时,我们经常使用各种“秘密”,如客户端ID、访问令牌、密码、证书、加密密钥和API密钥。自然地,我们需要一种安全的方式来存储、管理和控制对这些敏感数据的访问。Azure Key Vault为此提供了一个方便的基于云的解决方案。我们将探讨如何在C#中使用Azure Key Vault。如果要使用我接下来提供的代码示例,你的系统需要安装Visual Studio 2022。

在Visual Studio中创建一个控制台应用程序项目

首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。假设您的系统已安装Visual Studio 2022,请按照我下面的步骤创建一个新的.NET Core控制台应用程序项目。

  • 启动Visual Studio IDE。
  • 点击“创建新项目”。
  • 在“创建新项目”窗口中,从模板列表中选择“控制台应用程序 (.NET Core)”。
  • 点击“下一步”。
  • 在“配置新项目”窗口中,指定新项目的名称和位置。
  • 点击“下一步”。
  • 在接下来显示的“附加信息”窗口中,选择“.NET 7.0 (标准支持期)”作为您想要使用的框架版本。
  • 点击“创建”。

接下来我们将使用这个.NET 7控制台应用程序项目来处理Azure Key Vault。

什么是Azure Key Vault?

Azure Key Vault是一种基于云的安全存储解决方案,用于保护应用程序的秘密或与应用程序相关的其他敏感数据。这些秘密可能是令牌、密钥、ID、密码、证书等。Azure Key Vault提供了一个安全、可靠的集中存储秘密的地方,并具有强大的访问控制,消除了开发人员直接在应用程序中管理敏感数据的需求。接下来,我们来看看怎么创建一个密钥保管库,创建一些秘密,然后通过编程方式读取和删除这些秘密


在Azure中创建一个Key Vault,请按照以下步骤进行操作。

  1. 从Azure门户菜单或主页上,选择“创建资源”。
  2. 从显示的资源列表中选择“密钥保管库”。
  3. 点击“创建”。
  4. 在“创建密钥保管库”屏幕上,指定订阅、资源组名称、区域和定价层,将其他选项保留为默认值。
  5. 点击“查看 + 创建”。
  6. 检查输入的详细信息,然后点击“创建”。

接下来,您应该在前面创建的密钥保管库实例中添加一个秘密。请按照以下步骤进行操作。

  1. 从密钥保管库配置页面中选择“秘密”。
  2. 点击“生成/导入”以向密钥保管库添加一个秘密。
  3. 从“上传选项”下拉菜单中选择“手动”(默认选项)。
  4. 指定秘密的名称和值。
  5. 可选择指定内容类型、激活日期和过期日期。
  6. 点击“创建”。

为了提供对我们创建的秘密的访问权限,请按照以下步骤进行操作。

  1. 从密钥保管库屏幕中选择“访问控制 (IAM)”。
  2. 点击“添加角色分配”。
  3. 从显示的角色列表中选择要分配的角色。
  4. 将访问权限分配给“托管标识”或“用户、组或服务主体”。
  5. 选择要分配角色的成员。
  6. 可选择指定角色的描述。
  7. 点击“下一步”。
  8. 点击“查看 + 分配”。

从Azure Key Vault中读取数据

然后,我们创建DefaultAzureCredential类的实例,并将其作为参数传递给SecretClient类。这将创建一个我们可以用来连接和使用Azure Key Vault的秘密客户端。在创建SecretClient的实例时,还应该指定KeyVault URI,如下面给出的代码片段所示。

var credentials = new DefaultAzureCredential();
azureKeyVaultSecretClient = new SecretClient(new
Uri(KeyVaultUri), credentials);

这里是完整的代码清单可以参考一下。

 class Program
{
        const string KeyVaultName = "AzureKeyValueExample";
        const string KeyVaultUri = $ https://{KeyVaultName}.vault.azure.net";
        static SecretClient ? azureKeyVaultSecretClient;
        static void Main(string[] args)
        {
            var credentials = new DefaultAzureCredential();
            azureKeyVaultSecretClient = new SecretClient(new
            Uri(KeyVaultUri), credentials);
            Console.WriteLine("Displaying all secrets with their values:");
            var azureKeyVaultSecrets =
            azureKeyVaultSecretClient.GetPropertiesOfSecrets();
            foreach(var secret in azureKeyVaultSecrets)
            {
                var secretValue =
                azureKeyVaultSecretClient.GetSecret(secret.Name);
                Console.WriteLine($ "{secret.Name} |
                {secretValue.Value.Value} |
                {secretValue.Value.Properties.ContentType}"
);
            }
            Console.Read();
        }
    }

在这里插入图片描述

如图所示。当你在控制台窗口中执行上述程序时,它将显示您的秘密及其值。

Azure Key Vault创建一个新密匙

可以使用以下代码片段在密钥保管库实例中创建一个新的秘密并为其分配一个值。

string secretName = "NewSecret";
string secretValue = "NewSecretValue";
await azureKeyVaultSecretClient.SetSecretAsync(secretName, secretValue);
var secret = azureKeyVaultSecretClient.GetSecret(secretName);
Console.WriteLine($ "{secretName} created with value {secretValue}");

然后可以在Azure门户中查看到新创建的秘密,如下图所示

新密钥显示在Azure门户的密钥库屏幕上。

从Azure Key Vault中删除一个秘密

使用SecretClient类的StartDeleteSecret方法可以从Azure Key Vault中删除一个秘密。只需要将要删除的秘密的名称作为参数传递给该方法,如下面的代码片段所示。

string secretNameForDelete = "NewSecret";
var deleteOperation = azureKeyVaultSecretClient.StartDeleteSecret(secretNameForDelete);
Console.WriteLine($"Deleting secret {secretNameForDelete} from Key Vault");
while (!deleteOperation.HasCompleted)
{
     Thread.Sleep(500);
     deleteOperation.UpdateStatus();
}
Console.WriteLine($"Secret {secretNameForDelete} deleted from Key Vault");
Console.Read();

执行完以后你就可以发现该密匙已经被删除了。

结论

当您执行程序时,可能会遇到Azure. Identity. CredentialUnavailableException 异常。为了解决这个问题,在Visual Studio IDE中,点击工具 -> 选项 -> Azure服务身份验证。确保您使用Azure账户凭据登录。 通过Azure Key Vault,您可以集中管理密钥和秘密,提高应用程序的安全性和行业合规性,并简化敏感数据的管理和保护。

作者: Joydip Kanjilal

更多技术干货请关注公号“云原生数据库

squids.cn,目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐