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

news2024/11/24 10:52:12

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的第一个java项目

安装了idea软件且本地通过cmd 命令启动了mysql。还安装了java sdk。 总结spring-boot通过resource下的mapping文件下的文件xml语法来增删查改(因为使用了MyBatis,MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映…

7.12 模型显存/mix-precision

一、完全参考:模型的显存和参数量计算 显存占用模型显存(参数)batch_size每个样本显存(输出和梯度动量) 首先是“运算量”和“参数量”两个概念:参数量:这个比较好理解,例如卷积层中的卷积核c_i*k*k*n_o,其参数量就是相…

CAN转EtherNet/IP网关ethernet/ip协议

JM-EIP-CAN 是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种 CAN 总线和 ETHERNET/IP 网络连接起来。 本网关连接到 ETHERNET/IP 总线中做为从站使用,连接到 CAN 总线中根据节点号进行读写。 技术参数 ETHERNET/IP 技术参数 网关做为 E…

【计算机网络】第三章 数据链路层(集线器与交换机)

文章目录 第三章 数据链路层3.8 集线器与交换机总结 第三章 数据链路层 3.8 集线器与交换机 使用 集线器HUB 的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是 CSMA/CD 协议(半双工)。集线器 只工作在物理层&#xff…

UG\NX二次开发 返回视图中的可见对象UF_VIEW_ask_visible_objects

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 返回视图中的可见对象UF_VIEW_ask_visible_objects 效果: 代码: #include "me.hpp" using namespace std; //获取view视图的可见对象 //view = NULL_TAG 当前视图 vector<tag_t>…

Python endswith()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 endswith函数使用详解 1、指定范围2、str可以传入元组3、空字符串为真4、大小写敏…

STM32L+BC20+MQTT协议传输温湿度,GPS数据到阿里云物联网平台

&#xff08;阿里云&#xff09;STM32LBC20MQTT协议传输温湿度&#xff0c;GPS数据到阿里云物联网 1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板…

飞控仿真软件

飞控仿真是一种在计算机模拟环境中对飞行控制系统进行测试和验证的方法。它通过使用仿真软件和工具来模拟飞行器的物理行为、传感器数据和控制算法的执行&#xff0c;以评估飞行控制系统的性能和稳定性。 原理 物理模型&#xff1a;仿真软件使用物理模型来描述飞行器的运动行为…

成为一名网络安全工程师难吗?

如果对该专业感兴趣且愿意为之努力&#xff0c;那么学起来是十分轻松的&#xff1b;如果不感兴趣且不愿下功夫&#xff0c;学习起来肯定比较难的 需要学什么&#xff1f; 成为网络安全工程师&#xff0c;需要经历3各阶段&#xff1a;初级安全工程师→中级安全工程师→高级安全…

【Linux后端服务器开发】socket套接字

目录 一、socket 套接字概述 二、socket 函数接口 三、IP地址与端口号的网络格式 四、TCP协议的本地通信C语言示例 一、socket 套接字概述 socket 是什么&#xff1f; socket 本质上是一个抽象的概念&#xff0c;它是一组用于网络通信的 API&#xff0c;提供了一种统一的…

宝塔部署前后端分离项目

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 项目部署 ✨特色专栏&…

【数据结构导论】第 5 章:图

目录 一、图的基本概念 &#xff08;1&#xff09;图的定义 &#xff08;2&#xff09;图的基本术语 &#xff08;3&#xff09;图的基本运算 二、图的存储结构 &#xff08;1&#xff09;邻接矩阵 ① 图的邻接矩阵 ② 带权图(网)的邻接矩阵 ③ 邻接矩阵的类型定…

【UE4】在控件蓝图上播放视频

UE版本&#xff1a;4.26 在上一篇文章中&#xff08;【UE】场景内播放视频、音频&#xff09;介绍了如何在场景中播放视频&#xff0c;本篇文章将介绍如何在UI上播放视频 效果 步骤 1. 首先在“Content”文件夹中新建一个名为“Movies”的文件夹 2. 在文件夹中随便添加一个.…

iManager for K8S 站点定制(以MongoDB为例)

作者&#xff1a;ls 目录 背景前期准备实现效果实现过程附录YAML中的属性配置占位符列表 背景 SuperMap iManager支持一键创建用户定制的站点&#xff0c;可将已添加的站点模板创建为站点环境&#xff0c;并通过站点使用应用。   定制站点与其他站点相同&#xff0c;在监管方…

学习PostgreSQL的优势

学习 PostgreSQL 可以为您打开许多就业机会。 PostgreSQL 是一种强大的关系型数据库管理系统&#xff0c;被广泛用于企业和组织中的数据管理和应用程序开发。 以下是一些学习 PostgreSQL 可能帮助您找到的工作领域&#xff1a; **1.数据库管理员&#xff1a;**作为 PostgreSQ…

负载均衡详解

负载均衡可以简单分为服务端负载均衡和客户端负载均衡这两种。 根据 OSI 模型&#xff0c;服务端负载均衡还可以分为&#xff1a; 二层负载均衡三层负载均衡四层负载均衡七层负载均衡 最常见的是四层和七层负载均衡 四层负载均衡 工作在 OSI 模型第四层&#xff0c;也就是传…

TIA博途中FC或FB块被多次调用后,监控单个块执行情况的具体方法

TIA博途中FC或FB块被多次调用后,监控单个块执行情况的具体方法 本文以简单的电机启保停程序为例进行说明: 如下图所示,首先添加一个“启保停”FC块,定义块的接口变量,并编写梯形图程序, 如下图所示,在PLC数据类型中添加一个motorControl数据类型,其中包含start、stop…

Python replace()函数使用详解,Python替换字符串

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 replace函数使用详解 1、不改变原字符串2、指定替换次数3、转义符4、替换列表、元…

opencv 基础图像操作-彩色图像

opencv 基础图像操作-彩色图像 彩色图像 相比二值图像和灰度图像&#xff0c;彩色图像是更常见的一类图像&#xff0c;它能表现更丰富的细节信息。 神经生理学实验发现&#xff0c;在视网膜上存在三种不同的颜色感受器&#xff0c;能够感受三种不同的颜色&#xff1a;红色、绿色…

边缘计算在智慧校园应用,实现校园智能化管理

随着科技的发展和互联网技术进步&#xff0c;校园管理正逐步实现数字化、智能化转型。边缘计算作为一种新兴技术&#xff0c;通过在离数据源较近的地方进行数据处理&#xff0c;实现了实时性分析与响应&#xff0c;为校园带来了更智能、安全的管理方式。 学生学习状态监控 AI动…