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. Hay varios pasos obligatorios para habilitar este escenario, tanto al incorporar el cliente de 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

Cuando incorpore un cliente a una instancia de Azure Lighthouse, use una plantilla de Azure Resource Manager para definir las 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 Azure AD, 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 cree una identidad administrada en el inquilino del cliente, debe establecer su roleDefinitionId en Administrador de acceso de usuario. Aunque por lo general este rol no se admite, este sí se puede usar en este escenario concreto. Esto permite que las cuentas de usuario que tengan este permiso puedan asignar uno o varios roles integrados específicos a las identidades administradas. Estos roles deben definirse en la propiedad delegatedRoleDefinitionIds y pueden incluir cualquier rol integrado de Azure compatible, excepto los de Administrador de acceso de usuario o Propietario.

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.

Tenga en cuenta que la creación de la asignación de directiva 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