• Asp.net core 学习笔记 Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇


    之前有写过 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 得要先做好哦. 

     
     
     
  • 相关阅读:
    Linux下巧用my.cnf,mysql连接服务器不需要输入账号密码信息
    MySQL 5.6 my.cnf 参数说明
    Docker实战(七)之为镜像添加SSH服务
    Docker实战(六)之使用Dockerfile创建镜像
    Docker实战(五)之端口映射与容器互联
    Docker实战(四)之Docker数据管理
    Docker实战(三)之访问Docker仓库
    Docker实战(二)之操作Docker容器
    Docker实战(一)之使用Docker镜像
    ubuntu16.04之sudo问题
  • 原文地址:https://www.cnblogs.com/keatkeat/p/14397138.html
Copyright © 2020-2023  润新知