Correct option:
Use AWS Key Management Service (SSE-KMS) for encrypting objects in Amazon S3 buckets - When you use server-side encryption with AWS KMS (SSE-KMS), you can use the default AWS managed CMK, or you can specify a customer-managed CMK that you have already created. If you want to use a customer-managed CMK for SSE-KMS, create the CMK before you configure SSE-KMS. Then, when you configure SSE-KMS for your bucket, specify the existing customer-managed CMK.
Creating your own customer-managed CMK gives you more flexibility and control. For example, you can create, rotate, and disable customer-managed CMKs. You can also define access controls and audit the customer-managed CMKs that you use to protect your data. You can use AWS KMS to manage the lifecycle of the key material within AWS.
When you configure server-side encryption using AWS KMS (SSE-KMS), you can configure your bucket to use S3 Bucket Keys for SSE-KMS. This bucket-level key for SSE-KMS can reduce your KMS request costs by up to 99 percent by decreasing the request traffic from Amazon S3 to AWS KMS.
https://docs.aws.amazon.com/whitepapers/latest/kms-best-practices/aws-managed-and-customer-managed-cmks.html
Incorrect options:
Use Amazon S3-Managed Keys (SSE-S3) for encrypting objects in Amazon S3 buckets - Server-side encryption protects data at rest. Amazon S3 encrypts each object with a unique key. As an additional safeguard, it encrypts the key itself with a key that it rotates regularly. Amazon S3 server-side encryption uses one of the strongest block ciphers available to encrypt your data, 256-bit Advanced Encryption Standard (AES-256).
There are no new charges for using server-side encryption with Amazon S3-managed keys (SSE-S3). However, requests to configure and use SSE-S3 incur standard Amazon S3 request charges. Audit trail and lifecycle management is not possible with SSE-S3. So this option is incorrect.
Use Customer-Provided Keys (SSE-C) for encrypting objects in Amazon S3 buckets - Using server-side encryption with customer-provided encryption keys (SSE-C) allows you to set your own encryption keys. With the encryption key you provide as part of your request, Amazon S3 manages the encryption as it writes to disks and decryption when you access your objects.
When you upload an object, Amazon S3 uses the encryption key you provide to apply AES-256 encryption to your data and removes the encryption key from memory. When you retrieve an object, you must provide the same encryption key as part of your request. Amazon S3 first verifies that the encryption key you provided matches and then decrypts the object before returning the object data to you. In SSE-C, the customer needs to manage and maintain encryption keys and decryption keys, which are passed with every request. Although you could develop a solution on client side that supports lifecycle management and audit for the cryptographic key material, however, it would take significant development and maintenance time. Hence this option is not the right fit for the given use case.
Use client-side encryption to have full control over encryption and decryption process - Server-side encryption is the encryption of data at its destination by the application or service that receives it. Amazon S3 encrypts your data at the object level as it writes it to disks in its data centers and decrypts it for you when you access it.
Whereas, in client-side Encryption, you encrypt data on the client-side and upload the encrypted data to Amazon S3. In this case, you manage the encryption process, the encryption keys, and related tools. The given use case mandates that the encryption should happen on S3, so this option is ruled out.
References:
https://docs.aws.amazon.com/whitepapers/latest/kms-best-practices/aws-managed-and-customer-managed-cmks.html
https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html
https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html