如何在 .NET Core 中使用 Azure Key Vaul

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(newUri(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开发工具等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26214.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论的学习和整理--番外12:2个概率选择比较的题目

目录 1 题目 2 结论 3 算法 3.1 错误算法 3.2 算法1,用期望的方式解方式 3.3 算法2,直接解方程 3.4 算法3,用递归--等比数列求和来算 4 上述比较的意义-回到问题本身 1 题目 题目 3个A合成1个B 方案1:1/4 几率返还一个A…

linux内核调试工具记录

Linux性能测试使用的工具在github网站可见,网址如下: slides: http://www.slideshare.net/brendangregg/linux-performance-analysis-new-tools-and-old-secrets video: https://www.usenix.org/conference/lisa14/conference-program/presentation/greg…

RabbitMQ的使用详解

一、什么是MQ 1、什么是MQ MQ(message queue),本质是个队列,FIFO先入先出。只不过队列中放的是message,是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游…

Node+MySQL+Vue2.0+elementUI实现的博客管理系统(一)

前端部分: Vue项目的入口文件main.js: //引入Vue import Vue from vue //引入App import App from ./App.vue //引入VueRouter import VueRouter from vue-router import router from ./router/index import Vuex from vuex import store from ./store //完整引入…

网络--练习错题笔记

1、SNMP是简单网络管理协议,与邮件发送无关 发送邮件:SMTP协议,简单邮件管理协议 用户发送邮件是利用SMTP协议将编辑好的邮件送往发送端的邮件服务器 2、mac地址前24位是厂商编号 来自IEEE,后24位来自厂商,区别每一个…

JavaSwing+MySQL的购物系统项目

点击以下链接获取源码: https://download.csdn.net/download/qq_64505944/88052733?spm1001.2014.3001.5503 JDK1.8 MySQL5.7 功能:管理员与用户两个角色,管理员可以对商品进行增删改查处理,用户可以浏览查找商品,注…

Flink AggregateFunction窗口函数,merge何时执行

1.前言 在我们使用Flink DataStream API编写业务代码时,aggregate()算子和AggregateFunction无疑是非常常用的。编写一个AggregateFunction需要实现4个方法: /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor li…

2.5 线性表的建表

1. 顺序表建表 #include <iostream>/// <summary> /// 数组最大长度 /// </summary> const int MAX_SIZE 10;/// <summary> /// 顺序表建表 /// </summary> /// <param name"arr">数组</param> /// <param name"…

网络排查工具:MTR 命令使用详解

MTR 是一款强大的网络诊断工具&#xff0c; 全称 my traceroute&#xff0c;是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具。默认发送ICMP数据包进行链路探测。 MTR的安装&#xff1a;yum -y install mtr 查看本机到 www.baidu.com 的路由以及连接情况直接运行如…

Flutter系列文章-Flutter基础

Flutter是Google推出的一种新的移动应用开发框架&#xff0c;允许开发者使用一套代码库同时开发Android和iOS应用。它的设计理念、框架结构、以及对Widget的使用&#xff0c;都让开发者能更有效率地创建高质量的应用。 一、Flutter设计理念 Flutter的设计理念是“一切皆为Wid…

c++——多态(补充)

优先查看&#xff1a;c——多态_Hiland.的博客-CSDN博客 目录 菱形虚拟继承子类的重写问题 菱形虚拟继承中的偏移量补充 逆向思维——汇编查看多态中被重写的虚函数 菱形虚拟继承子类的重写问题 继承环节时&#xff0c;菱形虚拟继承解决了菱形继承的数据冗余和二义性问题。…

SQL性能规范

一、随聊 记录一下吧&#xff0c;2023年7月13日00:11:11&#xff0c;现在的状态真的很&#xff0c;忙&#xff0c;干不完的活&#xff0c;希望巨大的压力&#xff0c;能够让自己快速成长&#xff0c;回想我这一路&#xff0c;21年大专毕业&#xff0c;用一年时间熟悉软件&…