【问题标题】:Store key and secret in Azure key-vault在 Azure 密钥保管库中存储密钥和机密
【发布时间】:2020-01-23 03:09:52
【问题描述】:

我们希望将我们的 AWS 密钥和机密存储在 azure key vault 上,因为我们的 VM 位于 Azure 云上。

我们只想将 AWS 机密和密钥保存在 Azure 密钥库中,而不是将它们设置在环境变量中。

然后,我们希望通过代码中的 API 访问它们。

我对 azure key vault 非常陌生,想知道它是否可行?一个简单的示例/参考会很有帮助。

【问题讨论】:

    标签: azure-keyvault


    【解决方案1】:

    有可能,只需将它们存储在 azure keyvault 中并通过 VM MSI(VM 系统分配的托管标识)访问它们。

    参考 - Use a Windows VM system-assigned managed identity to access Azure Key Vault

    完成先决条件并授予 MSI 访问权限,在 VM 中,您可以获取令牌并使用令牌获取密钥。

    看下面的powershell示例,你也可以使用其他语言,逻辑是一样的,看你的需求。

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"}     
    $content = $response.Content | ConvertFrom-Json     
    $KeyVaultToken = $content.access_token     
    (Invoke-WebRequest -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}).content 
    

    回复:

    {"value":"p@ssw0rd!","id":"https://mytestkeyvault.vault.azure.net/secrets/MyTestSecret/7c2204c6093c4d859bc5b9eff8f29050","attributes":{"enabled":true,"created":1505088747,"updated":1505088747,"recoveryLevel":"Purgeable"}} 
    

    更新

    您需要将您的 VM MSI 添加到 keyvault 的 Access Policies

    【讨论】:

    • 谢谢。我尝试了这些步骤,但收到以下错误:Invoke-WebRequest : {"error":{"code":"Forbidden","message":"Access denied. Caller is not found on any access policy.\r\nCaller : appid=123t434t8-b564-8756-9814-87dasvd789d;oid=04bdwj213-3c56-3345-ac21-1vfdsfh7823;numgroups=0;iss= sts.windows.net/a211a444-b560f-112e-5555-4673hjdja\r\nVault: key-aws;location=eastus","innererror ":{"code":"AccessDenied"}}} At line:1 char:2 有什么帮助吗?
    • @PKJ 您需要将您的 VM MSI 添加到具有正确权限的密钥库的 Access policies,只需导航到门户中的密钥库的 Access policies,搜索您的 VM 名称(您需要enable MSI of your VM first),添加正确的权限。
    • @PKJ 你可以查看我更新中的截图。如果对您有帮助,请标记为回答,点击i.stack.imgur.com/LkiIZ.png之类的选项即可,非常感谢。:-)
    • 谢谢!我在“选择主体”中添加了自己而不是虚拟机。
    【解决方案2】:

    Azure KeyVault 具有客户端库,可用于从应用程序与 KeyVault 进行交互。

    例如,这些是与 .NETJavaPythonTypeScript 中的 KeyVault 机密交互的客户端库

    以下是使用 .NET 从 KeyVault 检索机密的方法:

    // Environment variable with the Key Vault endpoint.
    string keyVaultUrl = Environment.GetEnvironmentVariable("AZURE_KEYVAULT_URL");
    
    // create the client to interact with the service
    var client = new SecretClient(new Uri(keyVaultUrl), new DefaultAzureCredential());
    
    KeyVaultSecret secretWithValue = await client.GetSecretAsync("mySecret");
    Console.WriteLine(secretWithValut.Value);
    

    有关详细信息,请查看 .NET 存储库上的 samples 页面。

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多