replication-config-for-kms-objects
Replicating Objects Created with Server-Side Encryption (SSE) Using Encryption Keys Stored in AWS KMS
By default, Amazon S3 doesn't replicate objects that are stored at rest using server-side encryption with customer master keys (CMKs) stored in AWS KMS. This section explains additional configuration that you add to direct Amazon S3 to replicate these objects.
Important
Replication of encrypted data is a server-side process that occurs entirely within Amazon S3. Replication does not support client-side encryption.
For an example with step-by-step instructions, see Example 4: Replicating Encrypted Objects. For information about creating a replication configuration, see Replication.
Topics
- Specifying Additional Information in the Replication Configuration
- Granting Additional Permissions for the IAM Role
- Granting Additional Permissions for Cross-Account Scenarios
- AWS KMS Transaction Limit Considerations
Specifying Additional Information in the Replication Configuration
In the replication configuration, you do the following:
- In the
Destination
configuration, add the symmetric customer managed AWS KMS CMK that you want Amazon S3 to use to encrypt object replicas. - Explicitly opt in by enabling replication of objects encrypted using AWS KMS CMKs by adding the
SourceSelectionCriteria
element.
Important
The AWS KMS CMK must have been created in the same AWS Region as the destination bucket.
The AWS KMS CMK must be valid. The PUT
Bucket replication API doesn't check the validity of AWS KMS CMKs. If you use an invalid CMK, you will receive the 200 OK status code in response, but replication fails.
The following example shows a replication configuration, which includes optional configuration elements.
This replication configuration has one rule. The rule applies to objects with the Tax
key prefix. Amazon S3 uses the AWS KMS key ID to encrypt these object replicas.
Granting Additional Permissions for the IAM Role
To replicate objects that are encrypted at rest under AWS Key Management Service (AWS KMS), grant the following additional permissions to the IAM role you specify in the replication configuration. You grant these permissions by updating the permission policy associated with the IAM role. Objects created with server-side encryption using customer-provided (SSE-C) encryption keys are not replicated.
Permission for the
s3:GetObjectVersionForReplication
action for source objects. Permission for this action allows Amazon S3 to replicate both unencrypted objects and objects created with server-side encryption using Amazon S3 managed encryption (SSE-S3) keys or or CMKs stored in AWS KMS (SSE-KMS). Note
We recommend that you use thes3:GetObjectVersionForReplication
action instead of thes3:GetObjectVersion
action because it provides Amazon S3 with only the minimum permissions necessary for replication. In addition, permission for thes3:GetObjectVersion
action allows replication of unencrypted and SSE-S3-encrypted objects, but not of objects created using a CMK stored in AWS KMS.Permissions for the following AWS KMS actions:
kms:Decrypt
permissions for the AWS KMS CMK that was used to encrypt the source objectkms:Encrypt
permissions for the AWS KMS CMK used to encrypt the object replicaWe recommend that you restrict these permissions to specific buckets and objects using AWS KMS condition keys, as shown in the following example policy statements.
{"Action": ["kms:Decrypt"],"Effect": "Allow","Condition": {"StringLike": {"kms:ViaService": "s3.source-bucket-region.amazonaws.com","kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::source-bucket-name/key-prefix1*",]}},"Resource": ["List of AWS KMS key IDs used to encrypt source objects.",]},{"Action": ["kms:Encrypt"],"Effect": "Allow","Condition": {"StringLike": {"kms:ViaService": "s3.destination-bucket-region.amazonaws.com","kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::destination-bucket-name/key-prefix1*",]}},"Resource": ["AWS KMS key IDs (for the AWS region of the destination bucket). S3 uses it to encrypt object replicas",]}The AWS account that owns the IAM role must have permissions for these AWS KMS actions (
kms:Encrypt
andkms:Decrypt
) for AWS KMS CMKs listed in the policy. If the AWS KMS CMKs are owned by another AWS account, the CMK owner must grant these permissions to the AWS account that owns the IAM role. For more information about managing access to these CMKs, see Using IAM Policies with AWS KMS in the AWS Key Management Service Developer Guide.The following is a complete IAM policy that grants the necessary permissions to replicate unencrypted objects, objects created with server-side encryption using Amazon S3 managed encryption keys,and CMKs stored in AWS KMS. Note
Objects created with server-side encryption using customer-provided (SSE-C) encryption keys are not replicated.
Granting Additional Permissions for Cross-Account Scenarios
In a cross-account scenario, where source and destination buckets are owned by different AWS accounts, you can use a customer managed CMK to encrypt object replicas. However, the CMK owner must grant the source bucket owner permission to use the CMK.
To grant the source bucket owner permission to use the AWS KMS CMK (IAM console)
Sign in to the AWS Management Console and open the AWS Key Management Service (AWS KMS) console at https://console.aws.amazon.com/kms.
To change the AWS Region, use the Region selector in the upper-right corner of the page.
To view the keys in your account that you create and manage, in the navigation pane choose Customer managed keys.
Choose the CMK.
Under General configuration, choose the Key policy tab.
Choose Other AWS Accounts.
Choose Add another AWS Account.
In arn:aws:iam::, enter the source bucket account ID.
Choose Save Changes.
To grant the source bucket owner permission to use the AWS KMS CMK (AWS CLI)
- For information, see put-key-policy in the AWS CLI Command Reference. For information about the underlying API, see PutKeyPolicy in the AWS Key Management Service API Reference.
AWS KMS Transaction Limit Considerations
When you add many new objects with AWS KMS encryption after enabling cross-region replication (CRR), you might experience throttling (HTTP 503 Slow Down errors). Throttling occurs when the number of AWS KMS transactions per second exceeds the current limit. For more information, see Limits in the AWS Key Management Service Developer Guide.
To request a limit increase, use Service Quotas. For more information, see Amazon Web Services Limits. If Service Quotas isn't supported in your Region, open an AWS Support case.