Skip to main content

Client-side AWS Secrets Manager caching library

Project description

AWS Secrets Manager Python caching client

The AWS Secrets Manager Python caching client enables in-process caching of secrets for Python applications.

Getting Started

Required Prerequisites

To use this client you must have:

  • Python 3.6 or newer. Use of Python versions 3.5 or older are not supported.
  • An Amazon Web Services (AWS) account to access secrets stored in AWS Secrets Manager.
    • To create an AWS account, go to Sign In or Create an AWS Account and then choose I am a new user. Follow the instructions to create an AWS account.

    • To create a secret in AWS Secrets Manager, go to Creating Secrets and follow the instructions on that page.

    • This library makes use of botocore, the low-level core functionality of the boto3 SDK. For more information on boto3 and botocore, please review the AWS SDK for Python and Botocore documentation.

Dependencies

This library requires the following standard dependencies:

  • botocore
  • setuptools_scm

For development and testing purposes, this library requires the following additional dependencies:

  • pytest
  • pytest-cov
  • pytest-sugar
  • codecov
  • pylint
  • isort
  • sphinx

Please review the requirements.txt and dev-requirements.txt file for specific version requirements.

Installation

Installing the latest release via pip:

$ pip install aws-secretsmanager-caching

Installing the latest development release:

$ git clone https://github.com/aws/aws-secretsmanager-caching-python.git
$ cd aws-secretsmanager-caching-python
$ python setup.py install

Development

Getting Started

Assuming that you have Python and virtualenv installed, set up your environment and install the required dependencies like this instead of the pip install aws_secretsmanager_caching defined above:

$ git clone https://github.com/aws/aws-secretsmanager-caching-python.git
$ cd aws-secretsmanager-caching-python
$ virtualenv venv
...
$ . venv/bin/activate
$ pip install -r requirements.txt -r dev-requirements.txt
$ pip install -e .

Running Tests

You can run tests in all supported Python versions using tox. By default, it will run all of the unit and integration tests, but you can also specify your own arguments to past to pytest.

$ tox # runs integ/unit tests, flake8 tests and pylint tests
$ tox -- test/unit/test_decorators.py # runs specific test file
$ tox -e py37 -- test/integ/ # runs specific test directory

Documentation

You can locally-generate the Sphinx-based documentation via:

$ tox -e docs

Which will subsequently be viewable at file://${CLONE_DIR}/.tox/docs_out/index.html

Usage

Using the client consists of the following steps:

  1. Instantiate the client while optionally passing in a SecretCacheConfig() object to the config parameter. You can also pass in an existing botocore.client.BaseClient client to the client parameter.
  2. Request the secret from the client instance.
import botocore
import botocore.session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig

client = botocore.session.get_session().create_client('secretsmanager')
cache_config = SecretCacheConfig() # See below for defaults
cache = SecretCache(config=cache_config, client=client)

secret = cache.get_secret_string('mysecret')

Cache Configuration

You can configure the cache config object with the following parameters:

  • max_cache_size - The maximum number of secrets to cache. The default value is 1024.
  • exception_retry_delay_base - The number of seconds to wait after an exception is encountered and before retrying the request. The default value is 1.
  • exception_retry_growth_factor - The growth factor to use for calculating the wait time between retries of failed requests. The default value is 2.
  • exception_retry_delay_max - The maximum amount of time in seconds to wait between failed requests. The default value is 3600.
  • default_version_stage - The default version stage to request. The default value is 'AWSCURRENT'
  • secret_refresh_interval - The number of seconds to wait between refreshing cached secret information. The default value is 3600.0.
  • secret_cache_hook - An implementation of the SecretCacheHook abstract class. The default value is None.

Decorators

The library also includes several decorator functions to wrap existing function calls with SecretString-based secrets:

  • @InjectedKeywordedSecretString - This decorator expects the secret id and cache as the first and second arguments, with subsequent arguments mapping a parameter key from the function that is being wrapped to a key in the secret. The secret being retrieved from the cache must contain a SecretString and that string must be JSON-based.
  • @InjectSecretString - This decorator also expects the secret id and cache as the first and second arguments. However, this decorator simply returns the result of the cache lookup directly to the first argument of the wrapped function. The secret does not need to be JSON-based but it must contain a SecretString.
from aws_secretsmanager_caching import SecretCache
from aws_secretsmanager_caching import InjectKeywordedSecretString, InjectSecretString

cache = SecretCache()

@InjectKeywordedSecretString(secret_id='mysecret', cache=cache, func_username='username', func_password='password')
def function_to_be_decorated(func_username, func_password):
    print('Something cool is being done with the func_username and func_password arguments here')
    ...

@InjectSecretString('mysimplesecret', cache)
def function_to_be_decorated(arg1, arg2, arg3):
    # arg1 contains the cache lookup result of the 'mysimplesecret' secret.
    # arg2 and arg3, in this example, must still be passed when calling function_to_be_decorated().

Getting Help

We use GitHub issues for tracking bugs and caching library feature requests and have limited bandwidth to address them. Please use these community resources for getting help:

License

This library is licensed under the Apache 2.0 License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_secretsmanager_caching-1.1.1.4.tar.gz (23.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aws_secretsmanager_caching-1.1.1.4-py3.7.egg (25.0 kB view details)

Uploaded Egg

aws_secretsmanager_caching-1.1.1.4-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file aws_secretsmanager_caching-1.1.1.4.tar.gz.

File metadata

  • Download URL: aws_secretsmanager_caching-1.1.1.4.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.1.1.3 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for aws_secretsmanager_caching-1.1.1.4.tar.gz
Algorithm Hash digest
SHA256 a065d2d9fc1beaa87da4c2aa3f6afa5050e9de24f9b09f9d1035e3bd889e12d9
MD5 9b4a33c0c453be2b453a1d48319735f7
BLAKE2b-256 ddfd4823aea823c720fba2963a537b18724ab67de5a4ad949d5e01236532b2d9

See more details on using hashes here.

File details

Details for the file aws_secretsmanager_caching-1.1.1.4-py3.7.egg.

File metadata

  • Download URL: aws_secretsmanager_caching-1.1.1.4-py3.7.egg
  • Upload date:
  • Size: 25.0 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.1.1.3 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for aws_secretsmanager_caching-1.1.1.4-py3.7.egg
Algorithm Hash digest
SHA256 a770678afb611733e2a0252fe72959fb6d1f5400afb83ae741f091f6add940fb
MD5 15ed5ea8df435f8b525645768fe771c8
BLAKE2b-256 2e4207bfc6f92aa8936c103a0aa22b585ae758f2988c9ed2a1d888bf386a668c

See more details on using hashes here.

File details

Details for the file aws_secretsmanager_caching-1.1.1.4-py3-none-any.whl.

File metadata

  • Download URL: aws_secretsmanager_caching-1.1.1.4-py3-none-any.whl
  • Upload date:
  • Size: 18.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.1.1.3 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for aws_secretsmanager_caching-1.1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1f47b2e2553b02e027b748fd92e77466968f5b9e5e61c7dc16951318752f3be4
MD5 9fb87082d2fc66716dfdfe91206ebec2
BLAKE2b-256 0a7690b7228e1522b05b657f40e1f68d4063e32366138a4488a1a63b43655fc5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page