TECHSTEP

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

GitLabのユーザー作成方法を整理する

今回はGitLabでユーザーを作成する方法について整理します。

背景

GitLabでは複数の方法でユーザーを作成できます。

  • サインインページで作成
  • 管理画面から作成
  • 認証インテグレーション
  • APIから作成
  • Rakeコマンドラインから作成
  • IaCツールから作成

docs.gitlab.com

このうちサインインページでの作成はサービス利用開始時、認証インテグレーションはLDAP / SAMLなどと連携したときに自動的に作成される方式です。

なお、GitLab上でユーザーを作成できるのはSelf-managedのみで、SaaS版では各利用者がユーザーアカウントを作成する必要があります。ただし、SaaS版でも各Projectからユーザーを招待する形でアカウント作成ページに案内できます。

検証

今回は管理画面からの作成、APIでの作成、Rakeコマンドラインでの作成を試します。

検証はAmazon EC2上に作成したGitLabインスタンス上で行います。GitLabのバージョンは v16.7 、Enterprise Editionを利用しています。

管理画面から作成

管理画面からの作成はGitLab UI上から行います。まずは左メニューにある Admin Area にアクセスします。

続いて左メニューの Overview の中から Users を選択します。

ユーザーの一覧が表示されるので、画面右上の New User を選択します。

ユーザーの作成画面が表示されるので、 必要な設定を行います。まずは Name Username Email をそれぞれ設定します。

Password はここで設定せず、設定したメールアドレス宛にリンクが送られます。ユーザーは最初のサインインでパスワードを設定します。

続いてアクセスレベルの設定です。

  • Projects limit: ユーザーごとに作成できるプロジェクトの上限を設定します。
  • Can create top level group: 階層が最上位のグループを作成可能にします。
  • Private profile: User profileページをプライベートにし、自身とAdministrator以外が見れないようにできます。
  • Access level: 所属するGroup / Projectのみにアクセスできる Regular か、すべてのページにアクセスできる Administrator かを選択します。
  • External: Externalユーザーは、権限がない限り内部のプロジェクトを閲覧することもできず、またプロジェクトやグループなどの作成もできません。
  • Validate user account: クレジット・デビットカードの情報を入力したりAdminユーザーが検証することで、共有runnerの無料利用時間を使用できるようになります。


参考リンク


続いてProfileの設定です。アバターSkype、Xなどの情報を設定します。

最後に Admin notes の設定です。ここにはアカウントの変更や操作などの内容を記入しておき、リファレンスとして利用することが想定されています。

必要な情報を入力したら Create user を選択します。


参考リンク


特に問題がなければユーザーが作成されるのを確認できます。

APIから作成

GitLabはAPIを公開しており、アクセストークンを利用してユーザーの作成や取得などを実行できます。

docs.gitlab.com

APIから作成を行う場合、まずはアクセストークンを発行する必要があります。ここではAdminユーザーでの操作を行うため、Adminユーザーアイコンをクリックして Edit profile を選択します。

遷移後の画面左メニューから Access Tokens を選択して Add new token から新規にアクセストークンを発行しておきます。

ここでは api の権限だけあればよいのでチェックを入れます。トークン名を適当に指定し、アクセストークンを作成します。

ユーザーの作成は /users に対して以下のようなPOSTリクエストを発行します。

$ curl --request POST \
       --header "PRIVATE-TOKEN:<Access Token>" \
       --form "email=<Email>" \
       --form "name=<name>" \
       --form "username=<username>" \
       --form "password=<password>" \
  "<GitLabサーバーのURL or IPアドレス>/api/v4/users"

レスポンスはJsonで返されます。Jsonを整形したものを以下に載せておきます。

レスポンス (Json形式)

{
    "id": 4,
    "username": "test",
    "name": "test",
    "state": "active",
    "locked": false,
    "avatar_url": "https://www.gravatar.com/avatar/0ca7c89a88742de0683f903214fd61d0?s=80&d=identicon",
    "web_url": "<GitLabサーバーのURL or IPアドレス>/test",
    "created_at": "2023-12-26T03:48:20.811Z",
    "bio": "",
    "location": "",
    "public_email": null,
    "skype": "",
    "linkedin": "",
    "twitter": "",
    "discord": "",
    "website_url": "",
    "organization": "",
    "job_title": "",
    "pronouns": null,
    "bot": false,
    "work_information": null,
    "followers": 0,
    "following": 0,
    "is_followed": false,
    "local_time": null,
    "last_sign_in_at": null,
    "confirmed_at": null,
    "last_activity_on": null,
    "email": "<Email>",
    "theme_id": 3,
    "color_scheme_id": 1,
    "projects_limit": 100000,
    "current_sign_in_at": null,
    "identities": [],
    "can_create_group": true,
    "can_create_project": true,
    "two_factor_enabled": false,
    "external": false,
    "private_profile": false,
    "commit_email": "<Email>",
    "shared_runners_minutes_limit": null,
    "extra_shared_runners_minutes_limit": null,
    "scim_identities": [],
    "is_admin": false,
    "note": null,
    "namespace_id": 5,
    "created_by": {
        "id": 1,
        "username": "root",
        "name": "Administrator",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
        "web_url": "<GitLabサーバーのURL or IPアドレス>/root"
    },
    "email_reset_offered_at": null,
    "using_license_seat": false
}

UIから確認してもユーザーが作成されたことを確認できます。

Railsコンソールから作成

GitLabはRuby on Railsを利用して開発されています。Rails ConsoleはGitLabに対してコマンドラインから直接操作する方法を提供するものになります。GitLabのデータを直接操作することが可能なため、利用には注意が必要です。多くは管理者がトラブルシューティングだったり直接アクセスしないと取得できない情報を確認するときなどに利用します。

docs.gitlab.com

Railsコンソールを開始するため、GitLabサーバーにログインします。ログイン後、 gitlab-rails コマンドからコンソールに入ります。

[ec2-user@ip-10-0-0-214 ~]$ sudo gitlab-rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]
 GitLab:       16.7.0-ee (9e7d34f7ff1) EE
 GitLab Shell: 14.32.0
 PostgreSQL:   14.9
------------------------------------------------------------[ booted in 35.54s ]
Loading production environment (Rails 7.0.8)
irb(main):001:0>

コンソールに入ったら、以下のようなコマンドを実行します。

irb(main):001:0> u = User.new(username: 'test-rails', email: '<Email>', name: 'test-rails', password: '<password>'
)
=> #<User id: @test-rails>
irb(main):002:0> u.save!
=> true
irb(main):003:0>

UIに戻ると、指定のユーザーが作成されたのを確認できます。

指定のパスワードでログインできるのも確認できました。

Rails Consoleを利用後は quitコマンドで抜けます。

irb(main):008:0> quit
[ec2-user@ip-10-0-0-214 ~]$

IaCツールから作成

今回は実施していませんが、GitLabのユーザーはAWS CloudFormation / Terraformでも管理可能です。

github.com

registry.terraform.io