![Active Directory 認証を使用して GitLab にプッシュしようとすると 500 エラーが発生する](https://rvso.com/image/1604277/Active%20Directory%20%E8%AA%8D%E8%A8%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%20GitLab%20%E3%81%AB%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%20500%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B.png)
現在、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
これらを設定すると、クローンとプッシュが可能になりました。私が気付いたのは、管理者アカウントを使用してブロックを解除するまで、接続している他のすべてのユーザーにアカウントがブロックされていると通知されたことです。