Blog

GitLab Access Tokens -tunnusten tehokas hyödyntäminen

JUN 30, 2022

Eficoden Managed Services -tiimi auttaa monia asiakkaitamme ottamaan GitLabin käyttöön oikein. Työ on johtanut lukuisiin perusteellisiin keskusteluihin Identity and Access Managementin (IAM) parhaista käytännöistä. Yksi toistuva aihe on GitLabin tarjoamien eri tokenien oikea käyttö.

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.

Mielestäni tokenit ansaitsevat oman blogikirjoituksensa, sillä ne ovat tehokas työkalu, jonka optimaalinen käyttö edellyttää jonkin verran ymmärrystä.

Tokenien seitsemän tukipilaria

Laskelmani mukaan käytössä on kaksitoista erilaista tokenia, jotka voidaan jakaa useisiin kategorioihin: Personal, Project, Group, Runner, Integration, Admin ja Global. Näin tarkkarajaisen järjestelmän haittapuolena on, että se tarjoaa aivan liikaa tapoja automatisoida IAM-profiilejasi. 

Seuraava taulukko tarjoaa yleiskuvan siitä, miten erityyppisiä tokeneita tulisi käyttää:

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 

Miksi pidän tokeneista

Kun luomme moderneja IAM-malleja, aloitamme yleensä ottamalla käyttöön monivaiheisen tunnistautumisen (MFA) ja kertakirjautumisen (SSO) sekä rajoittamalla organisaation teknisten tilien määrää. Teknisiä tilejä kutsutaan myös palvelutileiksi. Tavoitteena on hallita järjestelmän teknistä käyttöoikeutta. Näin APIa ei voi käyttää pelkällä käyttäjätunnus–salasana-yhdistelmällä tai jonkun luomalla teknisellä tilillä, jolla on lopulta hieman liikaa käyttöoikeuksia. 

Tarvitsemme helpon ja turvallisen tavan tunnistaa käyttäjät ja hallita käyttöoikeuksia. Tokenit ovat juuri siihen sopiva ratkaisu: ne tekevät käyttöoikeuksien hallinnasta erittäin helppoa, vaikka järjestelmää ei integroitaisi Active Directoryyn tai vastaavaan LDAP-palveluntarjoajaan, jonka aktiiviset salasanat on synkronoitu järjestelmään. Tokenien avulla käyttäjät voivat automatisoida vaiheita ilman teknisiä tilejä ja niiden IAM-malliin tuomaa lisämonimutkaisuutta. 

Tokeneista on kuitenkin huolehdittava. Jos tokenit jätetään pyörimään liian pitkäksi aikaa, seurauksena on aina ikäviä yllätyksiä. Suosittelemme yleensä, että kaikkien access tokenien voimassaolo päättyy viimeistään 90 päivän kuluttua, sillä pidemmillä voimassaoloajoilla kukaan ei yleensä muista tokenien vanhentuneen. Lisäksi jos vanhoja tokeneita voi käyttää vapaasti, niiden käyttöä ei juuri kannata automatisoida Hashicorp Vaultilla tai vastaavalla asianmukaisella salaisuuksien hallintaratkaisulla. 

Tokeneita tulisi myös kierrättää riittävän usein, jotta vuotojen aiheuttamat luvattomat käyttöoikeudet voidaan estää ja kanssasi integroituvat tiimit automatisoivat tokenien haun.

Tokenien oikea käyttö

Tokenien käyttö ei ole vaikeaa, mutta oikeista käytännöistä ja syntaksista on huolehdittava. 

Alla oleva taulukko sisältää ohjeita ja esimerkkejä GitLab-tokenien oikeaan käyttöön. Myös GitLabin tokenien luomista käsittelevä dokumentaatio on varsin hyvä (linkit ovat taulukossa).

 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"

 Tokenien ja komentojen kuvakaappaukset

Personal Access token

image (3)

Project/Group access token

Käyttäjänimi: Token name 

Salasana: Token secret

image (4)-1

Deploy token

Käyttäjänimi: Voidaan muuttaa käyttöliittymässä, mutta oletusarvo on gitlab+deploy-token-{n}

Salasana: Token secret

GitLab Deploy Token
image (1)

Muista vähimpien oikeuksien periaate!

GitLab tarjoaa useita token-tyyppejä, mutta lähtökohtaisesti sinun tulisi aina noudattaa seuraavaa järjestystä arvioidessasi tarvitsemiasi tokeneita. Näin varmistat vähimpien oikeuksien periaatteen toteutumisen:

  • Personal Access token

  • Project Deploy token

  • Group Deploy token

  • Projektin token

  • Ryhmän token

  • Globaali Deploy-token

  • Globaali Access-token

Tokenien käytön aloittaminen

Suosittelen, että selvitätte tiimienne kanssa organisaatiollenne sopivimman tavan käyttää GitLabin tokeneita. Toivottavasti tämä lyhyt johdanto on kuitenkin antanut käsityksen GitLabin monista mahdollisuuksista.

Jos kaipaat lisäohjeita tai käytännön tukea GitLab-tokenien käyttöön, tutustu GitLab-palveluihimme.

  • DevOps
  • Eficode ROOT
  • CI/CD

Subscribe to our newsletter