【问题标题】:How to assign role to an Azure service principal from different subscription?如何将角色分配给来自不同订阅的 Azure 服务主体?
【发布时间】:2019-06-28 13:32:09
【问题描述】:

问题陈述
目前,我正在借助 azure terraform 在不同订阅中创建/修改 azure 资源。

错误

Principal <appid> does not exist in the directory {destination-tenant-id-for which contribution role required}

考虑以下情况。
我们想在一个订阅中创建 Azure AKS 集群,并且在相同的执行中,我们想更新另一个订阅中的 DNS 定义。如果我们在同一个订阅中同时拥有 DNS 区域和 aks 集群,则此过程运行良好,但如果这两个资源在不同的订阅中,则此过程将不起作用。

采取的步骤
无需分配即可创建服务主体

az ad sp create-for-rbac -n sp-terraform-001 --skip-assignment

为当前订阅的当前 sp 分配贡献者角色

az role assignment create --assignee <appid>  --role Contributor --scope /subscriptions/<sub-id>

*将贡献者角色分配给当前 sp 以获得不同的订阅。它会因 *

而失败
az role assignment create --assignee <appid>  --role Contributor --scope /subscriptions/<diff-sub-id>/<resource-group>....

请告诉我访问其他订阅资源的正确步骤

【问题讨论】:

  • 错误是什么?
  • 这些订阅是否在同一个 Azure AD 租户中?
  • 这两个订阅都在不同的租户 ID 中。我收到错误,例如目录 中不存在 Principal 。根据这个错误,我假设我需要在目标订阅中添加新创建的 SP

标签: azure azure-active-directory


【解决方案1】:

您可以将服务主体的权限分配给多个订阅,这不是问题,因为 SP 位于订阅之外,它位于 Azure AD 中。

但是,您不能将不同 Azure AD 租户中资源的权限分配给服务主体所在的那个,这听起来像是您在此处尝试做的。

【讨论】:

  • 这是正确的,您需要确保在正确的租户中创建 SP。
  • 根据我对aws的理解,我们有类似信任关系的概念。这允许跨不同的 aws 帐户进行角色访问。难道我们在 azure 中没有类似的概念。
  • 不,目前无法让服务主体访问另一个租户。您可以将用户作为访客进行操作,但 SP 不能这样做
【解决方案2】:

首先在附加了“不同”订阅的租户中创建一个服务主体,并将分配给现有服务主体的 appid 传递给该服务主体。我会尝试在命令中解释...

az login --tenant <tenant_requiring_new_sp> --subscription <diff-sub-id>
az ad sp create --id <appid>
az role assignment create --assignee <appid> --role Contributor --scope /subscriptions/<diff-sub-id>

是的,appid(最初)属于不同租户中的服务主体,但服务主体对于租户来说是唯一的(具有自己的 objectid),并且它是分配角色的服务主体。但是,在创建服务主体时传递 appid 时,您指示 Azure AD 为新服务主体使用相同的 appid,然后使用新的唯一 objectid 创建该 appid(最终用于角色分配,而不是appid)。

如果您是一名程序员,将服务主体视为应用注册的“实例”可能会有所帮助,其中应用注册更像是类定义。因此,服务主体“实例”具有可以分配角色的实质,而不是定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 2021-06-14
    • 2021-11-09
    • 2022-08-19
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多