Add optional service-account-backed dynamic tokens to avoid per-request bot users
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- gitlab, go
- Área
- api, authentication, authorization, backend
Línea de trabajo
Start by reviewing the existing role lifecycle, project/group token issuance, lease revocation, and deletion behavior, then compare the constraints with related issue #117. Done means an explicit service-account mode supports idempotent provisioning, independent tokens, preserved scopes and TTLs, documented prerequisites and lifecycle behavior, and tests and documentation covering the acceptance criteria.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The plugin currently creates a GitLab project or group access token for every dynamic credential request. GitLab creates a new bot user for each of those tokens and retains the user for a configurable period after the token becomes inactive. Repeated credential requests therefore create identity churn and can clutter project or group membership.
Token rotation, as proposed in #117, does not fully solve this use case because rotating a token immediately revokes its predecessor. Concurrent jobs reading the same Vault role need independently revocable credentials that remain valid for their own leases.
Proposed feature
Add an opt-in role mode that uses a stable GitLab service account as the identity for dynamic credentials.
When a role is created or updated, the plugin should be able to:
- Create or locate a service account for the configured project or group.
- Persist the service account identifier with the role.
- Ensure that the service account has the configured project/group membership and access level.
When credentials are requested from that role, the plugin should create a new short-lived token for the existing service account rather than creating a new project/group access token and bot user.
The existing project/group access-token behavior should remain the default for backward compatibility.
An illustrative configuration could be:
token_type = "project-service-account"
service_account_name = "vault-{{ .role_name }}"
The exact option names and role schema are open for discussion.
Required behavior
- Service-account provisioning is idempotent. Reapplying or updating a role reuses the same account.
- Concurrent credential requests create independent tokens under the same service account.
- Issuing or revoking one leased token does not revoke tokens held by other jobs.
- Generated tokens preserve the configured scopes, TTL, and lease revocation behavior.
- The plugin handles create/update races without producing duplicate service accounts.
- Existing roles continue to use project/group access tokens unless the new mode is explicitly selected.
- Errors clearly identify missing GitLab version, license, or permission prerequisites.
- Role reads expose the managed service account identity without exposing secrets.
- Role deletion has documented service-account lifecycle behavior. Destructive cleanup should require an explicit option or separate operation.
Acceptance criteria
- Project-backed service-account tokens are supported on compatible GitLab versions.
- Group-backed service-account tokens are supported where the GitLab API permits them.
- Multiple simultaneous reads of one role return usable tokens associated with one service-account user.
- Revoking one Vault lease leaves other active leases usable.
- Reapplying the same role does not create another service account.
- Unit and acceptance tests cover provisioning, concurrent issuance, revocation, updates, and deletion behavior.
- Documentation covers permissions, GitLab-version requirements, migration, and rollback.
Design considerations
- Should the plugin create the service account itself, or optionally accept the username/ID of a pre-provisioned account?
- How should membership/access-level drift be reconciled?
- What should happen if the configured account name already exists but was not created by this plugin?
- Can this share a common
token_typemodel with user, project, and group service accounts?
Related
- #117 proposes rotating an existing project access token. Rotation is useful for other cases, but its immediate revocation semantics make it unsafe as the sole solution for parallel CI jobs.
- Lenguaje dominante
- Go
- Estrellas
- 63
- Forks
- 12
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de splunk/vault-plugin-secrets-gitlab
-
Templated policiesAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 42/100
splunk/vault-plugin-secrets-gitlab#117 · 1 reacción ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
splunk/vault-plugin-secrets-gitlab#111 · 1 comentario ·
-
support for group level access tokenPosiblemente ocupada @M0roSan la tomó hace 1701 días. Abiertoenhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
splunk/vault-plugin-secrets-gitlab#36 · 6 comentarios · 1 reacción ·
-
documentation help wanted
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Todos los issues de splunk/vault-plugin-secrets-gitlab
Issues similares
-
docker-compose: postgres healthcheck should probe TCP (pg_isready -h localhost)Posiblemente ocupada @zezo-mohamed22 la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
OneBusAway/watchdog#305 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
self-care self-care:agent-discoverability
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
githubnext/gh-cao#20928 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
SocialGouv/iterion#3287 ·
Los mantenedores suelen responder en 1 día
-
bug needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
ClickHouse/clickhouse-go#2124 ·
Los mantenedores suelen responder en 1 día
-
bug needs triage pkg/stanza/fileconsumer
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
open-telemetry/opentelemetry-collector-contrib#53135 · 1 comentario ·
Los mantenedores suelen responder en 1 día