外部認証制御

11.10でGitLab PremiumからGitLab Freeに移行

高度に管理された環境では、プロジェクトの分類とユーザーアクセスに基づいてアクセスを許可する外部サービスによってアクセスポリシーを制御する必要があるかもしれません。GitLabは独自に定義したサービスでプロジェクトの作成者をチェックする方法を提供します。

外部サービスが設定され有効化された後、プロジェクトがアクセスされると、ユーザー情報とプロジェクトに割り当てられたプロジェクト分類ラベルで外部サービスにリクエストが行われます。サービスが既知の応答を返すと、その結果は6時間キャッシュされます。

外部認証が有効な場合、GitLabはさらにクロスプロジェクトデータをレンダリングするPagesや機能をブロックします。これには以下が含まれます:

  • ダッシュボード下のほとんどのページ(アクティビティ、マイルストーン、スニペット、割り当てられたマージリクエスト、割り当てられたイシュー、To-Doリスト)。
  • 特定のグループの下(アクティビティ、貢献者分析、イシュー、課題ボード、ラベル、マイルストーン、マージリクエスト)。
  • グローバル検索とグループ検索は無効です。

これは、外部認証サービスに対して一度に多くのリクエストを実行しないようにするためです。

アクセスが許可されたり拒否されたりすると、external-policy-access-control.log というログファイルに記録されます。GitLab が保持するログについては、Linux パッケージのドキュメントをご覧ください。

自己署名証明書によるTLS認証を使用する場合、OpenSSLインストールによってCA証明書が信頼される必要があります。Linuxパッケージを使ってインストールしたGitLabを使う場合、LinuxパッケージのドキュメントでカスタムCAをインストールする方法を学んでください。あるいは、openssl version -dを使ってカスタム証明書のインストール先を学んでください。

設定

外部認証サービスは、管理者が有効にすることができます:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 設定] > [全般]を選択します。
  4. 外部認証] を展開します。
  5. 各項目を入力してください。
  6. 変更を保存を選択します。

デプロイトークンとデプロイキーを使用した外部認証の許可

  • GitLab 15.9 で導入されました
  • GitLab 16.0 で導入された、デプロイトークンがコンテナやパッケージのレジストリにアクセスできなくなったこと。

デプロイトークンや デプロイキーを使ったGitオペレーションに対して外部からの認証を許可するようにインスタンスを設定することができます。

前提条件:

  • 外部認証用のサービスURLなしで分類ラベルを使用する必要があります。

デプロイトークンとキーによる作成者を許可するには、以下の手順に従います:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 設定] > [全般]を選択します。
  4. 外部認証] を展開します:
    • サービスURL]フィールドは空のままにします。
    • デプロイトークンとデプロイキーを外部認証で使用することを許可する]を選択します。
  5. 変更を保存を選択します。
caution
外部認証を有効にすると、デプロイトークンはコンテナまたはパッケージのレジストリにアクセスできなくなります。デプロイトークンを使用してこれらのレジストリにアクセスする場合、このメジャーによってこれらのトークンの使用が制限されます。外部認証を無効にして、コンテナまたはパッケージ・レジストリでトークンを使用します。

どのように動作するか

GitLabがアクセスを要求すると、外部サービスにJSON POSTリクエストを送信します:

{
  "user_identifier": "jane@acme.org",
  "project_classification_label": "project-label",
  "user_ldap_dn": "CN=Jane Doe,CN=admin,DC=acme",
  "identities": [
    { "provider": "ldap", "extern_uid": "CN=Jane Doe,CN=admin,DC=acme" },
    { "provider": "bitbucket", "extern_uid": "2435223452345" }
  ]
}

user_ldap_dn はオプションで、ユーザーがLDAPでサインインしている場合にのみ送信されます。

identities には、ユーザーに関連付けられたすべての ID の詳細が格納されます。ユーザーに関連付けられている ID がない場合は空の配列となります。

外部認証サービスがステータスコード 200 で応答した場合、ユーザーにアクセスが許可されます。外部サービスがステータスコード401または403で応答した場合、ユーザーはアクセスを拒否されます。いずれの場合も、リクエストは6時間キャッシュされます。

アクセスを拒否する場合、オプションでJSONボディにreason

{
  "reason": "You are not allowed access to this project."
}

200、401、403以外のステータスコードもユーザーへのアクセスを拒否しますが、レスポンスはキャッシュされません。

サービスがタイムアウトした場合(500ミリ秒後)、「External Policy Server did not respond」というメッセージが表示されます。

分類ラベル

プロジェクトの[設定] > [一般] > [一般プロジェクト設定]ページの[分類ラベル]ボックスで、独自の分類ラベルを使用できます。プロジェクトで分類ラベルが指定されていない場合は、グローバル設定で定義されたデフォルトのラベルが使用されます。

すべてのプロジェクトページで、右上にラベルが表示されます。

classification label on project page