【问题标题】:What does the LinkedAuthorizationFailed mean in PowerShell?PowerShell 中的 LinkedAuthorizationFailed 是什么意思?
【发布时间】:2020-03-13 15:14:36
【问题描述】:

我正在尝试使用 PowerShell 在 cosmos db 中添加虚拟网络规则。 VNETS 存在于不同的租户中。我为存储帐户做了同样的事情,它工作得很好。我收到以下错误。有人可以给我一些关于我哪里出错的指示吗?是否可以在 cosmos db 数据库中执行此操作?

Set-AzureRmResource : LinkedAuthorizationFailed : 客户端有权对范围执行操作“Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action” '/subscriptions/Cosmos DB/resourceGroups/nbspreprd3/providers/Microsoft.DocumentDb/databaseAccounts/nbspreprd3-config-document-db 的订阅 ID',但是当前租户 '' 是 无权访问链接订阅“”。 在行:8 字符:5 + 设置-AzureRmResource -ResourceType $ResourceType -ResourceGroupNam ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResource], ErrorResponseMessageException + FullyQualifiedErrorId : LinkedAuthorizationFailed,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

这是 PowerShell 脚本

$ResourceGroupName = "*******"
$accountname = "*******" 
$ResourceType = "Microsoft.DocumentDb/databaseAccounts" 
$cosmosAccount = Get-AzureRMResource -ResourceType $ResourceType -ResourceGroupName $resourceGroupName -Name $accountName
$VnrID1 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/build-2-subnet"
$VnrID2 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/build-3-subnet"
$VnrID3 = "/subscriptions/*******/resourceGroups/build-agents/providers/Microsoft.Network/virtualNetworks/build-agents-vnet/subnets/=build1-subnet"


function setCosmosRule {

    Param($ResourceGroupName, $accountname, $ResourceType, $cosmosAccount, $VnrID1)

    $vnetrules = $cosmosAccount.Properties.virtualNetworkRules
$existsCosmos =($cosmosAccount.Properties.virtualNetworkRules | Where-Object {$_.id -eq $VnrID1} | Measure-Object).Count -ne 0
if(-not($existsCosmos)){

    $ourObject = New-Object -TypeName psobject 
    $ourObject | Add-Member -MemberType NoteProperty -Name id -Value $VnrID1
    $ourObject | Add-Member -MemberType NoteProperty -Name ignoreMissingVNetServiceEndpoint -Value True

    $newVnetRules = $vnetrules, $ourObject
    $cosmosAccount.Properties.virtualNetworkRules = $newVnetRules
    $CosmosDBProperties = $cosmosAccount.Properties
    Set-AzureRmResource -ResourceType $ResourceType -ResourceGroupName $ResourceGroupName -ResourceName $accountname  -Properties $cosmosDBProperties -Force 
}


}

非常感谢任何指针和提示

谢谢你

【问题讨论】:

  • 如果他们在不同的租户中,那么他们不是必须首先通过来自两个订阅的子网进行对等互连吗?
  • 您的 cosmos db 和 Vnet 资源是否在不同的租户和订阅中?
  • 感谢@MarkBrown - 我已经同时查看了两个子网,但仍然遇到相同的错误
  • @JimXu 是的,cosmosdb 在一个租户中,而 vnet 资源在另一个租户中。我认为进行跨租户对等互连会使其工作,但也没有工作。
  • @TaherKhan 请问您是否有权限访问不同的租户?

标签: azure powershell azure-cosmosdb firewall rules


【解决方案1】:

我们通过在外部订阅上授予我们的部署服务主体 Network Contributor 解决了类似的问题。

在部署具有 Key Vault、服务总线、存储帐户和 Cosmos DB 帐户的复合 ARM 模板时,我们在几乎相同的场景中遇到了相同的错误。前三个已成功部署,防火墙是使用来自单独订阅的预期 VNet/子网设置的,与部署目标订阅 VNet 对等。外部订阅中带有 RBAC 的一切看起来都很好。深入研究服务端点的 Microsoft 文档后,我得出了以下结论:

“将 VNet 服务终结点添加到 Azure Cosmos 帐户后,要对帐户设置进行任何更改,您需要访问 Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action 操作对于在 Azure Cosmos 帐户上配置的所有 VNET。此权限是必需的,因为授权过程会在评估任何属性之前验证对资源(例如数据库和虚拟网络资源)的访问。"

来源: https://docs.microsoft.com/en-us/azure/cosmos-db/vnet-service-endpoint?toc=%2Fazure%2Fvirtual-network%2Ftoc.json#are-additional-rbac-permissions-needed-for-azure-cosmos-accounts-with-vnet-service-endpoints

我们需要为 Cosmos DB 帐户添加显式权限并没有什么意义,尤其是因为其他资源类型都很好。添加附加访问策略后,Cosmos DB 帐户就成功部署了。

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2011-10-12
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多