While the link in ukemi's comment gives a good description of the rules governing S-voicing, the main question here has a simple answer.
/s/ and /z/ are separate phonemes in (standard/Tuscan) Italian.
This is shown by (near-)minimal pairs such as cosa
/ko.sa/ "matter" and sposa
/spo.za/ "bride". Both of these come directly from single Latin words, so the rules laid down by Oostendorp don't apply.
(EDIT: Michaelyus has provided a true minimal pair: presento
/pre.zɛn.to/ "I present" versus presento
/pre.sɛn.to/ "I foresee". Much obliged!)
In many environments, this distinction is neutralized: in fact, everywhere except between vowels within a single mono-morphemic word. In most dialects it's even neutralized in this environment—in the north they merge into /z/, while in the south they merge into /s/. So in the (relatively) near future, Italian will likely have only a single dental sibilant phoneme, just as Latin did.