I'm trying to set up a push sync from my in-LAN PBS to a remote Tuxis PBS.
I've gotten stuck on the Permissions setup for my API keys, here: https://pbs.proxmox.com/docs/managing-remotes.html#sync-direction-push
I've created a user on my local PBS with an API token to use for this. But I'm having a bit of trouble figuring out what Role to give that user. The documentation is not clear about this.
Remote Config:
The manual doesn't actual explain how to configure the remote PBS's user permissions…
I'm using @tuxis 's paid 1 TB plan, so I only have one user, and they've got the DatastoreAdmin role already.
Assumed Correct Answer: I only have one namespace on the local PBS (Root/Encrypted), and one namespace on the remote (Root). I don't contemplate ever having a vanished namespace, or needing to remove one.
Is this the correct config?
Help? This has all become more complicated than I think it should be.
I've gotten stuck on the Permissions setup for my API keys, here: https://pbs.proxmox.com/docs/managing-remotes.html#sync-direction-push
The following permissions are required for a sync job in push direction:
- Remote.Audit on /remote/{remote} and Remote.DatastoreBackup on /remote/{remote}/{remote-store}/{remote-ns} path or subnamespace.
- At least Datastore.Read and Datastore.Audit on the local source datastore namespace (/datastore/{store}/{ns}) or Datastore.Backup if owner of the sync job.
- Remote.DatastorePrune on /remote/{remote}/{remote-store}/{remote-ns} path to remove vanished snapshots and groups. Make sure to use a dedicated remote for each sync job in push direction as noted above.
- Remote.DatastoreModify on /remote/{remote}/{remote-store}/{remote-ns} path to remove vanished namespaces.
I've created a user on my local PBS with an API token to use for this. But I'm having a bit of trouble figuring out what Role to give that user. The documentation is not clear about this.
- Remote.Audit and Remote.DatastoreBackup are the only permissions in the RemoteSyncPushOperator role.
- Remote.DatastorePrune: If I want to add this to my local user that runs the sync job, RemoteSyncPushOperator doesn't have it. I'd need to escalate to RemoteDatastorePowerUser, right? Then what's the point of RemoteSyncPushOperator? A user that can just send backups but not clean them up?
- If I need all of these things ("permissions are requried"), then why not just tell me to set RemoteDatastorePowerUser?
- "Remote.DatastoreModify on /remote/{remote}/{remote-store}/{remote-ns} path to remove vanished namespaces." What is a "vanished namespace?" When do I need to be able to do this? It requires the RemoteDatastoreAdmin privilege. At that point, I don't feel like I'm actually restricting any permissions at all.
- For the local side, Datastore.Reader grants Datastore.Read and Datastore.Audit as per item (2); but
- For the local side, "Datastore.Backup if owner of the sync job." Who is the owner of the sync job? I have User A on PBS that PVE logs into to do the backup, and then User B that's going to handle the remote sync, since their permissions are different. It's my server, that I am the only admin of, so I'm the "owner," but I'm not sure that's what it means.
A remote user with limited access should be used on the remote backup server instance. Consider the implications…
Remote Config:
The manual doesn't actual explain how to configure the remote PBS's user permissions…
I'm using @tuxis 's paid 1 TB plan, so I only have one user, and they've got the DatastoreAdmin role already.
Assumed Correct Answer: I only have one namespace on the local PBS (Root/Encrypted), and one namespace on the remote (Root). I don't contemplate ever having a vanished namespace, or needing to remove one.
Is this the correct config?
- Locally, I need to set RemoteDatastorePowerUser, because I assume I need to be able to prune the Remote but never plan to delete any namespaces.
- On the Remote, I need to set DatastorePowerUser, because the user that's doing all the work needs those permissions (this is what I'd set if I were just backing up directly to the Tuxis remote instance).
Help? This has all become more complicated than I think it should be.
Last edited: