代码之家  ›  专栏  ›  技术社区  ›  JohnLBevan

如何在Azure密钥库中存储和检索SSH私钥

  •  0
  • JohnLBevan  · 技术社区  · 1 年前

    问题

    是否有正确的方法将RSA私钥存储在Azure密钥库中,以便我可以使用powershell cmdlet(理想情况下是 az.KeyVault module )。

    上下文

    我有一个用于连接到外部SFTP服务的专用SSH密钥。 我想将此存储在Azure密钥库中,并允许我的Azure功能在需要连接到SFTP时读取此内容。

    最初我上传了这个RSA私钥作为密钥。。。但当我提取它时,发现PEM信封是用于公钥的,其值与我上传的非常不同。

    我发现 this post 说明如何使用AZ CLI来存储和检索私钥;把它当作秘密而不是钥匙。 这就是我想要的。。。但由于我的azure函数是在PowerShell中编写的,我希望使用相应的PWSH cmdlet;尽管它们没有像CLI那样指定源文件的选项。

    我在看医生时发现了这个 storing multi-line secrets in Azure Key Vault with powershell …但这说明要使用 ConvertTo-SecureString ;我认为这意味着该值只能由创建它的同一用户/机器组合解密;这对大多数涉及密钥库的场景都没有意义(即,如果密钥依赖于机器,为什么不将其存储在机器上),并且不允许我从机器中设置密钥并将其提供给我的Azure功能。

    当然,我可以简单地用一些其他分隔符(例如管道)替换原始PEM中的换行符,然后在获取机密时恢复此分隔符;但这感觉相当粗鲁。

    1 回复  |  直到 1 年前
        1
  •  3
  •   Santiago Squarzon    1 年前

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

    私钥按预期存储和检索。。。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