The problem with this shader graph is that you're sampling the moon's surface cubemap with your view direction vector (the green vector on the left). What you want is the red vector on the right.

We can get that vector with a little trigonometry. I'll spare you the full derivation and just jump straight to the shader graph code that implements it:

In this first section, we transform the view vector into a coordinate space where z+ is the "to moon" direction. (You can rotate the mesh this shader is being rendered on to change where the moon sits in the sky, or replace this with your own preferred coordinate transformation)
We then break down that vector into components that get us the trig ratios we need for angle \$a\$ in the diagram above, and use that to get some trig ratios for angle \$c\$.

Then we do some math on those to get the tangent ratio of angle \$b\$, and use that to construct a vector in the moon surface direction. That's the vector we'll use to sample the moon cubemap. You can also normalize it to get a surface normal vector for lighting calculations, like rendering the phases of the moon.
(By default, this setup will give you a moon that's tidally locked: the same side always points toward the viewer. If you don't want this, you can rotate the moon surface direction vector before passing it to the Sample Cubemap node)

Of course, all this math is only valid for view rays that actually hit the moon. For pixels outside that narrow cone, we want to skip as much of that calculation as we can and just draw stars, then do a light feathered blend between the two. Here are the nodes that do that:

As you can see, this lets you control the size of the moon in the sky, and the moon's features scale with the moon - when the moon gets smaller, it doesn't crop the surface texture, it shrinks the whole thing together.
