Macro does not like module attribute?

Correct. You could instead first unquote it in its actual scope:

    quote do
      fields = unquote(fields)
      defmodule unquote(struct_name) do
        use Utils.Access
        defstruct fields
      end
    end