Unless something has changed recently, the attributes have to be done in native code as mentioned in the docs (link below).
Out of curiosity, I tried to make a blueprint class based on AttributeSet in UE5, but it didn’t have a way to define the actual attributes, so I just did it in C++ as usual. A lot of the other parts can be done in BP. There are a number of C++ & BP examples in the Valley of the Ancient demo, but the attributes are still defined in C++.