Active Directory 認証を使用して GitLab にプッシュしようとすると 500 エラーが発生する

Active Directory 認証を使用して GitLab にプッシュしようとすると 500 エラーが発生する

現在、SubVersion を使用していますが、コミット前のコードレビューを実行できるように、Git ベースのソリューションへの移行を検討しています。要件は、中央 Git リポジトリがオンプレミスでホストされ、プロジェクト管理を可能にするビジュアル フロントエンドがあり、Active Directory 認証を使用していることです。

試しに、Ubuntu サーバー 18.04 を実行している仮想マシンに GitLab EE をインストールしました。次の構成を使用して AD 認証を設定しました。

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
 main:
  label: 'MyOrganisation'
  host: '172.16.0.6'
  port: 389
  uid: 'sAMAccountName'
  bind_dn: 'CN=ldapbinduser,CN=Users,DC=myorganisation,DC=com'
  password: 'password' 
  timeout: 30
  active_directory: true
  allow_username_or_mail_login: false
  lowercase_usernames: true
  block_auto_created_users: true
  base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  group_base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  admin_group: 'internal software dept'
EOS

これは部分的に成功しました。GitLab ログオン ページに MyOrganisation タブが表示され、Software グループのメンバーは AD ログオンとパスワードを使用してログオンできますが、非メンバーはログオンできません。「Internal Software Dept」グループのメンバーには管理者権限が自動的に割り当てられませんが、手動で追加できるので問題ありません。

問題は、SVN リポジトリの履歴を GitLab にプッシュしたり、リポジトリをクローンしたりするときに発生します。GitLab に内部ソフトウェア グループを作成し、そこに TestProject プロジェクトを readme.txt ファイルとともに追加しました。Windows 10 PC に Windows 用の Git 資格情報マネージャーをインストールしました。git clone を使用してこれを PC にクローンしようとすると、http://gitlab/internal-software/testproject.git 次のようなメッセージを受け取ります:

致命的: アクセスできません 'http://gitlab/internal-software/testproject.git/': 要求された URL がエラーを返しました: 500 WireShark は、最初の接続試行に対して 401 – 権限がありません 応答を返し、2 番目の接続試行に対して 500 – 内部サーバー エラー 応答を返す 2 つの接続試行を示します:

1   local IP    gitlab IP   TCP 66  59710 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
2   gitlab IP   local IP    TCP 66  80 → 59710 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
3   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=1 Ack=1 Win=525568 Len=0
4   local IP    gitlab IP   HTTP    241 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1
5   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=1 Ack=188 Win=30336 Len=0
6   gitlab IP   local IP    HTTP    618 HTTP/1.1 401 Unauthorized  (text/plain)
7   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=188 Ack=565 Win=524800 Len=0
8   local IP    gitlab IP   HTTP    292 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1 
9   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=0
10  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
11  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=2025 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
12  gitlab IP   local IP    HTTP    309 HTTP/1.1 500 Internal Server Error  (text/html)
13  local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=426 Ack=3740 Win=525568 Len=0
14  local IP    gitlab IP   TCP 54  59710 → 80 [RST, ACK] Seq=426 Ack=3740 Win=0 Len=0

500 - 内部サーバー エラー応答の内容は、標準の GitLab 500 - 「おっと、当社側で問題が発生しました」ページです。

サーバー上で、var/logs/gitlab/gitlab-rails の .log ファイルを調べたところ、production_json.log に次の内容が見つかりました。

{"メソッド":"GET","パス":"/internal-software/testproject/git/info/refs","フォーマット":"/","controller":"Projects::GitHttpController","action":"info_refs","status":401,"duration":35.81,"view":1.05,"db":9.7,"time":"2019-09-19T08:37:55.371Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"} {"メソッド":"GET","パス":"/internal-software/testproject/git/info/refs","フォーマット":"/","controller":"Projects::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError: 暗号化またはメソッドを指定する必要があります","duration":215.3,"view":0.0,"db":14.11,"time":"2019-09-19T08:37:55.803Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"}

これらは、上記の HTTP リクエストと応答に一致するようです。最初は 401 で、2 番目は 500 です。

エラー メッセージは、ArgumentError: 暗号化またはメソッドを指定する必要があります。GitLab サイト、Stack Overflow、Stack Exchange、およびいくつかの有名な検索エンジンでこれを検索してみましたが、私の問題に一致しないおおよその結果しか得られませんでした。

答え1

GitLab のサポートから提供された回答は、構成から次の設定が欠落していたというものでした。

  encryption: 'plain'
  verify_certificates: true

これらを設定すると、クローンとプッシュが可能になりました。私が気付いたのは、管理者アカウントを使用してブロックを解除するまで、接続している他のすべてのユーザーにアカウントがブロックされていると通知されたことです。

関連情報