代码之家  ›  专栏  ›  技术社区  ›  dot

azure广告应用程序注册-一个允许我将azure角色分配添加到托管id,另一个不允许

  •  0
  • dot  · 技术社区  · 3 年前

    我已经手动创建了2个不同的azure应用程序注册。据我所见,他们是一样的。 然而,当我尝试使用它们以编程方式运行将Azure角色分配给托管ID的powershell脚本时,一个有效,另一个失败。

    具体来说,我想添加3个角色:

    Azure门户主页->MyResourceGroup->MyManagedId->Azure角色分配。

    角色包括:

    • 存储表数据贡献者
    • Azure服务总线数据所有者
    • 存储队列数据参与者

    从我所看到的应用程序注册情况来看:

    • 两者都是订阅级别的所有者。(订阅->访问控制(IAM))
    • 两人都创造了新的秘密
    • 两者都具有“API权限”部分列出的这些权限:
    权限名称 类型 需要管理员同意
    Application.ReadWrite.OwnedBy 应用
    AppRoleAssignment.ReadWrite.All 应用
    User.Read 委派

    当我尝试运行分配角色的脚本时,应用程序reg 1会起作用。我最终得到了我需要的存储帐户角色。当我使用应用程序reg 2时,它会失败,并出现以下错误:

    {
        "status": "Failed",
        "error": {
            "code": "DeploymentFailed",
            "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.",
            "details": [{
                "code": "BadRequest",
                "message": "{\r\n  \"error\": {\r\n    \"code\": \"InvalidPrincipalId\",\r\n    \"message\": \"A valid principal ID must be provided for role assignment.\"\r\n  }\r\n}"
            }, {
                "code": "BadRequest",
                "message": "{\r\n  \"error\": {\r\n    \"code\": \"InvalidPrincipalId\",\r\n    \"message\": \"A valid principal ID must be provided for role assignment.\"\r\n  }\r\n}"
    

    这是剧本:

    #Load Environment variables that drive this script. 
    $currentEnv = (Get-Content './vars.json' | Out-String | ConvertFrom-Json)
    
    az cache purge
    
    az login `
         --service-principal `
         --username $currentEnv.AZ_DEPLOYMENT_CLIENT_ID `
         --password $currentEnv.AZ_DEPLOYMENT_CLIENT_SECRET `
         --tenant $currentEnv.AZ_TENANT_ID `
         --allow-no-subscriptions
    
    #set the subscription we want to use
    az account `
         set --subscription $currentEnv.AZ_SUBSCRIPTION_ID
    
    az resource list `
         -g $currentEnv.AZ_RESOURCE_GROUP_NAME `
         -o table
    
    
    #look up the app function name for this resource group
    $AZ_FUNCTION_APP = az functionapp list `
        -g $currentEnv.AZ_RESOURCE_GROUP_NAME `
        -o json | ConvertFrom-Json
    Write-output $AZ_FUNCTION_APP.Name
    
    $MANAGED_ID_DISPLAY_NAME = $AZ_FUNCTION_APP.Name + "-userId"
    Write-output $MANAGED_ID_DISPLAY_NAME + " is the name of the managed identity"
    
    $objectid=$(az ad sp list --display-name $MANAGED_ID_DISPLAY_NAME --query [].objectId --output tsv)
    Write-output $objectid
    
    az deployment group create `
        --resource-group $currentEnv.AZ_RESOURCE_GROUP_NAME `
        --template-file "./arm_templates/rbac-role.json" `
        --parameters `
        principalId=$objectid `
        builtInRoleType="['StorageQueueDataContributor', 'StorageTableDataContributor','AzureServiceBusDataOwner']"
    

    剧本实际上正在消亡的一行是这样的:

    $objectid=$(az ad sp list --display-name $MANAGED_ID_DISPLAY_NAME --query [].objectId --output tsv)
    

    当我在谷歌上搜索这个错误时,我看到一些文章指出,应用程序注册必须是所有者或用户访问管理员。 我尝试将“用户访问管理”权限添加到失败的应用程序reg 2。但这并没有什么区别。

    以下是显示Subscription角色的屏幕截图。有效的注册是以小写“bi”结尾的注册。失败的是名称中包含“BI Deploy”的名称。

    enter image description here

    1 回复  |  直到 3 年前
        1
  •  0
  •   Shiraz Bhaiji    3 年前

    可以使用“-”作为名称的一部分。

    请尝试更改名称。

    下一个想法:

    您是否为两个应用程序都创建了托管身份?