Key Management Service (KMS)¶
The Key Management Service (KMS) of the Open Telekom Cloud generates and stores public keys for accessing data in the Open Telekom Cloud and makes them available to the respective user. It combines the essential security requirements placed on a cloud with high usability, as users can manage their keys directly via the console. The KMS ensures secure access to data and is integrated with other Open Telekom Cloud services. Cloud Trace monitors access to keys and thereby helps fulfill audit and compliance requirements. During implementation, the KMS also uses hardware security modules (HSM) for professional management of key security. The KMS does not store the data encryption keys (DEK) directly; instead users receive their DEKs via customer master keys. The hardware security modules serve to handle encryption and decryption processes, while a dedicated API is used to access the service. The Open Telekom Cloud also allows users to deploy their own keys (“bring your own key”). Another available function is “grant master key,” which allows owners of tenants to issue temporary permissions for access to encrypted data.
Customer Master Key¶
A Customer Master Key (CMK) is a Key Encryption Key (KEK) created by a user using KMS. It is used to encrypt and protect Data Encryption Keys (DEKs). One CMK can be used to encrypt one or multiple DEKs.
You can perform the following operations on CMKs:
Creating, querying, enabling, disabling, scheduling the deletion of, and canceling the deletion of CMKs
Importing CMKs and deleting CMK material
Modifying the aliases and description of CMKs
Creating, querying, and revoking a grant
Adding, searching for, editing, and deleting tags
Enabling key rotation
List Keys¶
This interface is used to query all KMS Keys and to filter the output with query parameters.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
for key in conn.kms.keys():
print(key)
Create Key¶
This interface is used to create a KMS key with parameters.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = conn.kms.create_key(
key_alias='cmk_name',
description='My KMS cmk'
)
print(key)
Get Key¶
This interface is used to get a KMS key by ID
or an instance of class
Key
.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_id'
key = conn.kms.get_key(key)
print(key)
Find Key¶
This interface is used to find a KMS key by id or name.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_name_or_id'
key = conn.kms.find_key(key)
print(key)
Enable Key¶
This interface is used to enable a KMS key by id or an instance of class
Key
.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_id'
key = conn.kms.enable_key(key)
print(key)
Disable Key¶
This interface is used to disable a KMS key by id or an instance of class
Key
.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_id'
key = conn.kms.disable_key(key)
print(key)
Schedule Key Deletion¶
This interface is used to schedule the KMS key deletion with a specific
retention time by id or an instance of class
Key
.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_id'
conn.kms.schedule_key_deletion(key)
Cancel Key Deletion¶
This interface is used to cancel the KMS key deletion by key id or an
instance of class
Key
.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
key = 'cmk_id'
conn.kms.cancel_key_deletion(key)
Data Encryption Key¶
Data Encryption Keys (DEKs) are used to encrypt data.
Create Datakey¶
This interface is used to create a KMS Datakey with parameters.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
dek = conn.kms.create_datakey(
cmk='cmk_id',
datakey_length='512'
)
print(dek)
Create Datakey without plain Text¶
This interface is used to create a KMS data encryption key without plain text.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
dek = conn.kms.create_datakey(
cmk='cmk_id',
datakey_length='512'
)
print(dek)
Encrypt Datakey¶
This interface is used to encrypt a KMS data encryption key.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
data = conn.kms.encrypt_datakey(
datakey='datakey_id'
)
print(data)
Decrypt Datakey¶
This interface is used to decrypt a KMS data encryption key.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
data = conn.kms.decrypt_datakey(
cmk='cmk_id',
cipher_text='64_bit_cipher',
datakey_cipher_length='64'
)
print(data)
Miscellaneous¶
Generate Random Data¶
This interface is used to generate random Data.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
data = conn.kms.generate_random(random_data_length=512)
print(data)
Get Instance Number¶
This interface is used to get the total number of encrypt key instances.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
instances = conn.kms.get_instance_number()
print(instances)
List KMS quotas¶
This interface is used to query all KMS quotas.
import openstack
openstack.enable_logging(True)
conn = openstack.connect(cloud='otc')
for quota in conn.kms.quotas():
print(quota)