With hardware instancing you can have unique position, rotation and scale per instance just by filling the array buffer showed in the example.
There is also space for a 4th attribute without adding a new vertex buffer, but still you will need to write a custom shader to use that (e.g. for diffuse color). If you are determined to have more attributes, that’s doable with a custom vertex buffer.
Here is a related post about custom colors per instance using HW instancing: