Looking for an answer to the same question. I am using TrueNAS with several ESXi hosts. I have Zvol shared via iSCSI with the ESXI hosts. These Zvol are formatted using VMFS-6. The various VM disk images are contained on those VMFS volumes.
Veeam supports a direct SAN mode. The Veeam backup proxy is given direct access to each iSCSI share to read the VM disk data, rather than funnelling it through an ESXi host. The VM snapshot needed to read the VM disk in a consistent state is initiated via the vSphere API. The vSphere API returns the NAA and path to disk file to the Veeam proxy. If the Veeam proxy has access to the NAA and can find the file, voila, it can perform the data transfer bypassing the ESXi host.
Because of Windows peculiarities I want to be 200% certain that the Windows based Veeam backup proxy cannot initialize my VMFS shares. If it did, all my VM would be lost. Thus, I would like to restrict the Veeambackup proxy to have read-only access to the same iSCSI shares that ESXi hosts have read-wite access to.
I tried going about it the wrong way. I saw that extends can be marked read-only. So I created initiator groups, one for ESXi hosts an another for the Veeam backup proxy. I then created two targets, one for the ESXi hosts and the other for the Veeam backup proxy. Lastly I created two extends for each Zvol, one read-only and the other read-write, each associated respectively to the Veeam backup proxy and the ESXi hosts.
This works almost wonderfully, The ESXi hosts have read-write access to the same data the Veeam backup proxy has read-only access to - except - every extend has a unique NAA. Thus, when ESXi provides the NAA a particulat dataset is located at, Veeam cannot find it as it doesn't have access to that same NAA.
Are there any other ways I can make the same NAA available read-write to one set of initiators and read-only to another set of initiators?