Blog

Använd GitLab Access Tokens effektivt

JUN 30, 2022

Eficodes Managed Services-team hjälper många av våra kunder att driftsätta GitLab på rätt sätt. Detta arbete har lett till många djupgående diskussioner om beprövade metoder för Identity and Access Management (IAM). Ett återkommande ämne är hur de olika tokens som GitLab erbjuder används på rätt sätt.

Kalle Sirkesalo

Field CTO

Kalle sits at the intersection of executive strategy and engineering reality. He works directly with CTOs and engineering leaders to translate business pressures — speed, compliance, ROI — into technical decisions that actually hold. His job is to make sure what we recommend is something your organization can actually execute.

Jag tycker att tokens förtjänar ett blogginlägg, eftersom de är ett kraftfullt verktyg som kräver viss förståelse för att användas optimalt.

Tokens sju pelare

Enligt mina beräkningar har vi tolv olika tokens som kan delas in i flera kategorier, bland annat Personal, Project, Group, Runner, Integration, Admin och Global. Nackdelen med detta finkorniga system är att det ger alldeles för många sätt att automatisera dina IAM-profiler.

Tabellen nedan ger en översikt över hur de olika typerna av tokens bör användas:

Category

Token name

Description

Recommendation

Who can modify

Personal

Personal access token

Usage of SSO platforms (e.g., Azure AD), enables API usage, enables usage of Git in SSO if SSH is prevented 

Should always be used instead of username+password for API calls.

Users themselves

Project

Project access token

API access and capability to push to a project; meant for automatic management of project and API access

In monorepo environments, these tokens enable easy access to many repositories and their central management.

Capability to push tags to a Git repository.

Project Owner & Maintainer

Project

Deploy token

The default way of reading Git and pushing/pulling from Docker & package registry with no pushing to Git repository

We recommend this for monorepo projects needing to read Git repository outside of GitLab and capability to push/read binaries.

Project Owner & Maintainer

Group

Group access token

API access and capability to push to project, meant for automated management of the whole group of projects and API access

In multirepo environments, these tokens enable easy access to many repositories and their central management.

Capability to push tags to a Git repository.

Group Owner & Maintainer

Group

Group deploy token 

The default way of reading Git and pushing/pulling from docker & package registry without pushing to a Git repository. Good for multirepo projects as they allow using the same token for many Git pulls.

Recommendation for multirepo projects needing to access Git repositories outside of GitLab and capability to push/read binaries.

Group Owner & Maintainer

Global

Access token

Grants global admin permissions for all repositories and APIs based on scopes.

Should not be used unless you really need to manage the whole instance via API.

Global admin

Global

Deploy token

Grants global admin permissions for all repositories for reading.

Should not be used unless you really need to read every Git repository in the instance.

 

Global admin

Project and Group

Trigger tokens

Allows CI/CD pipelines to be triggered remotely. Allows you to do a POST request to GitLab to trigger a CI/CD job without any other authentication.

This token is very powerful for creating separation of duties or automating tasks via GitLab Jobs.

Project Owner, Group Owner & Maintainer

Integration 

Oauth 2.0

Allows you to create authentication between many services. 

Most of our customers need this for Jira integrations

Group owner and Global admin

Integration

JSON Web Token (JWT)

Allows you to create secret management between a multitude of services. 

For example, to be used for integration to Hashicorp Vault 

Group owner and Global admin

Runner

Runner Registration

Allows runners to register to GitLab to be used

Should be only used to integrate the GitLab runners

Group Owner, Project Owner, Global admin

Admin

Impersonation token

A token meant to be used by the administrator to see what a given user sees and can see to debug issues. 

You should aim never to use these tokens, but when you have a question about visibility and need to debug, this is a very powerful token to help in admin work.

Global admin 

Därför gillar jag tokens

