This whitepaper is for historical reference only. Some content might be outdated and some links might not be available.
AWS Key Management Service
AWS Key Management Service
AWS KMS supports several different types of keys for different uses and the several special-purpose KMS key types including key with imported key material (BYOK) and key in a custom key store, that is backed by a AWS CloudHSM cluster or an external key manager outside of AWS.
You can easily create, import, and rotate keys, as well as define usage policies and audit usage from the AWS Management Console or by using the AWS SDK or AWS CLI.
The AWS KMS Keys in AWS KMS, whether imported by you or created on your behalf by KMS, are stored in highly durable storage in an encrypted format to help ensure that they can be used when needed. You can choose to have KMS automatically rotate AWS KMS Keys created in KMS once per year without having to re-encrypt data that has already been encrypted with your KMS key. You don’t need to keep track of older versions of your AWS KMS Keys because KMS keeps them available to automatically decrypt previously encrypted data.
For any AWS KMS Key in AWS KMS, you can control who has access to those keys and which services they can be used with through a number of access controls, including grants, and key policy conditions within key policies or IAM policies. You can also import keys from your own key management infrastructure and use them in KMS.
For example, the following policy uses the
kms:ViaService
condition to allow a
customer managed AWS KMS Key to be used for the specified actions only
when the request comes from Amazon EC2 or Amazon RDS in a
specific Region (us-west-2) on behalf of a
specific user (ExampleUser
).
{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Principal”: { “AWS”: “arn:aws:iam::111122223333:user/ExampleUser” } “Action”: [ “kms:Encrypt*”, “kms:Decrypt”, ”kms:ReEncrypt*”, “kms:GenerateDataKey*”, “kms:CreateGrant”, “kms:ListGrants”, “kms:DescribeKey” ], “Resource”: “*”, “Condition”: { “ForAnyValue:StringEquals”: { “kms:ViaService”: [ “ec2.us-west-2.amazonaws.com”, “rds.us-west-2.amazonaws.com” ] } } }