Lock-Nessie provides a client and server pair for authentication to Nessie with OpenID.
Project description
Lock Nessie
Quickly and simply add OpenID auth to your Iceberg Nessie stack.
Installation
pip install locknessieuv add locknessie
Or use the docker image (primarily intended for server):
docker run --rm --env-file .env -p 8080:8080 ghcr.io/pirate-baby/lock-nessie:latest # starts the server at http://localhost:8080
OpenID auth requires a server that can facilitiate the login flow, and a client that can store (and re-request as needed) the resulting bearer token
once that flow has been completed. lock-nessie provides both of those for nessie-compatible Iceberg REST clients.
Server
This component facilitiates your OpenID Oauth2 login flow.
Envars:
Required for all providers:
LOCKNESSIE_ENVIRONMENT: 'production' for released code, 'development' for local developmentLOCKNESSIE_REDIRECT_BASE: The base URL for redirectsLOCKNESSIE_OPENID_ISSUER: The issuer of the OpenID client, one of:microsoft# entrakeycloak
LOCKNESSIE_OPENID_CLIENT_ID: The client ID of the OpenID clientLOCKNESSIE_OPENID_CLIENT_SECRET: The client secret of the OpenID clientLOCKNESSIE_SECRET_PROVIDER: The provider where the secret is stored, one of:aws_secrets_managerhachicorp_vault
Required for microsoft:
LOCKNESSIE_OPENID_TENANT: The tenant of the OpenID client (required for Microsoft)
Required for keycloak:
LOCKNESSIE_OPENID_REALM: The realm of the OpenID client (required for Keycloak)LOCKNESSIE_OPENID_URL: The URL of the OpenID provider
Required for aws:
note: lock-nessie uses the standard boto3 credentials order. For lock-nessie to leverage AWS Secrets Manager, credentials must be provided that have:
"secretsmanager:CreateSecret", // Create a new secret
"secretsmanager:GetSecretValue", // Read the secret value
"secretsmanager:DescribeSecret", // Read secret metadata
"secretsmanager:PutSecretValue" // Write/update secret value
Optional:
LOCKNESSIE_MAX_AGE: The maximum age of the cookie in seconds (default: 31536000 - 1 year). Note this is not the same as the token age for the OpenID auth.
Modifying the home template
The home.html template is used for the root path ("/") for both authed and unauthed users. It is a standard Jinja2 template with the following context variables passed to it:
request: The FastAPI request object, where login cookies have been assigned.user: The username of the logged-in user (None if not logged in)is_logged_in: Boolean indicating if a user is logged inexpires: Datetime object of when the session expires (None if not logged in)time_until_expiry: Human-readable string of time until session expires (None if not logged in)aws_secret_arn: Optional AWS secret ARN if provided as agetparam (from a successful login)
You can create a different template that matches your company/use case and set LOCKNESSIE_TEMPLATES_DIR_PATH to override the location.
![WARNING] The template file must be named
home.htmlto override the default template.
Client:
Required for all providers:
LOCKNESSIE_SECRET_PROVIDER: The provider where the secret is stored, one of:aws_secrets_managerhachicorp_vault
LOCKNESSIE_SECRET_IDENTIFIER: The resource id for the secret, like an arn in aws.
Optional:
LOCKNESSIE_CACHE_PATH: Where to store the cached OpenID token.LOCKNESSIE_SERVER_URL: If provided, the client will attempt to pop open a login window when the token has expired.
Client integrations
PyIceberg
from locknessie.client.pyiceberg import load_catalog
catalog = load_catalog("nessie", uri="http://nessie:19120/iceberg/main/")
note: There is a bunch of auth bits in pyiceberg that indicate better integration may be possible, but it is non-obvious how a web-based login flow, refresh token etc would work in practice. TODO see if this can be refined.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file locknessie-0.0.4.tar.gz.
File metadata
- Download URL: locknessie-0.0.4.tar.gz
- Upload date:
- Size: 391.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a255065011c96ea692a995265b86b210de5c5c6488a55163e95dfd9b9b450238
|
|
| MD5 |
7d0daa0d5856e79fd087e7c4778bae9e
|
|
| BLAKE2b-256 |
cd8d3e56fb53af8e429f4d66b2b8eaf69b05982875f4ba1872c7535315439d99
|
Provenance
The following attestation bundles were made for locknessie-0.0.4.tar.gz:
Publisher:
publish.yml on pirate-baby/lock-nessie
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
locknessie-0.0.4.tar.gz -
Subject digest:
a255065011c96ea692a995265b86b210de5c5c6488a55163e95dfd9b9b450238 - Sigstore transparency entry: 212923967
- Sigstore integration time:
-
Permalink:
pirate-baby/lock-nessie@6683df96a97c6603f011f0c8954545687c710cda -
Branch / Tag:
refs/tags/v0.0.4 - Owner: https://github.com/pirate-baby
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6683df96a97c6603f011f0c8954545687c710cda -
Trigger Event:
release
-
Statement type:
File details
Details for the file locknessie-0.0.4-py3-none-any.whl.
File metadata
- Download URL: locknessie-0.0.4-py3-none-any.whl
- Upload date:
- Size: 368.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19957f137e48082fb5a400893dc5a8759d1b357fc384a66ad74af99659b9e896
|
|
| MD5 |
09e4cb2b20d13dfb3c08eb30afa40555
|
|
| BLAKE2b-256 |
9cba36ab1fe0ca1c94fb6a7742e8f89d8ff6e58027be572e4eb9d18c0104ae6e
|
Provenance
The following attestation bundles were made for locknessie-0.0.4-py3-none-any.whl:
Publisher:
publish.yml on pirate-baby/lock-nessie
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
locknessie-0.0.4-py3-none-any.whl -
Subject digest:
19957f137e48082fb5a400893dc5a8759d1b357fc384a66ad74af99659b9e896 - Sigstore transparency entry: 212923971
- Sigstore integration time:
-
Permalink:
pirate-baby/lock-nessie@6683df96a97c6603f011f0c8954545687c710cda -
Branch / Tag:
refs/tags/v0.0.4 - Owner: https://github.com/pirate-baby
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6683df96a97c6603f011f0c8954545687c710cda -
Trigger Event:
release
-
Statement type: