es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Azure Bicep – Asignación de roles – El principal no existe en el directorio.

He creado una plantilla Bicep. En ella creo una identidad asignada por el usuario y la referencio en otros recursos de la siguiente manera:

var identityName = 'mid-dd-test'
var roleName = 'TestRole'
var roleDescription = 'Some test'
var roleScopes = [
    resourceGroup().id
]
var resolvedActions = [
    'Microsoft.Resources/subscriptions/resourcegroups/<em>'
  'Microsoft.Compute/sshPublicKeys/</em>'
]
var permittedDataActions = []

resource userId 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
  name: identityName
  location: resourceGroup().location<br>
}

resource roleDef 'Microsoft.Authorization/roleDefinitions@2018-01-01-preview' = {
  name: guid(subscription().id, 'bicep', 'dsadsd')<br>
  properties: {
    roleName: roleName
    description: roleDescription
    type: 'customRole'<br>
    assignableScopes: roleScopes
    permissions: [
      {<br>
        actions: resolvedActions
        dataActions: permittedDataActions
      }
    ]
  }
}

resource roles 'Microsoft.Authorization/roleAssignments@2018-09-01-preview' = {
  name: guid(subscription().id, 'bicep-roleassignments', 'dsddsd')<br>
  properties: {
    principalId: userId.properties.principalId
    roleDefinitionId: roleDef.id
  }
}

Cada vez que despliego esto, necesito 2 ejecuciones. La primera ejecución termina con el mensaje de error:

El principal XXX no existe en el directorio YYY

donde XXX sería el ID principal que tiene la identidad asignada por el usuario y YYY es el ID de mi inquilino. Si ahora reviso el portal, la identidad se crea y XXX es el ID correcto.

Así que cuando simplemente vuelvo a ejecutar el despliegue, funciona.

Considero que es un error en dependsOn que debería estar relacionado con las plantillas de ARM y no con Bicep. No pude encontrar ningún lugar donde pueda informar problemas de plantillas de ARM a Microsoft.

Estoy preguntando para asegurarme de que no estoy pasando por alto algo más aquí.

Editar: Agregué un ejemplo de trabajo completo que muestra el error. Para usarlo, copia el contenido del script en un archivo local llamado test.bicep. Luego crea un grupo de recursos (llamémoslo “rg-test”), asegúrate de que tu contexto local de POSH esté configurado correctamente y ejecuta la siguiente línea en la carpeta donde guardaste el bicep:

New-AzResourceGroupDeployment -Name deploy -Mode Incremental -TemplateFile .\test.bicep -ResourceGroupName rg-test
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con la plantilla de Bicep parece estar relacionado con el tiempo y las dependencias. Cuando se crea una identidad asignada por el usuario, se necesita algo de tiempo para propagarse en todo Azure AD y estar disponible para su uso. En la plantilla proporcionada, hay una dependencia establecida entre la identidad asignada por el usuario y la asignación de roles, lo que significa que esta última se creará antes de que la identidad esté totalmente propagada. Esto lleva al mensaje de error que encontraste durante la primera ejecución de implementación.

    Para solucionar este problema, puedes agregar una propiedad dependsOn al recurso roles, asegurándote de que dependa del recurso userId. Esto garantizará que la identidad del usuario esté totalmente disponible antes de que se cree la asignación de roles.

    Aquí tienes un ejemplo de código con la propiedad dependsOn añadida:

    resource roles 'Microsoft.Authorization/roleAssignments@2018-09-01-preview' = {
      name: guid(subscription().id, 'asignacion-roles-bicep', 'dsddsd')
      dependsOn: [
        userId
      ]
      properties: {
        principalId: userId.properties.principalId
        roleDefinitionId: roleDef.id
      }
    }
    

    Con esta modificación, la implementación debería tener éxito en la primera ejecución. Si todavía encuentras el mismo error, es posible que debas aumentar el tiempo de espera de implementación para permitir suficiente tiempo para que la identidad se propague en todo Azure AD.

    En cuanto a informar problemas de plantillas de ARM a Microsoft, puedes utilizar los canales de comentarios proporcionados por el soporte técnico de Azure. Puedes enviar una solicitud de soporte a través del portal de Azure o publicar tu problema en el foro de comentarios de Azure.

Comments are closed.