gpt4 book ai didi

azure - 使用 Azure 托管标识进行服务间调用

转载 作者:行者123 更新时间:2023-12-02 08:30:18 24 4
gpt4 key购买 nike

现在我正在使用 AAD 应用程序进行服务 A => 服务 B 调用。这包括:

  1. AAD 应用
  2. KeyVault 为 AAD 应用保存 secret /证书
  3. 可访问 KeyVault 的托管身份

流程如下所示:

  1. 服务 A:从托管身份获取 token
  2. 服务 A:前往 KeyVault,出示 token 并获取 AAD 应用的 key
  3. 服务 A:转到 AAD,提供 secret 并请求特定资源的 token
  4. 服务 A:调用服务 B
  5. 服务 B:验证 token 和资源

我想知道是否可以在我的服务中注册托管身份,因此如果提供托管身份 token ,则服务 B 可以信任服务 A。如下所示:

  1. 服务 A:从托管身份获取 token
  2. 服务 A:调用服务 B
  3. 服务 B:验证 token 来自注册的托管身份

可行吗?它是否违反了任何安全最佳实践?

更新:除了下面的答案之外,以下堆栈溢出帖子介绍了如何在一个租户中创建托管身份,以获取另一租户中应用程序的角色声明

Grant service principal access to application in other tenant

最佳答案

我写了一篇关于此主题的博客文章:https://joonasw.net/view/calling-your-apis-with-aad-msi-using-app-permissions .

你一定可以的,这意味着您不需要使用任何 secret 从服务 A 调用服务 B :)

不过,您需要使用 PowerShell/Graph API 将应用程序权限分配给托管身份服务主体。没有用于此目的的 UI。PowerShell 命令示例:

New-AzureADServiceAppRoleAssignment -ObjectId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -Id 32028ccd-3212-4f39-3212-beabd6787d81 -PrincipalId 1606ffaf-7293-4c5b-b971-41ae9122bcfb -ResourceId c3ccaf5a-47d6-4f11-9925-45ec0d833dec

The ObjectId and PrincipalId are both the MSI-generated service principal's id. Id is the id of the role. ResourceId is the id for the API service principal.

这使用了 AzureAD PowerShell 模块。

分配权限后,您的托管身份应该能够为您获取服务 B 的 token 。

不过,您的本地开发环境将需要不同的方法,因为那里没有托管身份。例如,您可以使用其中的客户端 key 来测试对服务 B 的调用。

关于azure - 使用 Azure 托管标识进行服务间调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61453645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com