Encontrei uma resposta óbvia e fácil de usar. É tão simples que pode não acreditar que seja uma solução da Microsoft.
$ permissions é uma matriz de permissões contendo uma conta (domain \ user), uma permissão (fullcontrol) e um tipo (allow).
# create access rule based on permissions
$rule = new-object system.security.accesscontrol.filesystemaccessrule $permissions
# get an acl, remove access rules, add our rule
$acl = get-acl "c:\" # need to get acl from root of drive to avoid inheritance
$acl.access | foreach-object {$acl.removeaccessrule($_)}
$acl.setaccessrule($rule)
# get security descriptor from acl and convert to binary security descriptor
$sddl = $acl.sddl
$sdhelper = [wmiclass]"win32_securitydescriptorhelper"
$binarysd = ($sdhelper.sddltobinarysd($sddl)).binarysd
# get cluster resources from registry
$resources = get-childitem "hklm:\cluster\resources"
# ...with paths that powershell will understand
$resources = $resources | foreach-object {$_.pspath}
# find clustershare resource path
$resource = $resources | where-object {(get-itemproperty $_ name).name -eq $clustershare}
# derive path to resource parameters
$parameters = "$resource\parameters"
# configure security descriptor
set-itemproperty $parameters "security descriptor" $binarysd
É realmente assim tão simples.
O único problema é que isso funciona apenas para um nó e deve ser repetido em cada nó. Ele sobrevive a failovers (e as permissões definidas em um nó reaparecerão quando o compartilhamento falhar novamente no nó). Além disso, só funciona para "fullcontrol", não para "ler" ou outras permissões. Não sei porque.
Eu não aceito isso como uma resposta porque realmente não é. Mas parece ser o mais próximo de uma solução para este problema com o Windows Server 2003 simplesmente não existia (cluster.exe poderia definir permissões de compartilhamento) e que a Microsoft não parece resolver em qualquer lugar.