This really depends on your use case, but I generally prefer to use the client SDK when interacting with Firestore. There are many benefits to using the client sdk including rules, listeners, client cache, offline support, etc.
Cloud funcs or CloudRun are extremely useful for cases where you may not want to return all of the data in your documents "projections".
Other things to consider - by invoking a Cloud Func you will incur the additional expense of the function usage. You will need to create your own rules check - Cloud Funcs use the admin SDK to interact with Firestore and bypass the rules engine used by the Client SDK.