När vi skapar moderna IAM-modeller börjar vi vanligtvis med att införa Multi-Factor Authentication (MFA) och Single Sign-On (SSO) samt begränsa antalet tekniska konton (även kallade service accounts) i organisationen, för att få kontroll över systemets tekniska åtkomst. Detta förhindrar att API:er används med enbart en kombination av användarnamn och lösenord, eller via ett tekniskt konto som någon har skapat och som visar sig ha lite för omfattande åtkomst.

Det vi behöver är ett smidigt och säkert sätt att identifiera användare och styra åtkomst. Tokens är precis vad som behövs: de gör åtkomsthantering mycket enkelt, även när vi inte integrerar systemet med Active Directory eller en jämförbar LDAP-provider med aktiva lösenord synkroniserade till systemet. Tokens är ett utmärkt sätt att låta användare automatisera steg utan att behöva tekniska konton och den extra komplexitet de medför för IAM-modellen.

Du behöver dock hantera dina tokens med omsorg. Att låta tokens ligga kvar för länge leder alltid till obehagliga överraskningar. Vi rekommenderar vanligtvis att alla access tokens löper ut efter högst 90 dagar, eftersom längre giltighetstider ofta innebär att ingen kommer ihåg att tokens har blivit gamla. Om gamla tokens dessutom kan användas fritt finns det få incitament att automatisera användningen av dem med Hashicorp Vault eller en jämförbar, korrekt lösning för hantering av hemligheter.

Tokens bör också roteras tillräckligt ofta för att förhindra obehörig åtkomst vid läckage och säkerställa att teamen som integrerar med dig automatiserar processen för att hämta tokens.

Använd tokens på rätt sätt

Det är inte svårt att använda tokens, men du måste se till att följa rätt procedurer och använda korrekt syntax.

Tabellen nedan innehåller vägledning och exempel på korrekt användning av GitLab-tokens. GitLabs dokumentation för att skapa tokens är också ganska bra (länkar finns i tabellen).

 Token

 Command examples

Trigger token

#export SECURE_TRIGGER_TOKEN=<token>
#export MY_PROJECT_ID=<your project id>
#curl --fail --request POST --form token=$SECURE_TRIGGER_TOKEN --form ref=main "https://gitlab.example.com/api/v4/projects/$MY_PROJECT_ID/trigger/pipeline

Personal Access token

Token used normally as a password

(screenshot below)

Project/Group access token

Username: Token name 

Password: Token secret

(screenshot below)

Deploy token

Username: Can be changed in UI, but defaults to gitlab+deploy-token-{n}

Password: Token secret

(screenshot below)

JWT tokens with Vault

JWT token addition to Vault 

vault write auth/jwt/config \
   jwks_url="https://gitlab.example.com/-/jwks" \
    bound_issuer="gitlab.example.com"

GitLab CI runner:

build-job:  
  stage: build
  secrets:
    DATABASE_PASSWORD:
      vault: db_admin/value@example2
  script:
    - echo "$DATABASE_PASSWORD"

Skärmbilder på tokens och kommandon

Personal Access token

image (3)

Project/Group access token

Användarnamn: Token name 

Lösenord: Token secret

image (4)-1

Deploy token

Användarnamn: Kan ändras i gränssnittet, men är som standard gitlab+deploy-token-{n}

Lösenord: Token secret

GitLab Deploy Token
image (1)

Tänk på principen om minsta behörighet!

GitLab erbjuder många typer av tokens, men som standard bör du alltid följa nedanstående ordning när du bedömer vilka tokens du behöver, så att du följer principen om minsta behörighet:

  • Personal Access token

  • Project Deploy token

  • Group Deploy token

  • Projekttoken

  • Grupptoken

  • Global Deploy-token

  • Global Access-token

Kom igång med tokens

Min rekommendation är att du tillsammans med dina team tar reda på hur ni bäst använder GitLab-tokens i er organisation. Förhoppningsvis har den här korta introduktionen gett dig en bild av de många möjligheter som finns i GitLab.

Om du vill ha mer vägledning eller praktisk hjälp på din resa med GitLab-tokens kan du läsa mer om våra GitLab-tjänster.

  • DevOps
  • Eficode ROOT
  • CI/CD

Subscribe to our newsletter