你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Linux VM 系统分配的托管标识访问 Azure Key Vault

Azure 资源的托管标识是 Azure Active Directory 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题

本教程介绍 Linux 虚拟机 (VM) 如何使用系统分配的托管标识来访问 Azure Key Vault。 作为引导,Key Vault 随后可让客户端应用程序使用机密访问未受 Azure Active Directory (AD) 保护的资源。 托管服务标识由 Azure 自动管理,可用于向支持 Azure AD 身份验证的服务进行身份验证,这样就无需在代码中包含身份验证信息了。

学习如何:

  • 授予 VM 对 Key Vault 中存储的密钥的访问权限
  • 使用 VM 标识获取访问令牌,并使用它来检索 Key Vault 中的密钥

先决条件

创建密钥保管库

本部分说明如何授予 VM 访问密钥保管库中存储的密钥的权限。 使用 Azure 资源的托管标识,代码可以获取访问令牌,对支持 Azure AD 身份验证的资源进行身份验证。  但是,并非所有 Azure 服务都支持 Azure AD 身份验证。 若要将 Azure 资源的托管标识用于这些服务,请将服务凭据存储在 Azure Key Vault 中,然后使用 VM 的托管标识访问 Key Vault 以检索凭据。

首先,我们需要创建一个 Key Vault 并授予 VM 的系统分配托管标识对该 Key Vault 的访问权限。

  1. 打开 Azure 门户

  2. 在左侧导航栏的顶部,选择“创建资源”

  3. 在“搜索市场”框中,键入“Key Vault”,然后按 Enter 。  

  4. 从结果中选择“Key Vault”。

  5. 选择“创建”

  6. 为新 Key Vault 提供一个名称

    Create a Key vault screen

  7. 填写所有必填信息,以确保选择在其中创建了本教程所用虚拟机的订阅和资源组。

  8. 选择“查看 + 创建”

  9. 选择“创建”

创建机密

接下来,将机密添加到 Key Vault,以便稍后可以使用在 VM 中运行的代码检索此机密。 本教程使用的是 PowerShell,但相同的概念适用于在此虚拟机中执行的任何代码。

  1. 导航到新创建的密钥保管库。

  2. 选择“密钥”,然后单击“添加”

  3. 选择“生成/导入”

  4. 在“创建机密”屏幕的“上传选项”中,将“手动”保留为选中状态 。

  5. 输入密钥的名称和值。  该值可以是任何需要的内容。 

  6. 明确指定激活日期和到期日期,并将“已启用”设置为“是”。 

  7. 单击“创建”以创建密钥。

    Create a secret

授予访问权限

需要对虚拟机使用的托管标识授予访问权限,以便读取将存储在密钥保管库中的机密。

  1. 导航到新创建的密钥保管库

  2. 在左侧菜单中选择“访问策略”。

  3. 选择“添加访问策略”

    key vault create access policy screen

  4. 在“从模板配置(可选)”下的“添加访问策略”部分的下拉菜单中选择“机密管理” 。

  5. 选择“选择主体”,并在搜索字段中输入之前创建的 VM 的名称。  选择结果列表中的 VM,然后选择“选择”。

  6. 选择“添加”

  7. 选择“保存”。

访问数据

若要完成这些步骤,需要使用 SSH 客户端。  如果使用的是 Windows,可以在适用于 Linux 的 Windows 子系统中使用 SSH 客户端。 如果需要有关配置 SSH 客户端密钥的帮助,请参阅如何在 Azure 上将 SSH 密钥与 Windows 配合使用如何创建和使用适用于 Azure 中 Linux VM 的 SSH 公钥和私钥对

重要

所有 Azure SDK 都支持 Azure.Identity 库,这使你可以轻松获取 Azure AD 令牌来访问目标服务。 详细了解 Azure SDK 并利用 Azure.Identity 库。

  1. 在门户中,转到 Linux VM,并单击“概述” 中的“连接” 。 

  2. 使用所选的 SSH 客户端连接 到 VM。 

  3. 在终端窗口中,使用 CURL 向 Azure 资源终结点的本地托管标识发出请求,以获取 Azure Key Vault 的访问令牌。     下面是用于获取访问令牌的 CURL 请求。  

    curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true  
    

    响应包括访问资源管理器所需的访问令牌。 

    响应:

    {"access_token":"eyJ0eXAi...",
    "refresh_token":"",
    "expires_in":"3599",
    "expires_on":"1504130527",
    "not_before":"1504126627",
    "resource":"https://vault.azure.net",
    "token_type":"Bearer"} 
    

    可以使用此访问令牌对 Azure Key Vault 进行身份验证。  下一个 CURL 请求显示如何使用 CURL 和 Key Vault REST API 从 Key Vault 读取密钥。  你将需要 Key Vault 的 URL,该 URL 位于 Key Vault 的“概述”页的“基本信息”部分 。  另外,还需要在前面的调用中获取的访问令牌。 

    curl 'https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01' -H "Authorization: Bearer <ACCESS TOKEN>" 
    

    响应将如下所示:

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

在检索 Key Vault 中的机密后,可以使用该机密向需要名称和密码的服务进行身份验证。

清理资源

需要清理资源时,请访问 Azure 门户,选择“资源组”,找到并选择在本教程中创建的资源组(例如 mi-test),然后使用“删除资源组”命令。

此外,也可以通过 PowerShell 或 CLI 执行此操作

后续步骤

在本教程中,你已学习了如何使用 Linux VM 系统分配的托管标识来访问 Azure Key Vault。 若要详细了解 Azure Key Vault,请参阅: