APIM 命名值创建或更新其余 api 不起作用

问题描述 投票:0回答:1

我正在使用 REST 创建或更新 Rest api 在我的 PowerShell 脚本中创建 APIM 命名值

脚本:

 $requestPayload = @{
    properties = @{
        displayName = $displayname
        keyVault = @{
            secretIdentifier = $SecretIdentifier 
        }
        secret = $true
    }
}

 # Convert the hash table to a JSON string
            $jsonPayload = $requestPayload | ConvertTo-Json -Depth 5

            # Create/Update named values

            
            $baseurl="https://management.azure.com/subscriptions/";
    
            $headers = @{ "Authorization" = "Bearer " + $accesstoken  }$url=$baseurl+$SubscriptionId+"/resourceGroups/"+$ResourceGroupName+"/providers/Microsoft.ApiManagement/service/"+$APIMResourceName+"/namedValues/$($Name)?api-version=2022-08-01";
        
            $result=Invoke-WebRequest  $url -Method 'Put' -Headers $headers  -Body  $jsonPayload -ContentType "application/json" -UseBasicParsing
 Write-Output( $result)

此脚本在我的 3 个环境中运行得非常好(预生产订阅中的实验室和测试以及生产订阅中的 PRV),但在生产环境中它不起作用。

所有 4 个环境中的输出 $result 都是相同的,即接受响应代码 202。除了生产环境之外,命名值是使用 keyvault 秘密引用正确创建的,只有在生产环境中它才不起作用。我无法找出实际原因,因为此 api 返回 202 接受的响应。在 APIM 服务中,我还检查了活动日志,我还可以看到已接受和已启动的日志,但未成功或完成或任何错误日志。

如果不知道错误详细信息,就很难解决这个问题。

我还验证了 apim 实例,它具有在 keyvault 中设置的获取和列出访问策略。

请告诉我有什么方法可以找出错误所在。

azure azure-keyvault azure-api-management
1个回答
0
投票

202 响应应带有 Location 标头,指向您可以监控进程的 URL。使用 GET 请求进行轮询,直到您得到除 202 之外的任何其他内容,并且该响应应包含错误信息。

如果我不得不猜测,您在产品中的 APIM 服务无权访问您为其创建命名值的 KeyVault。确保 APIM 服务已启用托管身份。如果您的 KeyVault 在访问策略中配置,请确保将 prod APIM 服务的身份添加到 ACL 以读取机密值。如果您的 KeyVault 处于 RBAC 模式,请确保在访问控制中至少添加 APIM 服务“秘密用户”角色。

© www.soinside.com 2019 - 2024. All rights reserved.