Taking boundaries automatically from CameraViewport is a good solution, but it will not work as you would expected if run it in other Aspect Ratio.
I think, it would be easier just expose two Vector2-s for bottom-left and top-right corners and put some values manually:
[SerializeField]
private Vector2 _boundariesBottomLeft, _boundariesTopRight;
...
newPos.x = Mathf.Clamp(transform.position.x + delta.x, _boundariesBottomLeft.x, _boundariesTopRight.x);
newPos.y = Mathf.Clamp(transform.position.y + delta.y, _boundariesBottomLeft.y, _boundariesTopRight.y);