Table of Contents
問題設定
- GitLab上のリソースにコマンドラインからclone, push, pullができるようにアクセス環境を整えたい
- Project用Personal Access Tokenを設定し, CLIからclone等ができるようにする
アクセストークンって?
そもそもトークンとは,サーバがクライアントに対して有効期限が定義可能なトークンを発行し,APIリクエスト時に付随されたトークンを照合することでクライアントを認証するという仕組みのことです. GitLabにおけるアクセストークンとは,GitLab API, GitLab repository, GitLab registryへの各アクセスやCI/CDジョブからGitLabリソースへのアクセスの可否などを設定して発行されるトークンのことです.
GitLabにおいては発行できるアクセストークンの種類が複数あります. 公式ページが「GitLabにはパーソナルアクセストークンやプロジェクトアクセストークンや他にも何種類もアクセストークンがあります。どれを使ったらいいか悩みませんか?」って言っているくらいです.
なぜアクセストークンか?
GitLab上のGitリポジトリにアクセスする場合は, SSHの公開鍵認証方式も使用することができます. しかし,社内ファイアウォール内部のマシンからだとSSHが使えない場合があったり,HTTPS経由でクローン/編集使用としても結局以下のようなエラーメッセージを言われ,アクセストークンを使いなさいとなる可能性があります.
それならば初めからアクセストークンで設定してしまいましょうという考えた次第です.
1
2
3
remote: You must use a personal access token with 'read_repository' or 'write_repository' scope for Git over HTTP.
remote: You can generate one at https://gitlab.com/profile/personal_access_tokens
fatal: Authentication failed for 'https://gitlab.com/my-test-project/example.git/'
パスワード認証に対するアクセストークンの利点
GitLabのリソース(例:プロジェクト・リポジトリ・イシューなど)へのアクセスは通常,ウェブ画面からユーザー名とパスワードでログインしてウェブ画面でアクセスします. それに対してアクセストークンを利用するメリットは,セキュリティ目線で以下のことが挙げられます:
アクセス制限ができる | アクセストークンはAPI呼び出しのみや,Gitリポジトリへのアクセスのみなどのアクセス制限をかけられます.もしアクセストークンが漏洩した場合でも,パスワードと異なり,被害を軽減することができます. |
個別に発行する | アクセストークンは外部サービスや開発ツールごとに個別に発行します.使わなくなったサービス・ツールなどのアクセストークンを個別に無効化し,確実にサービス・ツールからGitLabリソースへアクセスできないようにできます.パスワードで同じことをするためには,パスワードを変更し,継続して利用するサービスすべてのパスワードを更新する必要があります. |
類推されにくい | アクセストークンはGitLabがランダムで十分な長さの安全なな文字列を発行します.人間が覚えなければならないパスワードと比べると,強度が高めです. |
2FAが不要 | 今では安全のため多要素認証を有効にすることが求められます.アクセストークンによるアクセスではこの2FAが不要です. |
Project用PersonalAccessTokenの設定
作成手順
- GitLabのトップメニューの右側のユーザーアイコンから,Preferencesをクリックします
- 左のサイドメニューのアクセス トークンを選択します
- Token nameにわかりやすい名前を入力します
- 必要に応じて有効期限を設定します
- Select scopesから必要な権限を選びます
- Create personal access tokenをクリックして,アクセストークンを作成します
REMARKS
- パーソナルアクセストークンが作成され,一度だけ表示されます
- アクセストークンをメモしたりせずに,CI/CD変数やアクセストークンを利用するツールに設定
- パーソナルアクセストークンは何度でも作成できるため,使い回しをせずに,都度作成
Cloneテスト
Syntax
1
git clone https://<USER_NAME>:<TOKEN>@<project-url>
上記で検証したところ無事git clone実行できた.
Appendix
SSH Keyの登録方法
GitLab公式ページから, User Settings > SSH Keys
へアクセスして,公開鍵をTitleとExpiratiopn dateとともに入力してAdd keyボタンをクリックするだけで設定できます.
ssh-keygenコマンドを用いた公開鍵,秘密鍵ペアの作成
ssh-keygenコマンドは「OpenSSH」で使う公開鍵と秘密鍵や,CA鍵を使った「証明書」と呼ばれるファイルを作成できます.
Syntax
1
ssh-keygen -t <暗号化形式> -C "ユーザー名@ホスト名" -b <ビット数> -N 'パスフレーズ' -f <file_name>
Example
1
% ssh-keygen -t rsa -C "unko@gitlab.devsample.com" -b 4096 -N 'unkounko' -f id_rsa_unko_test
すると,``~/.ssh/以下に公開鍵(
.pub`形式)と秘密鍵2つが生成されます
1
2
~/.ssh % ls
id_rsa_unko_test.pub id_rsa_unko_test
既存の公開鍵の確認はcat
コマンドを用いてcat id_rsa_unko_test.pub
とかで確認してください.
Referneces
関連ポスト
オンラインマテリアル
(注意:GitHub Accountが必要となります)