moto/moto/kms/models.py
Andrew Garrett f1566cecf4 Add support for KMS key rotation operations
This adds support for the following KMS endpoints:

* EnableKeyRotation
* DisableKeyRotation
* GetKeyRotationStatus

Signed-off-by: Jesse Szwedko <jesse.szwedko@getbraintree.com>
2015-11-24 23:44:55 +00:00

85 lines
2.3 KiB
Python

from __future__ import unicode_literals
import boto.kms
from moto.core import BaseBackend
from .utils import generate_key_id
from collections import defaultdict
class Key(object):
def __init__(self, policy, key_usage, description, region):
self.id = generate_key_id()
self.policy = policy
self.key_usage = key_usage
self.description = description
self.enabled = True
self.region = region
self.account_id = "0123456789012"
self.key_rotation_status = False
@property
def arn(self):
return "arn:aws:kms:{0}:{1}:key/{2}".format(self.region, self.account_id, self.id)
def to_dict(self):
return {
"KeyMetadata": {
"AWSAccountId": self.account_id,
"Arn": self.arn,
"CreationDate": "2015-01-01 00:00:00",
"Description": self.description,
"Enabled": self.enabled,
"KeyId": self.id,
"KeyUsage": self.key_usage,
}
}
class KmsBackend(BaseBackend):
def __init__(self):
self.keys = {}
self.key_to_aliases = defaultdict(set)
def create_key(self, policy, key_usage, description, region):
key = Key(policy, key_usage, description, region)
self.keys[key.id] = key
return key
def describe_key(self, key_id):
return self.keys[key_id]
def list_keys(self):
return self.keys.values()
def alias_exists(self, alias_name):
for aliases in self.key_to_aliases.values():
if alias_name in aliases:
return True
return False
def add_alias(self, target_key_id, alias_name):
self.key_to_aliases[target_key_id].add(alias_name)
def delete_alias(self, alias_name):
for aliases in self.key_to_aliases.values():
aliases.remove(alias_name)
def get_all_aliases(self):
return self.key_to_aliases
def enable_key_rotation(self, key_id):
self.keys[key_id].key_rotation_status = True
def disable_key_rotation(self, key_id):
self.keys[key_id].key_rotation_status = False
def get_key_rotation_status(self, key_id):
return self.keys[key_id].key_rotation_status
kms_backends = {}
for region in boto.kms.regions():
kms_backends[region.name] = KmsBackend()