Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇
更新 30-04-2023
最新版本请看这 2 篇
ASP.NET Core – User Secret & Azure Key Vault
之前有写过 2 篇关于 key-vault 和 data protect 的, 但是最近发现之前的 dll 已经废弃了, 而且 Azure 有一点点更新了. 所以这些写多一篇
https://www.cnblogs.com/keatkeat/p/9313468.html (Azure key-vault 第一篇)
https://www.cnblogs.com/keatkeat/p/9316389.html (Data protect 第一篇)
参考:
https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-5.0&tabs=windows
https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview
https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-5.0
https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-nonaad
https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-virtual-machine#:~:text=Azure%20Key%20Vault%20helps%20you,%2C%20services%2C%20and%20IT%20resources.&text=Create%20an%20Azure%20virtual%20machine,permissions%20to%20the%20VM%20identity.
先讲个 overview
key vault 一样是去 azure 做就可以了, 只是现在比较流行用 azure cli 来做, 比较方便啦.
从前 website 要访问 key vault 需要弄一个 app id 和 app secret
现在改成 2 种方式,
第一 AD Directory Id + AD Application Id + AD Cert Thumbprint 才可以访问 AD 就是 Azure Active Directory
cert 需要自己做, 然后 upload 到 AD 去. 然后 web server 也要 install. 由于 IIS 要访问 cert store 会遇到许多 permission 的限制, 所以如果你的网站是 host 在 azure 的话就选方案 2 吧.
第二 就简单多了, 不需要任何 APP, 但是需要 host in Azure. VM or App service 都可以.
data protect 方面几乎没有什么改动, 一样做 storage account, 一样做 key 在 key-vault.
唯一的区别是获取 key-vault 的 key 的时候也是用到了上面的第一或二方式.
好现在 step by step 讲
https://docs.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli
install > login
az group create --name "klc-resource-group" --location "SoutheastAsia"
az keyvault create --name "klc-test-key-vault" --resource-group "klc-resource-group" --location "Southeast Asia"
az keyvault secret set --vault-name "klc-test-key-vault" --name "Password" --value "123456"
这样就把 secret 做好了
然后方案 1 的话就是要去弄 AD Application 等了
https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-5.0#use-application-id-and-x509-certificate-for-non-azure-hosted-apps
follow 这个 step
cert 的做法可以参考我这篇
https://www.cnblogs.com/keatkeat/p/13412953.html
https://www.cnblogs.com/keatkeat/p/9326389.html
然后去 azure search Azure Active Directory > App registration > create app > 进入 app > Certificates & secrets > upload cert
然后把资料写入 appsetting https://github.com/dotnet/AspNetCore.Docs/blob/master/aspnetcore/security/key-vault-configuration/samples/3.x/SampleApp/appsettings.json
其余的 code 就招 sample 做就可以了.
有了 app 就去 key-vault 里面 > Access policies > Add Access Policy > Configure from template (optional) 选 key, secret, cert > Select principal 选刚才做好的 app 就可以了.
ok 这个是第一种方案.
第二种就更简单了.
去 vm > Identity > System assigned enable 打勾 > 去 key-vault > Access policies >
Azure Virtual Machines for deplyment 打勾, 然后 Add Access Policy > Configure from template (optional) 选 key, secret, cert > Select principal 选刚才的 vm 就可以了
Permission key 里面 Unwrap Key 和 Wrap Key 都要勾, 做 data protect 的时候会用到.
接下来讲一下 storage account
和之前是一样的, 只是我自己的改成了不需要 app id
services.AddDataProtection()
.SetApplicationName(configuration["DataProtection:ApplicationName"])
.PersistKeysToAzureBlobStorage(new Uri(configuration["DataProtection:CloudStorageUrl"]))
//.PersistKeysToFileSystem(new System.IO.DirectoryInfo($@"{hostingEnvironment.ContentRootPath}\DataProtectXml")) // for 第一次 generate 然后 upload to Azure Blob
.ProtectKeysWithAzureKeyVault(
new Uri(configuration["DataProtection:CloudKeyUrl"]),
new DefaultAzureCredential()
);
for 第一次比较麻烦, 因为它需要你先做一个 xml 在 azure blob 才可以. 官网是有给出方案的. 但是需要比较多的权限, 不仅仅是 sas, 而是需要 storage account 的 connect string.
具体做法就是把 sas 换成 connection string, container name, blob name
blob name 就是 file name 比如 data-protection-key.xml 这样.
有一点要注意的是, 它只会帮你做 blob, 而不是 container. 所以 container 得要先做好哦.
Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇的更多相关文章
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- Asp.net core 学习笔记 ( Data protection )
参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...
- Asp.net Core学习笔记
之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
- Asp.net core 学习笔记 ( identity server 4 JWT Part )
更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...
- Asp.net core 学习笔记 ( Azure key-vault )
参考 : https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2 ...
- Asp.net core 学习笔记 QR code and Barcode
QR code 和 Barcode 经常会使用到. Java 阵营有著名的 zxing https://github.com/zxing/zxing .Net 有对接它的 port https://g ...
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
随机推荐
- 部分解决 | ocrmypdf对中文pdf进行ocr识别后存在多余空格
1.问题 ocrmypdf安装采用的是在windows安装方法具体看 https://media.readthedocs.org/pdf/ocrmypdf/latest/ocrmypdf.pdf 由于 ...
- API引用在Element UI (Vue 2)和Element Plus (Vue 3)中的不同
API 变动 样式类名变化: 一些组件的样式类名有所变动,可能需要更新你的自定义样式. 事件名和属性名变化: 某些组件的事件名和属性名发生了变化,需要检查 Element Plus 文档 以了解详细信 ...
- 机器学习:详解迁移学习(Transfer learning)
详解迁移学习 深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中.所以例如,也许已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那 ...
- 浅析JS构造函数
构造函数(Constructor Function)是 JavaScript 中创建对象的一种重要方式,它不仅让我们能够创建具有相似属性和方法的对象,还能充分利用 JavaScript 的原型继承机制 ...
- CCF 任务调度
样例的示意图 查了一圈,然后很烦,不想学习方法,好卡.查了一些题解,发现都是10分,30分先搁置的博客,最后翻到 堪称官方标称的思路 (CCF题目pat题目各大poj/hdoj好戏那个都没有标程,这里 ...
- 搭建lnmp环境-redis(第四步)
1.下载epel仓库 (前面安装过了) yum install epel-release -y 2.下载redis数据库 yum install redis -y 3.启动redis服务 system ...
- XML 教程——检视阅读
基本 XML 简介 XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据.HTML 被设计用来显示数据. 什么是 XML? XML 指可 ...
- 标准DQN在测试算法性能时为什么要将探索概率epsilon设置为0.05呢,而不是使用其他探索概率的epsilon-greedy策略或者直接使用greedy探索策略呢?
标准dqn的策略网络参数更新所采用的规则为Q-learning中的更新规则,总所周知的是Q-learning是异策略算法,异策略算法就是行为策略和评估策略(更新所得策略)是不同的. 更新规则: q-l ...
- pip install ale_python_interface 安装报错,ModuleNotFoundError: No module named 'ale_python_interface'——fatal error: ale_c_wrapper.h
参考: https://www.cnblogs.com/hasakei/p/10035198.html https://blog.csdn.net/senjie_wang/article/detail ...
- Linux环境下配置vscode的C/C++编译环境
操作系统环境: Linux 配置vscode的C/C++编译环境需要安装插件: 本文的配置是指在linux下不使用vscode插件中自动配置,而是采用手动编写配置文件.主要原因是插件自动生成的C/C ...