当前位置: 首页 > 知识库问答 >
问题:

安全地访问密钥库机密

公良浩邈
2023-03-14

我在Powershell中编写了一个程序,该程序在Azure Functions应用程序中按计划运行。为了避免硬编码的凭据,我创建了一个Azure密钥库来存储秘密。我在Azure函数中创建了一个托管标识,在Azure Key Vault中创建了秘密,然后在Azure函数中创建了应用程序设置,并使用指向Azure Key Vault中秘密的URL。程序引用应用程序机密(APPSETTING),并按照预期的方式运行:

    $uSecret = $ENV:APPSETTING_SecretUsername 
    $pSecret = $ENV:APPSETTING_SecretPassword 
    $sasSecret = $ENV:APPSETTING_SecretSAS
    $securePassword = ConvertTo-SecureString -String $pSecret -AsPlainText -Force
    $UserCredential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $uSecret, $securePassword
    
    $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

然而,我注意到,如果我通过Windows Powershell(以管理员身份运行)在本地计算机上运行相同的程序,并将上面的行修改如下,则该程序运行良好--这意味着它可以访问Office 365和数据湖存储:

    $uSecret = (Get-AzKeyVaultSecret -VaultName 'auditkeyvault' -Name 'SecretUsername').SecretValueText 
    $pSecret = (Get-AzKeyVaultSecret -VaultName 'auditkeyvault' -Name 'SecretPassword').SecretValueText 
    $sasSecret = (Get-AzKeyVaultSecret -VaultName 'auditkeyvault' -Name 'SecretSAS').SecretValueText 
    $securePassword = ConvertTo-SecureString -String $pSecret -AsPlainText -Force
    $UserCredential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $uSecret, $securePassword
    
    $session = New-PSSession -Configurathtml" target="_blank">ionName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

为什么我能在我的计算机上本地运行这个?我本以为只有Azure功能应用程序能够从Azure密钥库中检索机密,而其他任何资源,比如我的本地电脑,都将被阻止?

为Azure函数创建一个带有特定URL的托管标识的全部目的难道不是这样的吗,这样它就可以将自己标识为经过身份验证/授权的资源来访问密钥?然而,当我使用(get-azkeyvaultsecret-vaultname'auditkeyvault'-name'secretusername').secretvalueText在本地运行上面的程序时,我的程序仍然能够检索密钥并运行!

有人能解释一下为什么会发生这种事或者我是否误解了什么吗?

多谢!

共有1个答案

祁权
2023-03-14

钥匙库的目的是保守你的秘密。

任何授权凭据(通过Keyvault访问策略)都可以通过REST API访问这些机密。

要访问机密,您需要:

    null

您可以有效地使用任何az命令,而无需每次重新验证。调用Get-AzContext获取当前上下文的详细信息。

connect-azaccount在以下位置自动使用时,请保存访问令牌和其他相关信息:C:\users\mak\.azure\azurermcontext.json

如果您首先断开disconnect-azaccount并尝试在不重新验证的情况下再次获取机密,那么它将失败。

 类似资料:
  • 我正在开发一个将文件上传到Azure存储的.NET应用程序。我正在利用https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/教程中所做的客户端加密 应用程序工作,即,我可以成功地上传一个加密的blob到一个选定的存储帐户和容器。 但是,我对RSA密钥的安全性有

  • 我正在使用JGit访问远程Git回购,我需要为此使用SSH。JGit使用JSch提供安全访问。但是,我不确定如何设置JGit的密钥文件和知道主机文件。我所尝试的如下。 创建SshSessionFactory的自定义配置,通过子类化JSchConfigSessionFactory使用: 在我访问远程Git回购的类中,执行了以下操作: 我不知道如何将这个JSch对象与JGit关联,以便它能够成功地连接

  • 我创建了一个CloudFormation模板,它成功地创建了一个IAM用户和一个AccessKey,并将该AccessKey分配给IAM用户。现在,我通过在CloudFormation模板的部分中输出AccessKey来获得AccessKey的秘密。

  • 我为Jetty 9和Kafka使用ssl密钥库。我需要提供密钥库和密钥密码来访问密钥库和私钥。但是,我不想在配置文件中以明文形式提供这些密码。还有哪些其他选项可以安全地提供/加密密码?每种方法的优缺点是什么?

  • 是否有一种方法可以使用Delphi访问Azure密钥库?我可以使用柏林的data.cloud.azureapi单元访问数据库和blob存储,但想从密钥库中获取数据库连接字符串,但似乎找不到任何用于此操作的代码。

  • 问题内容: 我正在使用JGit访问远程Git存储库,并且需要使用SSH。JGit使用JSch提供安全访问。但是,我不确定如何为JGit设置密钥文件和已知主机文件。我尝试过如下。 通过子类化JSchConfigSessionFactory创建了SshSessionFactory的自定义配置: 在我访问远程Git存储库的课程中,执行了以下操作: 我不知道如何将此JSch对象与JGit关联,以便它可以成