Asp.net core 学习笔记 ( Azure key-vault )
更新: 30-04-2023
最新版本请看这篇: ASP.NET Core – User Secret & Azure Key Vault
最新 kv 多了一个功能叫 soft delete, 如果不小心洗掉后, 可以还原哦
az account set --subscription <subscription name or ID>
az keyvault recover --name jbreviews-kv
secret 也是可以 restore 哦
az keyvault secret recover --id "https://jbreviews-kv.vault.azure.net/deletedsecrets/EmailPassword"
参考 :
https://docs.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-2.1&tabs=aspnetcore2x
https://youtube.com/watch?v=cdoY_pnqPiA
https://www.rahulpnath.com/blog/authenticating-a-client-application-with-azure-key-vault/
从前我们都是把一些密码直接写在 web.config 里,比如 sql 密码, email 密码, appId, app secret 等.
源码与密码分离始终是好的.
上次介绍了 User Secret, 不过这个只能用在开发环境下,在生产环境下,我们需要使用 Key-Vault.
这是一个 Azure 的服务, 可以把我们敏感数据保存在 Azure 里头,然后让我们的 Application 在 startup 时通过请求把资料拿下来.
对于安全来说,其实只是增加了一点点点攻击成本而已,主要的好处还是在密码源码分离,还有方便打理上.
流程是这样的,去 Azure 开一个 App 获取 client id 和 client secret
这个为了让我们的程序发请求时用的, 类似 oauth2.0 Client Credentials.
然后在 Azure 创建一个 key-vault 的 secret, 它是一个字典, key value 对应.
记得让 Azure App 有权利访问 key-vault service.
然后在程序 startup 时发请求去获取 key-vault 就可以了.
azure 的 secret 是不能改 value 的,但是可以一直添加 new version
网站只要 restart iis 站点就可以拿到最新的值了.
除了 secret 还有一个常用的是 key
比如在做 data protected 时, 用于 ProtectKeysWithAzureKeyVault,
记得 key 需要在 azure portal Access policies 里打开 wrap key 等等的 permission 哦.
附上图片参考 :
secrets
key
permission