For some protocols (such as http) you can configure the service to only respond if the client specifies the correct name; in this scenario, you would configure the web server to only respond to http requests containing the CNAME. Based on the comments, you already know how to do this.
There are also protocols in which the server remains ignorant of the name the client is using, in which case there is no way to prevent the user from using the name in the A record.
I do not believe you can do this at the DNS layer. That is, there is no reliable way to make a CNAME that is visible to your clients, and that resolves to the desired IP address, without there being a corresponding A record that is also visible to your clients.
What you can do (depending on what DNS software you're using, I guess) is to have two A records, both pointing to the same IP address, i.e.,
server A xxx.xxx.xxx.xxx
service A xxx.xxx.xxx.xxx
and then make the server
record visible only to the admin staff that need access to it. You don't have to use a CNAME for service names. The only catch is that it is then your responsibility to ensure that the IP addresses for the two names always match.