TECHSTEP

ITインフラ関連の記事を公開してます。

GitLabコンテナレジストリへのアクセス権限

今回はGitLabコンテナレジストリの権限周りについて整理しました。

docs.gitlab.com

背景

GitLabはProject/Groupごとにコンテナレジストリを提供する機能があります。GitLabはProject/Groupごとに、どのユーザーにどんな権限を付与するかをRoleで制御しますが、この制御にはコンテナレジストリに対する権限も含まれます。

一方、コンテナレジストリはRoleだけですべての権限が決まるわけではなく、どの設定が関係しているかが分かりにくいと感じることがありました。

今回は、GitLabのコンテナレジストリの権限に関連する設定を整理し、理解を深めていきたいと思います。

検証

今回は以下の3つについて整理しました。

GitLab Projectで設定するVisibility

まず、コンテナレジストリへのVisibilityはGitLab Projectの設定でコントロールしています。GitLab Projectは Public / Internal / Private の3種類の公開設定ができます。デフォルトではProjectにアクセスできるユーザー全員が閲覧可能 (Visible) ですが、設定によってProjectメンバーのみに制限することもできます。

Visibilityの設定は、GitLab画面から 設定一般 に移動し、可視性、プロジェクトの機能、権限 から変更します。変更は以下の2種類から選択できます。

  • Everyone with Access: Projectにアクセスできる全員が閲覧できます。
  • Only Project members: Projectに所属するメンバーであり、かつ Reporter 以上の権限を持つ人が閲覧できます。

以下がProjectのVisibilityの対応表です。最も広い公開設定は、Projectが PublicEveryone with Access の場合です。これはGitLabユーザー以外も含めたすべての人が閲覧可能です。

Project Registry Visibility Anonymous Guest Reporter/Developer/Maintainer/Owner
Public Everyone with Access
Only Project members
Internal Everyone with Access
Only Project members
Private Everyone with Access
Only Project members

Role

docs.gitlab.com

以前GitLabのRoleについて簡単にまとめましたが、GitLabはRoleに応じて各機能をどこまで利用できるかが決まります (Custom Roleを使えば、利用者が定義したRoleを作成できます) 。

コンテナレジストリに対するRoleは以下のような表にまとめられます。大まかにいえば、コンテナイメージの取得 (Pull) は誰でもできて、Push/DeleteはDeveloper以上、Cleanup policyのような管理系の機能はMaintainer以上のみ、という分類です。なおCleanup Policyとは、コンテナレジストリ上のイメージを、あるポリシーに従って定期的に削除する機能のことです。

Guest Reporter Developer Maintainer Owner
Pull image
Push image
Remove image
Create/Edit/Delete cleanup policy

アクセストーク

docs.gitlab.com

GitLabのコンテナレジストリに対し、イメージをPull / Pushするには、何かしらのトークンを使う必要があります。GitLabは以下の4種類のトークンを利用できます。

  • Personal access token : アカウント単位で発行・管理できるトーク
  • Deploy token : デプロイタスク専用のトーク
  • Project access token : 発行したProject専用のトーク
  • Group access token : 発行したGroup専用のトーク

いずれのトークンも、コンテナレジストリに対しては以下の権限を付与します。

  • イメージのPull: read_registry
  • イメージのPush: read_registry / write_registry