Implementación de una directiva que se pueda corregir en una suscripción delegada

Azure Lighthouse permite a los proveedores de servicios crear y editar definiciones de directivas en una suscripción delegada. Sin embargo, para implementar directivas que usen una tarea de corrección (es decir, directivas con los efectos deployIfNotExists o modify), deberá crear una identidad administrada en el inquilino del cliente. Azure Policy puede usar esta identidad administrada para implementar la plantilla dentro de la directiva. Este artículo describe los pasos obligatorios para habilitar este escenario, tanto al incorporar el cliente en Azure Lighthouse como al implementar la propia directiva.

Sugerencia

Aunque en este tema hacemos referencia a los proveedores de servicios y clientes, las empresas que administran varios inquilinos pueden usar los mismos procesos.

Creación de un usuario que pueda asignar roles a una identidad administrada en el inquilino del cliente

Al incorporar un cliente en Azure Lighthouse, defina autorizaciones que le concederán acceso a los recursos delegados que se ubican en el inquilino del cliente. Cada autorización especifica un elemento principalId que corresponde a un usuario de Microsoft Entra, un grupo o una entidad de servicio en el inquilino de administración, además de un elemento roleDefinitionId que corresponde al rol integrado de Azure que se va a conceder.

Para permitir que principalId asigne roles a una identidad administrada en el inquilino del cliente, debe establecer roleDefinitionId en Administrador de acceso de usuarios. Aunque este rol normalmente no se admite en Azure Lighthouse, se puede usar en este escenario específico. Conceder este rol a este principalId permite asignar roles integrados específicos a identidades administradas. Estos roles se definen en la propiedad delegatedRoleDefinitionIds y pueden incluir cualquier rol integrado de Azure compatible, excepto el propietario o administrador de acceso de usuario.

Una vez que se incorpora el cliente, el principalId creado en esta autorización podrá asignar estos roles integrados a identidades administradas en el inquilino del cliente. Sin embargo, este no tendrá ningún otro de los permisos que normalmente se asocian con el rol Administrador de acceso de usuario.

Nota

Las asignaciones de roles entre inquilinos deben realizarse actualmente a través de las API, no en Azure Portal.

En el ejemplo siguiente se muestra un principalId que tendrá el rol Administrador de acceso de usuario. Este usuario podrá asignar dos roles integrados a identidades administradas en el inquilino del cliente: Colaborador y Colaborador de Log Analytics.

{
    "principalId": "3kl47fff-5655-4779-b726-2cf02b05c7c4",
    "principalIdDisplayName": "Policy Automation Account",
    "roleDefinitionId": "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
    "delegatedRoleDefinitionIds": [
         "b24988ac-6180-42a0-ab88-20f7382dd24c",
         "92aaf0da-9dab-42b6-94a3-d43ce8d16293"
    ]
}

Implementación de directivas que se pueden corregir

Una vez que haya creado el usuario con los permisos necesarios, tal y como se ha descrito anteriormente, el usuario puede implementar directivas que usan tareas de corrección dentro de las suscripciones delegadas del cliente.

Por ejemplo, supongamos que desea habilitar diagnósticos en los recursos de Azure Key Vault en el inquilino del cliente, tal como se muestra en este ejemplo . Un usuario del inquilino de administración con los permisos adecuados (como se ha descrito anteriormente) implementaría una plantilla de Azure Resource Manager para habilitar este escenario.

La creación de la asignación de directivas que se va a usar con una suscripción delegada debe realizarse actualmente a través de las API, no en Azure Portal. Al hacerlo, apiVersion debe establecerse en 2019-04-01-preview o versiones posteriores para incluir la nueva propiedad delegatedManagedIdentityResourceId. Esta propiedad permite incluir una identidad administrada que reside en el inquilino del cliente (en una suscripción o un grupo de recursos que se ha incorporado a Azure Lighthouse).

En el ejemplo siguiente se muestra una asignación de roles con delegatedManagedIdentityResourceId.

"type": "Microsoft.Authorization/roleAssignments",
            "apiVersion": "2019-04-01-preview",
            "name": "[parameters('rbacGuid')]",
            "dependsOn": [
                "[variables('policyAssignment')]"
            ],
            "properties": {
                "roleDefinitionId": "[concat(subscription().id, '/providers/Microsoft.Authorization/roleDefinitions/', variables('rbacContributor'))]",
                "principalType": "ServicePrincipal",
                "delegatedManagedIdentityResourceId": "[concat(subscription().id, '/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment'))]",
                "principalId": "[toLower(reference(concat('/providers/Microsoft.Authorization/policyAssignments/', variables('policyAssignment')), '2018-05-01', 'Full' ).identity.principalId)]"
            }

Sugerencia

Hay disponible un ejemplo similar en el que se muestra cómo implementar una directiva que agrega o elimina una etiqueta (mediante el efecto Modify) en una suscripción delegada.

Pasos siguientes