Secret Cache

Abstract base class for secret cache storage.

Overview

This class provides the interface for implementing secret cache storage backends. Concrete implementations can cache secrets in various stores such as in-memory, Redis, AWS Parameter Store, AWS Secrets Manager, etc.

To create a custom cache storage, extend this class and implement the abstract methods:

from clearskies.secrets.cache_storage import SecretCache


class RedisCache(SecretCache):
    def __init__(self, redis_client):
        super().__init__()
        self._redis = redis_client

    def get(self, path: str) -> str | None:
        return self._redis.get(path)

    def set(self, path: str, value: str, ttl: int | None = None) -> None:
        if ttl:
            self._redis.setex(path, ttl, value)
        else:
            self._redis.set(path, value)

    def delete(self, path: str) -> None:
        self._redis.delete(path)

    def clear(self) -> None:
        self._redis.flushdb()

Then use it with a secrets provider:

from clearskies.secrets import Akeyless

cache = RedisCache(redis_client)
akeyless = Akeyless(
    access_id="p-xxx",
    cache_storage=cache,
)

# First call fetches from Akeyless and caches
secret = akeyless.get("/path/to/secret")

# Subsequent calls return cached value
secret = akeyless.get("/path/to/secret")

# Force refresh bypasses cache
secret = akeyless.get("/path/to/secret", refresh=True)

Table of contents