Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document stamping #2815

Merged
merged 1 commit into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ The following environment variables can be used to configure Livebook on boot:
`LIVEBOOK_APPS_PATH_WARMUP`.

* `LIVEBOOK_APPS_PATH_HUB_ID` - deploy only the notebooks in
`LIVEBOOK_APPS_PATH` that belong to the given Hub ID
`LIVEBOOK_APPS_PATH` that belong to the given workspace (known as HUB ID)

* `LIVEBOOK_APPS_PATH_PASSWORD` - the password to use for all protected apps
deployed from `LIVEBOOK_APPS_PATH`.
Expand Down
23 changes: 23 additions & 0 deletions docs/stamping.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Notebook stamping

Livebook provides a feature called "Notebook Stamping", with the goal of enhancing security and productivity within notebooks.

Whenever you author a notebook, the contents of the notebook is signed with a secret key that belongs to your machine (which you can also find in settings). If the notebook accesses any secret or file system configuration, these permissions are stored within the stamp.

Whenever you open up a notebook stamped by you, it will retain access to secrets and file systems, and you won't have to reenable them. Whenever you open up a notebook stamped by someone else, a warning is displayed, all access is revoked, and must be explicitly enabled. However, remember that stamping only takes care of Livebook resources: when you execute the notebook, the code in the notebook will still have access to the current machine, so always execute third-party code with care.

Note that deploying notebooks as applications do not verify stamps when using your personal workspace. For such, you must use Livebook Teams, which provides an authority for stamping and encrypting notebooks.

## Secure deployments with Livebook Teams

When using Livebook Teams, notebooks are stamped with a private key that belongs to your organization/workspace. This means you can share notebooks within your organization, and if the notebook accesses any secret/file system resource, the access rules are transparently retained.

Furthermore, when deploying with Livebook Teams, Livebook guarantees that all of the notebooks belong to your organization and that the stamps are valid, eliminating the chance that someone in your organization accidentally deploys an external notebook that has not been previously reviewed by a team member.

Livebook Teams stamping works in two steps:

1. The notebook is encrypted using your Livebook Teams key and then sent to the Livebook Teams server. Since Livebook Teams do not have access to your Livebook Teams key, Livebook Teams cannot read the content of your notebooks

2. The Livebook Teams server then stamps the encrypted notebook using a private key, that is only available within Livebook Teams server. The members of your organization only have access to the public key, which validates the stamp, without giving past or future employees the option to forge stamps

The steps above ensure that the contents are only visible to your team members and only team members with access to the Livebook Teams can stamp notebooks.
1 change: 1 addition & 0 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,7 @@ defmodule Livebook.MixProject do
{"README.md", title: "Welcome to Livebook"},
"docs/use_cases.md",
"docs/authentication.md",
"docs/stamping.md",
"docs/deployment/docker.md",
"docs/deployment/clustering.md",
"docs/deployment/fips.md",
Expand Down
Loading