Use data sources if you wish to restrict the practitioner from modifying any attributes.
For attributes that cannot be set or updated, mark them as read-only with Computed=true and Optional=false.
If modifying an attribute requires resource recreation, use RequiresReplace().
To fail the apply operation when someone attempts to modify a specific attribute's value, you must write your own plan modifier. Refer to Creating Attribute Plan Modifiers for details.
Module version
Use-cases
For resources that have no update functionality rather than adding the resource.RequiresReplace() attribute plan modifier in the schema, you would like to use resource plan modification. Based on the documentation it is, however, not clear for first-time Terraform plugin developers how to achieve this.
Attempted Solutions
Proposal
Would it be possible to explain how to achieve this? If I know this then I dont mind extending the docs on for example the update resource page
References