I never save the API key itself, only a KMS-signed hash. The key is downloaded/presented to the user/requesting system once along with an ID. Essentially the key is a JWT signed by KMS and delivered only once. You then only need to keep the KMS signature ARN in your DB so that, as you rotate KMS signing keys, you can still validate older API keys. The JWT can then contain an expiration, etc, etc as needed