Skip to main content

Mount migration

OpenBao supports moving secrets and auth mounts, both within and across namespaces. The operation is supported by API endpoints and a CLI helper around them.

Why

There can be several reasons for wanting to migrate mounts. In OpenBao, the use cases could be for renaming mounts to align with org standards.

Async behavior

The first thing to note about the sys/remount endpoint is that it is an asynchronous endpoint. An invocation will start the migration process, and the API will return a migration ID. This ID, in turn, be used to monitor the migration status using the sys/remount/status endpoint.

Namespaces

The sys/remount endpoint can move mounts across namespaces with the namespaces supplied as prefixes on the path arguments. In this case, namespaces, for both the source and destination mounts, must be either the namespace in which the /sys/remount endpoint is called or the children of that namespace. Let us assume that we have three namespaces ns1/, ns1/ns2/, and ns1/ns3. We want to move the mount my-secret from ns1/ns2/my-secret to ns1/ns3/my-secret. Moving the mount can be accomplished in two ways. The first way is to invoke /sys/remount from the root namespace with the from argument as ns1/ns2/my-secret and to argument as ns1/ns3/my-secret. The second way is to invoke /sys/remount from the namespace ns1/, with from as ns2/my-secret and to as ns3/my-secret.

Leases

The remount operation will result in existing leases on a mount being revoked. On mounts with a large number of leases, the revocation process and hence remounting as a whole may be a time consuming process. Any dynamic secrets for a secrets mount and any tokens associated with an auth mount, will be revoked during the remount process.

Configurations

The remount operation will retain all the configurations of the mount. For example, if you create a read-only role on a database mount or a user on a userpass mount, those will be available at the new location after remounting.

Cleanup operations

There are two primary cleanup operations that OpenBao operators will need to keep in mind after performing a remount.

Entities and aliases

Any aliases that refer to users on the auth mount could now point to an invalid mount when an auth mount is moved. Pointing to an invalid mount may not be the case for every instance; a remount within a namespace will end in the aliases pointing to a valid mount. Still, a remount across namespaces will always result in the aliases pointing to an invalid mount. In the latter case, the OpenBao operator should find and remove those aliases from the source namespace, and create equivalent aliases and entities for the new mount in the target namespace. If new entities and aliases aren't created in the target namespace, OpenBao will dynamically generate them upon login operations.

Policies

Remounting can also result in policies referring to invalid paths. Any policy that refers to a moved secrets engine would need to be updated to point to the new location of the engine, assuming that the policy is in the target namespace or a parent of the target namespace, or updated to remove the original mount path if not. Any policies associated with roles on a moved auth mount need to be inspected to see if they still refer to valid paths after the remount operation. Say in namespace ns1/, a child of the root namespace, a role on the mount approle/ has policies granting access to /my-secret. If the mount is moved to another child of the root namespace, say ns2/, which does not have a secrets engine called my-secret/, the OpenBao operator would either create an equivalent my-secret/ mount in ns2/, or update the policy to refer to paths valid from the ns2/ namespace.

Quotas

The mount being moved may have rate limit or lease count quotas.. The remount process will update these quotas to refer to the new path of the mount.

Path filters

The remount operation will respect any existing path filters. Three uses cases, in particular, are shown below. here.

  • If a mount is moved into a namespace denylisted on a secondary cluster, it will not be available on that cluster.
  • If a mount is moved from a namespace denylisted on a secondary cluster to one that is not, it will now be available on the cluster.
  • If a mount is specifically denylisted on a secondary cluster and is moved, it will now be available on the cluster.