如何在 Azure Key Vault 中存储和检索 SSH 私钥

问题描述 投票:0回答:1

问题

是否有正确的方法将 RSA 私钥存储在 Azure Key Vault 中,以便我可以使用 powershell cmdlet(最好是 az.KeyVault 模块)检索它(在不同用户下、在不同设备上)。

背景

我有一个 SSH 私钥,用于连接到外部 SFTP 服务。 我想将其存储在 Azure Key Vault 中,并允许我的 Azure Function 在需要连接到 SFTP 时读取此内容。

最初我上传了这个 RSA 私钥作为密钥...但发现当我获取它时,PEM 信封是公钥,并且该值与我上传的值非常不同。

我发现这篇文章介绍了如何使用 AZ CLI 来存储和检索私钥;将其视为秘密而不是钥匙。 这就是我想要的......但由于我的 azure 函数是用 PowerShell 编写的,我希望使用相应的 PWSH cmdlet;尽管它们没有像 CLI 那样指定源文件的选项。

查看文档,我发现这个使用 powershell 在 Azure Key Vault 中存储多行机密...但上面说要使用

ConvertTo-SecureString
;我认为这意味着该值只能由创建它的同一用户/机器组合解密;这对于涉及 Key Vault 的大多数场景来说没有意义(即,如果密钥无论如何都依赖于计算机,为什么不将密钥存储在计算机上),并且不允许我从我的计算机设置密钥并将其提供给我的用户Azure 函数。

我当然可以简单地将原始 PEM 中的换行符替换为其他分隔符(例如管道),然后在获取秘密时恢复它;但这感觉相当老套。

azure powershell azure-keyvault private-key powershell-core
1个回答
0
投票

我刚刚意识到我误解了......我认为转换为安全字符串是将其编码为安全字符串存储;相反,这只是因为函数的参数需要一个安全字符串。

私钥按预期存储和检索... MS 文档中关于换行符被格式化为转义字符(即

'\n'
)的观点是不正确的;它们按预期保存。

根据文件中的值设置秘密

$pem = (Get-Content '.\myPrivateKey.pem' -Raw)
Set-AzKeyVaultSecret -VaultName 'MyKeyVault' -Name 'MySftpPrivateKey' `
    -SecretValue ($pem | ConvertTo-SecureString -AsPlainText -Force)

找回私钥

$myPlaintextPrivateKey = Get-AzKeyVaultSecret -VaultName `
    'MyKeyVault' -Name 'MySftpPrivateKey' -AsPlainText
© www.soinside.com 2019 - 2024. All rights reserved.