Consider a graph G and an edge-coloring c R : E(G) → [k]. A rainbow path between u, v ∈ V (G) is a path P from u to v such that for all e, e ∈ E(P ), where e = e we have c R (e) = c R (e ). In the Rainbow k-Coloring problem we are given a graph G, and the objective is to decide if there exists c R :there is a rainbow path between u and v in G. Several variants of Rainbow k-Coloring have been studied, two of which are defined as follows. The Subset Rainbow k-Coloring takes as an input a graph G and a set S ⊆ V (G) × V (G), and the objective is to decide if there exists c R : E(G) → [k] such that for all (u, v) ∈ S there is a rainbow path between u and v in G. The problem Steiner Rainbow k-Coloring takes as an input a graph G and a set S ⊆ V (G), and the objective is to decide if there exists c R : E(G) → [k] such that for all u, v ∈ S there is a rainbow path between u and v in G. In an attempt to resolve open problems posed by Kowalik et al. (ESA 2016), we obtain the following results. For every k ≥ 3, Rainbow k-Coloring does not admit an algorithm running in time 2 o(|E(G)|) n O(1) , unless ETH fails. For every k ≥ 3, Steiner Rainbow k-Coloring does not admit an algorithm running in time 2 o(|S| 2 ) n O(1) , unless ETH fails. Subset Rainbow k-Coloring admits an algorithm running in time 2 O(|S|) n O (1) . This also implies an algorithm running in time 2 o(|S| 2 ) n O(1) for Steiner Rainbow k-Coloring, which matches the lower bound we obtain.