Rotate object on Y Axis when changing transform.up

In simple terms I am doing the following.

I have a cylinder, the cylinder has the following script

        gameObject.transform.up = Camera.main.transform.forward;
        transform.position = Camera.main.transform.position + Camera.main.transform.forward;

This places the cylinder in front of the camera and orients it in the direction the player is looking.

Now I want to angle the cylinder slightly so that it’s at about a 15 degree angle on the y axis (world space y).

However, because of the way I’m re-assigning transform.up to camera.forward the rotation of the cylinder is always changing. So sometimes to tilt it on Y in world space I need to adjust z, while other times I need to adjust X.

How can I go about resolving this issue?

[SerializeField] Vector3 _worldRotation = new Vector3( 0 , 90 , 0 );
[SerializeField] Vector3 _localRotation = new Vector3( 0 , 30 , 0 );
void Update ()
{
    var cam = Camera.main.transform;
    transform.position = cam.position + cam.forward;
    Quaternion rot = Quaternion.LookRotation( forward:cam.up , upwards:cam.forward );
    transform.rotation = Quaternion.Euler(_worldRotation) * rot * Quaternion.Euler(_localRotation);
}