Azure Key Vault:公私钥应存为Secret还是Key?Python SDK如何读取?
Azure Key Vault存储RSA密钥:Secret还是Key?
选型建议
- 存为Key:如果需要利用Azure Key Vault的密码学功能(如用该RSA密钥做签名、加密/解密操作),或者需要Vault管理密钥生命周期(轮换、备份、权限管控),优先选Key类型。支持直接导入PEM格式的公私钥,导入后Vault负责密钥安全存储,可通过SDK调用Vault的密码学API使用密钥,无需直接暴露密钥内容。
- 存为Secret:如果仅需存储密钥原始内容,之后取出自行使用(比如导入到其他系统),选Secret即可。Secret适合存储任意敏感文本数据,包括多行PEM格式的密钥。
解决多行密钥读取格式问题
问题原因
读取后密钥变成单行,大概率是存储时未正确保留换行符(比如手动在Portal粘贴时丢失换行,或上传工具自动替换了换行符),而非SDK读取的问题。Key Vault的Secret本身支持存储带换行符的内容。
正确存储方式
用Azure CLI上传时,直接读取本地文件内容(自动保留换行):
# 上传私钥 az keyvault secret set --vault-name your-vault-name --name SNOWFLAKE-TEST-KEY --file rsa_key.p8 # 上传公钥 az keyvault secret set --vault-name your-vault-name --name SNOWFLAKE-TEST-PUB --file rsa_key.pub
升级到新SDK读取(推荐,旧SDK已弃用)
旧的azure.keyvault库已停止维护,建议使用azure-keyvault-secrets和azure-identity SDK,读取时会完整保留换行符:
from azure.identity import ClientSecretCredential from azure.keyvault.secrets import SecretClient # 初始化凭据 credential = ClientSecretCredential( tenant_id="zzz..zzz", client_id="xxx..xxx", client_secret="yyy..yyy" ) # 初始化Secret客户端 secret_client = SecretClient( vault_url="https://keyvault-xxxxxxx.azure.net/", credential=credential ) # 读取密钥 secret = secret_client.get_secret("SNOWFLAKE-TEST-KEY") rsa_key = secret.value # 打印会保留原始多行格式 print(rsa_key)
继续使用旧SDK的解决方案
如果暂时无法升级,先确认存储的内容是否正确(可通过Azure CLI查看:az keyvault secret show --vault-name your-vault-name --name SNOWFLAKE-TEST-KEY --query value -o tsv,检查是否包含换行)。确认存储正确后,secret_bundle.value会保留换行符,直接输出即可。
内容的提问来源于stack exchange,提问作者Srik
相关产品推荐
相关产品推荐

