You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让公司A的SPN-A访问公司B云资源并读取标签?

实现公司A的SPN-A读取公司B的Azure资源标签

公司B需要完成的配置步骤

  • 给SPN-A分配读取权限
    1. 登录公司B的Azure门户,进入需要授权的订阅或资源组(如果仅需读取特定资源组的标签)
    2. 打开「访问控制(IAM)」→「添加」→「添加角色分配」
    3. 角色选择「Reader」(如果只想限制标签读取,可选更细粒度的「标签读取者」角色)
    4. 在「成员」选项卡,选择「用户、组或服务主体」,点击「选择成员」
    5. 在弹出窗口的「目录」下拉框中,输入公司A的租户ID/域名找到对应租户,搜索SPN-A的名称或client_id并选中,确认选择
    6. 完成角色分配,等待权限生效(通常几分钟内即可)
  • 检查跨租户访问策略(若遇到权限问题)
    1. 进入公司B的Azure AD →「外部标识」→「跨租户访问设置」
    2. 找到公司A的租户条目,确保「入站访问」设置为「允许」,且允许服务主体的访问请求(若默认策略限制了外部身份)

公司A这边的脚本修改

需要调整Python SDK的认证逻辑,让SPN-A针对公司B的租户获取访问令牌,同时指定公司B的订阅ID:

from azure.identity import ClientSecretCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.compute import ComputeManagementClient

# SPN-A的基础信息(来自公司A的AD)
SPN_CLIENT_ID = "SPN-A的client_id"
SPN_CLIENT_SECRET = "SPN-A的client_secret"
COMPANY_A_TENANT_ID = "公司A的tenant_id"

# 公司B的租户与订阅信息
COMPANY_B_TENANT_ID = "公司B的tenant_id"
COMPANY_B_SUBSCRIPTION_ID = "公司B的subscription_id"

# 创建跨租户认证凭证
credential = ClientSecretCredential(
    tenant_id=COMPANY_A_TENANT_ID,
    client_id=SPN_CLIENT_ID,
    client_secret=SPN_CLIENT_SECRET,
    # 指定目标访问租户(公司B)
    authority=f"https://login.microsoftonline.com/{COMPANY_B_TENANT_ID}"
)

# 示例:读取全量资源标签
resource_client = ResourceManagementClient(credential, COMPANY_B_SUBSCRIPTION_ID)
for resource in resource_client.resources.list():
    print(f"资源名称: {resource.name}, 标签: {resource.tags}")

# 示例:读取VM标签
compute_client = ComputeManagementClient(credential, COMPANY_B_SUBSCRIPTION_ID)
for vm in compute_client.virtual_machines.list_all():
    print(f"VM名称: {vm.name}, 标签: {vm.tags}")

注意事项

  • 确保SPN-A的client_secret未过期,且公司A的AD未限制该SPN的跨租户访问
  • 若仅需读取特定类型资源的标签,可使用对应专业管理客户端(比如磁盘用DiskManagementClient、虚拟网络用NetworkManagementClient),权限分配也可更精准

内容的提问来源于stack exchange,提问作者amitsuneja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:37