Skip to main content

The AKEYLESS SDK for Python enables Python developers to easily interface with the Akeyless encryption key protection system.

AKEYLESS innovative Key and Secret Management as-a Service solution enables Key and Secret Management, Data-at-rest Encryption, Client-side Encryption and Digital Signature where the key’s material never exists in one place throughout its lifecycle including creation, in-use and at-rest. It functions completely as a service, and there is no need for the customer to deploy secure virtual machines for storing the keys. For more information about the technology, please visit our website.

Getting Started

Sign up for AKEYLESS

Before you begin, you need an AKEYLESS account. Please sign up here and receive your admin user access credentials.

Minimum requirements

  • Python 3.4+

  • cryptography >= 1.8.1

Installation

$pip install akeyless

Documentation

You can find the AKEYLESS Python SDK full documentation at Read the Docs.

Usage

The following code sample demonstrates how to encrypt/decrypt data via the Akeyless system where the key fragments are stored in multiple locations and are never combined:

from akeyless import AkeylessClientConfig, AkeylessClient


def encrypt_decrypt_string(policy_id, api_key, key_name, plaintext):
    """Encrypts and then decrypts a string using an AES key from your Akeyless account.

    :param str policy_id: The user access policy id.
    :param str api_key: The user access key.
    :param str key_name: The name of the key to use in the encryption process
    :param str plaintext: Data to encrypt
    """

    # Akeyless playground environment.
    akeyless_server_dns = "playground-env.akeyless-security.com"

    conf = AkeylessClientConfig(akeyless_server_dns, policy_id, api_key, "http")
    client = AkeylessClient(conf)

    # Encrypt the plaintext source data
    ciphertext = client.encrypt_string(key_name, plaintext)

    # Decrypt the ciphertext
    decrypt_res = client.decrypt_string(key_name, ciphertext)

    # Verify that the decryption result is identical to the source plaintext
    assert decrypt_res == plaintext

The following code sample demonstrates how to create keys, users, roles, and associations between them

from akeyless import AkeylessClientConfig, AkeylessAdminClient, AkeylessClient
from akeyless.crypto import CryptoAlgorithm


def key_and_user_management(policy_id, api_key):
    """Create keys, users, roles, and associations between them.

    :param str policy_id: An admin user access policy id.
    :param str api_key: An admin user access key.
    """

    # Akeyless playground environment.
    akeyless_server_dns = "playground-env.akeyless-security.com"

    conf = AkeylessClientConfig(akeyless_server_dns, policy_id, api_key, "http")
    admin_client = AkeylessAdminClient(conf)

    # Create new AES-256-GCM key named "key1"
    admin_client.create_aes_key("key1", CryptoAlgorithm.AES_256_GCM, "testing", 2)

    # Get key details
    key_des = admin_client.describe_key("key1")
    print(key_des)

    # Create new user named "user1". The returned object contains the user policy id and api key.
    user1_access_api = admin_client.create_user("user1")
    print(user1_access_api)

    #  Replacing the access API key of "user1". The returned object contains the new api key.
    user1_new_api_key = admin_client.reset_user_access_key("user1")
    print(user1_new_api_key)

    # Get user details
    user_des = admin_client.get_user("user1")
    print(user_des)

    # Create new role named "role1"
    admin_client.create_role("role1")

    #  Create an association between the role "role1" and the key "key1".
    admin_client.create_role_item_assoc("role1", "key1")

    #  Create an association between the role "role1" and the user "user1".
    admin_client.create_role_user_assoc("role1", "user1")

    #  Now the user has access to the key and can encrypt/decrypt with it as follows:

    user1_config = AkeylessClientConfig(akeyless_server_dns, user1_access_api.policy_id,
                                        user1_new_api_key.get_key_seed_str(), "http")

    user1_client = AkeylessClient(user1_config)
    plaintext = "Encrypt Me!"
    ciphertext = user1_client.encrypt_string("key1", plaintext)
    decrypt_res = user1_client.decrypt_string("key1", ciphertext)

    assert decrypt_res == plaintext

    user1_client.close()

    # Delete an association between the role "role1" and the user "user1" So
    # that the user's "user1" access to the key is blocked.
    admin_client.delete_role_user_assoc("role1", "user1")

    # Delete an association between the role "role1" and the key "key1".
    admin_client.delete_role_item_assoc("role1", "key1")

    admin_client.delete_user("user1")
    admin_client.delete_role("role1")

    #  Warning! - After deleting a key, all data encrypted with that key will no longer be accessible.
    admin_client.delete_key("key1")

    admin_client.close()

The following code sample demonstrates how to save and load secrets

from akeyless import AkeylessClientConfig, AkeylessAdminClient


