Nested group and cover blocks are the solution, and since you created your question the block editor has improved enough that your design can be created with group and cover blocks, with spacing rules via global styles. No code is necessary.

E.g. I was able to create this using just the editor, and no CSS or code:

[![enter image description here][1]][1]

I used a cover block for the background, then used a group block for layout, giving it a maximum width, a white background, and black text


  [1]: https://i.sstatic.net/0CcLO.jpg