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

如何在不同Azure APIM实例的产品中使用相同订阅密钥

跨Azure APIM实例复用订阅密钥(CLI/ARM模板+ADO自动化实现)

可以通过Azure CLI或ARM模板实现同一产品在两个APIM实例中使用相同订阅密钥的需求,下面是具体操作步骤,以及如何集成到ADO流水线自动化:

Azure CLI 实现流程

1. 在主APIM实例创建订阅并提取密钥

先创建订阅,再通过命令提取生成的主/次密钥:

# ADO流水线中建议用服务主体登录,避免交互式操作
az login --service-principal -u "${SP_CLIENT_ID}" -p "${SP_CLIENT_SECRET}" --tenant "${TENANT_ID}"

# 在主APIM实例创建订阅
az apim subscription create \
  --resource-group "your-main-rg" \
  --service-name "your-primary-apim" \
  --product-id "target-product-id" \
  --name "shared-subscription" \
  --owner-id "user-or-sp-object-id"

# 获取订阅密钥,保存为变量
PRIMARY_KEY=$(az apim subscription show \
  --resource-group "your-main-rg" \
  --service-name "your-primary-apim" \
  --subscription-id "shared-subscription" \
  --query 'primaryKey' -o tsv)

SECONDARY_KEY=$(az apim subscription show \
  --resource-group "your-main-rg" \
  --service-name "your-primary-apim" \
  --subscription-id "shared-subscription" \
  --query 'secondaryKey' -o tsv)

2. 在辅APIM实例创建带指定密钥的订阅

Azure APIM支持在创建订阅时自定义主/次密钥,直接复用主实例的密钥即可:

az apim subscription create \
  --resource-group "your-secondary-rg" \
  --service-name "your-secondary-apim" \
  --product-id "target-product-id" \
  --name "shared-subscription" \
  --owner-id "user-or-sp-object-id" \
  --primary-key "${PRIMARY_KEY}" \
  --secondary-key "${SECONDARY_KEY}"

ARM模板实现流程

1. 主APIM订阅创建模板(含密钥输出)

部署此模板创建主实例的订阅,并输出密钥供后续使用:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "apimServiceName": {
      "type": "string",
      "metadata": { "description": "主APIM实例名称" }
    },
    "productId": {
      "type": "string",
      "metadata": { "description": "目标产品ID" }
    },
    "subscriptionName": {
      "type": "string",
      "metadata": { "description": "共享订阅名称" }
    },
    "ownerObjectId": {
      "type": "string",
      "metadata": { "description": "订阅所有者的Object ID" }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ApiManagement/service/subscriptions",
      "apiVersion": "2022-08-01",
      "name": "[concat(parameters('apimServiceName'), '/', parameters('subscriptionName'))]",
      "properties": {
        "productId": "[concat('/products/', parameters('productId'))]",
        "ownerId": "[concat('/users/', parameters('ownerObjectId'))]",
        "displayName": "[parameters('subscriptionName')]"
      }
    }
  ],
  "outputs": {
    "primaryKey": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ApiManagement/service/subscriptions', parameters('apimServiceName'), parameters('subscriptionName'))).primaryKey]"
    },
    "secondaryKey": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.ApiManagement/service/subscriptions', parameters('apimServiceName'), parameters('subscriptionName'))).secondaryKey]"
    }
  }
}

2. 辅APIM订阅复用密钥模板

将主模板输出的密钥作为参数传入,创建与主实例密钥一致的订阅:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "apimServiceName": {
      "type": "string",
      "metadata": { "description": "辅APIM实例名称" }
    },
    "productId": {
      "type": "string",
      "metadata": { "description": "目标产品ID(需与主实例一致)" }
    },
    "subscriptionName": {
      "type": "string",
      "metadata": { "description": "共享订阅名称(需与主实例一致)" }
    },
    "ownerObjectId": {
      "type": "string",
      "metadata": { "description": "订阅所有者的Object ID(需与主实例一致)" }
    },
    "primaryKey": {
      "type": "string",
      "metadata": { "description": "主实例生成的订阅主键" }
    },
    "secondaryKey": {
      "type": "string",
      "metadata": { "description": "主实例生成的订阅次键" }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ApiManagement/service/subscriptions",
      "apiVersion": "2022-08-01",
      "name": "[concat(parameters('apimServiceName'), '/', parameters('subscriptionName'))]",
      "properties": {
        "productId": "[concat('/products/', parameters('productId'))]",
        "ownerId": "[concat('/users/', parameters('ownerObjectId'))]",
        "displayName": "[parameters('subscriptionName')]",
        "primaryKey": "[parameters('primaryKey')]",
        "secondaryKey": "[parameters('secondaryKey')]"
      }
    }
  ]
}

ADO流水线自动化要点

  1. 权限配置:确保流水线使用的服务主体拥有两个APIM实例所在资源组的Microsoft.ApiManagement/service/subscriptions/write权限。
  2. CLI任务集成:添加两个Azure CLI任务,第一个执行主APIM订阅创建和密钥提取,将密钥存入流水线秘密变量;第二个任务读取变量,执行辅APIM订阅创建。
  3. ARM模板集成:先用"Azure Resource Group Deployment"任务部署主模板,捕获输出的密钥变量;再部署辅模板,将密钥作为参数传入。
  4. 安全注意:所有密钥变量需标记为ADO秘密变量,避免明文泄露。

关键注意事项

  • 两个APIM实例中的目标产品ID必须完全一致,否则订阅无法关联产品。
  • 订阅名称、所有者ID建议保持一致,便于管理和后续切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:53:29