code: func (i *IAMPrincipal) UnmarshalJSON(data []byte) error {
  	// Handle single string values like "*"
  	var v string
  	err := json.Unmarshal(data, &v)
  	if err == nil {
  		i.AWS = StringList(String(v))
  		i.CanonicalUser = nil
  		i.Federated = nil
  		i.Service = nil
  		return nil
  	}
  
  	// Handle all other values
  	var v2 iamPrincipalCopy
  	err = json.Unmarshal(data, &v2)
  	if err != nil {
  		return err
  	}
  
  	i.AWS = v2.AWS
  	i.CanonicalUser = v2.CanonicalUser
  	i.Federated = v2.Federated
  	i.Service = v2.Service
  
  	return nil
  }
docs: // UnmarshalJSON sets the object from the provided JSON representation. This has
  // been added to handle the special case of "*" as the Principal value.