Yes, also as you said.
According to this documentaion.
You need first create contained database users for the service principal.
I reproduced your problem.

After I do following steps. Linked service with Service principal Authentication type works fine.
CREATE USER [ad_user_name] FROM EXTERNAL PROVIDER;
EXEC sp_addrolemember db_owner, [ad_user_name];