今回はGitLabコンテナレジストリの権限周りについて整理しました。
背景
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が Public
で Everyone 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
以前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 | ○ | ○ |
アクセストークン
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