def secret_management(policy_id, api_key, secret_name, secret_value, secret_metadata=""):
    """Create a new secret.

    :param str policy_id: The user access policy id.
    :param str api_key: The user access key.
    :param str secret_name: The name of the new secret
    :param str secret_value: The value of the new secret
    :param str secret_metadata: Metadata about the secret
    """

    akeyless_server_dns = "playground-env.akeyless-security.com"  # Akeyless playground environment.

    conf = AkeylessClientConfig(akeyless_server_dns, policy_id, api_key, "http")
    client = AkeylessAdminClient(conf)

    # Create new secret
    client.create_secret(secret_name, secret_value, secret_metadata)

    # Get secret value
    secret_val_res = client.get_secret_value(secret_name)
    assert secret_val_res == secret_value

    # Get secret details
    secret_des = client.describe_item(secret_name)
    print(secret_des)

    # Update secret value
    new_secret_value = "this is a new secret"
    client.update_secret_value(secret_name, new_secret_value)
    secret_val_res = client.get_secret_value(secret_name)
    assert secret_val_res == new_secret_value

You can find more examples in the examples directory

License

This SDK is distributed under the Apache License, Version 2.0 see LICENSE.txt for more information.

Release files for akeyless 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for akeyless 0.0.7
File Size Uploaded
akeyless-0.0.7.tar.gz 20.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for akeyless 0.0.7
File Interpreter ABI Platform
akeyless-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 53.0 kB

Release files / akeyless-0.0.7.tar.gz

Download URL akeyless-0.0.7.tar.gz
Size 20.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c4695884eb53775b46670b40f7e489e11ce26e0957cd2f91880e1b9683fff123
BLAKE2b-256 checksum
How to use checksums
b7ed6db5f71a2a82b690e017c332d78841c679bb3f1f5ecb82aa0db39dde77ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

Release files / akeyless-0.0.7-py3-none-any.whl

Download URL akeyless-0.0.7-py3-none-any.whl
Size 32.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ebd69bb709e8662057da21289fea721b544a2b7fa6cc914a77b8ddc6ea4c0fa
BLAKE2b-256 checksum
How to use checksums
b1617758fbbdfa96f078c67087097dca70a28477b07ccca573f53ebee4e9fc3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.6

Release history Release notifications | RSS feed

5.0.38

2 release files

5.0.37

2 release files

5.0.36

2 release files

5.0.35

2 release files

5.0.28

2 release files

5.0.27

2 release files

5.0.26

2 release files

5.0.25

2 release files

5.0.24

2 release files

5.0.23

2 release files

5.0.22

2 release files

5.0.21

2 release files

5.0.20

2 release files

5.0.19

2 release files

5.0.18

2 release files

5.0.13

2 release files

5.0.12

2 release files

5.0.11

2 release files

5.0.10

2 release files

5.0.9

2 release files

5.0.8

2 release files

5.0.7

2 release files

5.0.6

2 release files

5.0.5

2 release files

5.0.4

2 release files

5.0.3

2 release files

5.0.2

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.3.0

2 release files

4.2.5

2 release files

4.2.4

2 release files

4.2.3

2 release files

4.2.2

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.6.3

2 release files

3.6.2

2 release files

3.6.1

2 release files

3.6.0

2 release files

3.5.4

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.0

2 release files

3.3.16

2 release files

3.3.15

2 release files

3.3.12

2 release files

3.3.11

2 release files

3.3.10

2 release files

3.3.9

2 release files

3.3.8

2 release files

3.3.7

2 release files

3.3.6

2 release files

3.3.5

2 release files

3.3.4

2 release files

3.3.3

2 release files

3.3.2

2 release files

3.3.1

2 release files

3.3.0

2 release files

3.2.8

2 release files

3.2.7

2 release files

3.2.6

2 release files

3.2.5

2 release files

3.2.4

2 release files

3.2.3

2 release files

3.2.2

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.20.3

2 release files

2.20.2

2 release files

2.20.1

2 release files

2.19.0

2 release files

2.18.0

2 release files

2.16.9

2 release files

2.16.8

2 release files

2.16.7

2 release files

2.16.6

2 release files

2.16.5

2 release files

2.16.4

2 release files

2.16.3

2 release files

2.16.2

2 release files

2.16.1

2 release files

2.16.0

2 release files

2.5.22

2 release files

2.5.21

2 release files

2.5.20

2 release files

2.5.19

2 release files

2.5.17

2 release files

2.5.16

2 release files

2.5.15

2 release files

2.5.14

2 release files

2.5.12

2 release files

2.5.11

2 release files

2.5.10

2 release files

2.5.9

2 release files

2.5.8

2 release files

2.5.7

2 release files

2.5.6

2 release files

2.5.5

2 release files

2.5.4

2 release files

2.5.3

2 release files

2.5.2

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.7

2 release files

2.4.6

2 release files

2.4.5

2 release files

2.4.4

2 release files

2.4.3

2 release files

2.4.2

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.1.0

2 release files

2.0.8

2 release files

1.57.0

2 release files

0.1.0

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

This release

0.0.7 This release

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page