What are the best practices for implementing encryption key rotation in Object Storage for compliance?

I’m designing an encryption strategy for our Object Storage buckets that hold sensitive financial documents and need to meet various compliance requirements (PCI-DSS, SOX, GDPR). We’re using OCI Vault for key management, but I want to understand the best practices around key rotation frequency, automated rotation policies, audit trail logging, and key versioning strategy. What rotation schedules do people typically implement? How do you handle the operational complexity of rotating keys while ensuring data remains accessible? Are there any gotchas with key versioning that could cause data access issues? Looking for real-world experiences and recommendations.

We implemented automated rotation using OCI Functions triggered by Events service. Every 90 days, a function automatically creates a new key version in Vault and updates the bucket encryption configuration. The key versioning strategy is critical - OCI maintains all key versions, so old data encrypted with previous versions remains accessible. You need to set up proper audit logging in both Vault and Object Storage to track which key version was used for which objects and when rotations occurred. This audit trail is essential for compliance reporting.

Thanks for the insights. How do you handle the audit trail logging aspect? Do you use OCI Audit service, or do you export logs to a SIEM? Also, I’m concerned about the key versioning - if we have objects encrypted with 10 different key versions over time, does that create performance issues when accessing older objects? And what happens if we need to delete a key version for compliance reasons?

For audit logging, we use OCI Audit service to capture all key lifecycle events (creation, rotation, deletion attempts) and export those logs to Object Storage for long-term retention. Then we ingest them into our SIEM for alerting. Key versioning doesn’t cause performance issues - OCI internally tracks which version encrypted each object and uses the correct version automatically. However, you CANNOT delete a key version if any data is still encrypted with it. You must either re-encrypt the data with a newer version or delete the objects first. This is by design to prevent data loss.