Skip to main content
Version: Preview

Pipelines

Pipelines are part of open source Marmot: a plugin pointed at a source, run by the server on a schedule. This page covers what changes on Marmot Cloud, which is how a pipeline authenticates.

A pipeline on Marmot Cloud never holds a credential. For a source in Google Cloud, AWS or Azure it authenticates as itself. For anything else it reads a password from your secret manager just before each run.

How keyless pipelines work

Your instance is an OIDC issuer. Before each run it mints a short-lived token for the pipeline, and your cloud exchanges that token for access. The token's subject is the pipeline's name, so you grant access per pipeline rather than to Marmot as a whole.

The pipeline resource exposes issuer and subject. Reference them from your cloud-side grant, as the guides do, and a rename updates both sides at once. Where Terraform's ordering forbids that, as in an AWS trust policy, hold the name in a local.

Federation is built into the plugin SDK, so every plugin for these clouds supports it. Each plugin's page on the plugin registry shows where the field sits in its config and which read-only role to grant.

CloudPluginsConfig
Google CloudBigQuery, Bigtable, Cloud Run, Firebase, Cloud Storage, GKE, Google Drive, Pub/Sub, Vertex AIA Workload Identity provider, and optionally a service account to impersonate
AWSAthena, DynamoDB, EKS, Firehose, Glue, Glue pipelines, Iceberg, Kinesis, Lambda, S3, SageMaker, SNS, SQSA role to assume and a region
AzureBlob StorageA tenant id and client id, with no account key

Start with the guide for your cloud

Each guide takes you from an empty configuration to a running pipeline that authenticates as itself, then adds a source that needs a password.

Sources that need a password

A self-managed database, a Kafka cluster with SASL, anything on-premises. Keep the password in your secret manager and point the pipeline at it through a secret store. Marmot reads the value before each run and never stores it. The pipeline's secrets map names a config key and the secret that fills it; leave that key out of the config.

Roles

Pipeline roles bind at the organization. Someone who writes a pipeline against a secret store also needs the user role on that store.

RoleGrants
ingestion.viewerSee pipelines and runs.
ingestion.adminCreate, edit and delete pipelines.
secretStore.userAttach a store's secrets to pipelines, without reading them.
resource "marmot_organization_iam_member" "data_engineering_runs_pipelines" {
role = "ingestion.admin"
member = "group:${marmot_team.data_engineering.id}"
}

resource "marmot_secret_store_iam_member" "data_engineering_uses_prod" {
secret_store_id = marmot_secret_store_google.prod.id
role = "secretStore.user"
member = "group:${marmot_team.data_engineering.id}"
}

Schedules, runs and pausing work as on open source Marmot; see pipelines.

Browse every plugin

Configuration options, required permissions and examples for every source Marmot can catalog.

Plugin registry