I am not a German speaker and I don't speak German well but I have to ask a German where she is from originally. I think I shouldn't say "Woher kommst du?", because that literally means "where do you come from?" and I want to ask for her ethnicity. So, can I say "Woher bist du?" which means "Where are you from?" or are there any better translations to ask ethnicity?
I’m not sure what the question actually is. If you already know that she is German, why would you ask her about her ethnicity?
You could ask about what city she is from:
Aus welcher Stadt kommst Du?
Or you could ask about what region she is from, but that’s a bit trickier.
Aus welchem Bundesland kommst Du?
is closest but does not necessarily reflect the region accurately.
Or you could generally ask
Woher kommst Du?
Or do you suspect that she or her parents may have settled in Germany very recently? That would often be an extremely delicate subject to ask about in the first place. You could ask
Woher kommt Deine Familie?
Some people may be proud to tell you that they are from Turkey or Croatia, but some may also take it as insinuation that you do not consider them real Germans.
Personally, I always found questions about my background invasive and somewhat offensive. That goes for both countries I lived in, Germany and the USA.
Woher kommst du?
is fine, to answer your first question, and the only way I can think of to ask where a person comes from.
To talk about your second question: Ethnicity is still a bit of a 'dangerous' topic in German society, as we stopped drawing the line between people. At least from an official side, while movements like "Pegida" prove this wrong. (Pegida is a racist movement against Muslims, spawning thanks to fear from ISIS.)
This is the reason I can't think of an example to ask for ethnicity, except through where they're from.
In cases where it's not clear whether a person was born in Germany or not, you could ask about the family's background instead of just the person's. If you want to stress that you mean the ethnicity rather than the location, you could use the verb 'stammen' instead of 'kommen'.
Woher stammt deine Familie?
I believe this is acceptable when talking to visitors, first or second generation Germans.
There should be useful information behind your interest, that might help you to avoid the very direct and awkward question about ethnicity (I mean, if you are not or don't want to be mistaken as racist). Ask rather for that information (e.g. Sprichst du nur Deutsch als Muttersprache?). Anyway, there is a short solution: suppose you are in certain hypothetical city, say Bielefeld. Ask
Bist du hier [in Bielefeld] geboren?
If the answer is no ask where, and you will have your answer. If the answer is yes, ask:
Auch deine Familie?
 „Weil es Bielefeld nicht gibt”.
I lived and worked in Germany 20+ years ago. Certainly, in that time (and in Bonn), Duzen (using the Du form) was not acceptable work language unless you knew the person well.
And if you knew the person well, you'd already know their background.
I've been asked where I'm from (my german is not educated, I had almost no formal German education when I went over there to work, so people realize quite quickly that I'm not a native speaker). I say Canada. And that's not invasive.
But additional questions can, given both the history and current events (someone mentioned Pegida) start to feel invasive quite quickly.
The truth is, most people in Europe are from somewhere else, if you ask more than a few questions. For a start, the boundaries have moved so often. My ancestry is Hungarian - many people self-identify as Hungarian (by mother tongue or holiday observance or whatever) but grew up in places that are outside of Modern Hungary.
Some people are more ready to talk about this than others.
I'm a native German speaker and come from Switzerland. It really depends on the type of person you want to ask.
All the other comments are totally correct, but a common phrase in German would also be:
Was ist deine Nationalität? / Was hast du für eine Nationalität? (What's your nationality?)
This is the case, if you're already talking to this person and you notice, for example, it's "different" looking. As already mentioned, for some people it could be a little bit offensive.
So I prefer to ask in general:
Bist du von hier? Oder woher kommst du? (Are you from here? Or where do you come from?)
So you normally haven't any problems, because the person will tell you the rest.