使用 Azure 标识库向 Azure 服务验证 Go 应用

应用可以使用 Azure 身份库来进行 Microsoft Entra 身份验证,从而获得对 Azure 服务和资源的访问权限。 此身份验证要求适用于应用是部署到 Azure、托管在本地还是在开发人员工作站本地运行。 以下各节介绍了在不同环境中使用 Azure SDK 客户端库时,对应用程序进行身份验证以连接到 Microsoft Entra ID 的推荐方法。

通过 Microsoft Entra ID 进行基于令牌的身份验证是向 Azure 进行身份验证的建议方法,而不是使用连接字符串或基于密钥的选项。 适用于 Go 的 Azure 标识客户端模块提供基于令牌的身份验证,并使应用能够向 Azure 资源进行身份验证,无论应用是在本地、Azure 还是在本地服务器上运行。

基于令牌的身份验证的优点

基于令牌的身份验证在连接字符串方面具有以下优势:

  • 基于令牌的身份验证可确保只有用于访问 Azure 资源的特定应用才能执行此作,而具有连接字符串的任何人或任何应用都可以连接到 Azure 资源。
  • 通过基于令牌的身份验证,可以进一步限制 Azure 资源的访问,仅限于应用所需的特定权限。 此方法遵循 最低特权原则。 相比之下,连接字符串授予对 Azure 资源的完整权限。
  • 使用 托管标识 进行基于令牌的身份验证时,Azure 会为你处理管理功能,因此无需担心安全或轮换机密等任务。 此功能使应用更安全,因为没有可能泄露的连接字符串或应用程序机密。
  • 连接字符串在功能上等效于凭据,需要特殊处理以防止意外泄漏。 必须安全地存储它们(例如,在 Azure Key Vault 中),并且永远不会在应用程序中对其进行硬编码或将它们提交到源代码管理。 Microsoft安全未来计划(SFI)禁止使用连接字符串和类似的长期机密,因为它们可用于泄露应用程序(如果未仔细管理)。
  • Azure 标识库会为你获取和管理Microsoft Entra 令牌。

将连接字符串的使用限制在无法使用基于令牌的身份验证的场景、初始概念验证应用程序,或用于不访问生产或敏感数据的开发原型。 如果可能,请使用 Azure 标识库中的凭据类型向 Azure 资源进行身份验证。

跨不同环境进行身份验证

应用用来对 Azure 资源进行身份验证的基于令牌的身份验证类型取决于应用运行的位置。 下图提供了适用于不同方案和环境的指南:

显示应用的推荐基于令牌的身份验证策略的示意图,具体取决于应用的运行位置。

当应用处于以下状态时:

  • 托管在 Azure 上:应用应使用托管标识向 Azure 资源进行身份验证。 有关详细信息,请参阅 服务器环境中的身份验证
  • 在开发过程中本地运行:该应用程序可以使用应用服务主体进行本地开发身份验证,或者使用开发人员的 Azure 凭据来进行身份验证。 有关详细信息,请参阅 本地开发期间的身份验证
  • 托管在本地:应用应使用应用程序服务主体或 Azure Arc 托管标识向 Azure 资源进行身份验证。 有关详细信息,请参阅 服务器环境中的身份验证

Azure 托管应用的身份验证

在 Azure 上托管应用时,它可以使用托管标识向 Azure 资源进行身份验证,而无需管理任何凭据。 有两种类型的托管标识:用户分配和系统分配。

使用用户分配的托管标识

将用户分配的托管标识创建为独立的 Azure 资源。 可以将它分配给一个或多个 Azure 资源,从而允许这些资源共享相同的标识和权限。 若要使用用户分配的托管标识进行身份验证,请创建标识,将其分配给 Azure 资源,然后将应用配置为通过指定其客户端 ID、资源 ID 或对象 ID 来使用此标识进行身份验证。

使用系统分配的托管标识

直接在 Azure 资源上启用系统分配的托管标识。 标识绑定到该资源的生命周期,并在删除资源时自动删除。 若要使用系统分配的托管标识进行身份验证,请在 Azure 资源上启用标识,然后将应用配置为使用此标识进行身份验证。

在本地开发期间进行身份验证

在本地开发期间,可以使用开发人员凭据或服务主体向 Azure 资源进行身份验证。 通过此身份验证方法,无需将其部署到 Azure,即可测试应用的身份验证逻辑。

使用开发人员凭据

可以在本地开发期间使用自己的 Azure 凭据向 Azure 资源进行身份验证。 通常,使用开发工具(例如 Azure CLI),它可以为应用提供访问 Azure 服务所需的令牌。 此方法很方便,但应仅用于开发目的。

使用服务主体

在 Microsoft Entra 租户中创建服务主体来表示应用,并使用它向 Azure 资源进行身份验证。 可以将应用配置为在本地开发期间使用服务主体凭据。 此方法比使用开发人员凭据更安全,更接近应用在生产环境中进行身份验证的方式。 但是,由于需要机密,它仍然不如使用托管标识。

本地托管的应用的身份验证

对于本地托管的应用,可以使用服务主体对 Azure 资源进行身份验证。 此方法涉及在 Microsoft Entra ID 中创建服务主体,为其分配必要的权限,以及配置应用以使用其凭据。 使用此方法,本地应用可以安全地访问 Azure 服务。