2020/06/09
GitLabの2段階認証エラーを強制的に解消する
問題
gitlabに突然ログインできなくなりました。
事象としては、2FAのコードを入れてログインをすると500エラーのページが出続けていました。
まずやったことは、Gitlabのサーバーの再起動でしたが、うまくいきませんでした。
気を取り直して、ログファイルを眺めたところ、以下のようなログが取得できました。
production_json.log
{"method":"POST","path":"/users/sign_in","format":"html","controller":"SessionsController","action":"create","status":500,"duration":10.27,"view":0.0,"db":1.05,"time":"2020-06-09T01:37:52.698Z","params":[{"key":"utf8","value":"✓"},{"key":"authenticity_token","value":"[FILTERED]"},{"key":"user","value":{"remember_me":"0","otp_attempt":"[FILTERED]"}}],"remote_ip":"172.31.0.2","user_id":null,"username":null,"ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36","queue_duration":null,"correlation_id":"c6WfQ2xfJo7","cpu_s":0.13322539600000005,"exception.class":"OpenSSL::Cipher::CipherError","exception.message":"bad decrypt","exception.backtrace":["app/controllers/sessions_controller.rb:253:in `valid_otp_attempt?'","app/controllers/concerns/authenticates_with_two_factor.rb:52:in `authenticate_with_two_factor_via_otp'","app/controllers/concerns/authenticates_with_two_factor.rb:41:in `authenticate_with_two_factor'"]}
"exception.class":"OpenSSL::Cipher::CipherError"
"exception.message":"bad decrypt"
調べてみると、encryptionしているキーが変更されてしまった場合に起きるようで、以前gitlabのアップグレードをした際に、データをmigrationしたのですが
その際に、そのsecret値を変更してしまっていた記憶があり、それが原因だったと考えています。
解決方法
一番良いのは、前回migration前の設定に戻すことなのですが・・若干面倒だったので
SQLを使って、直接postgresqlのデータを変更して対応しました。
2FAの部分が問題だったので、2FAに関するデータをリセットしました。(次回ログイン時に再度2FAの設定は必要になります)
update users
set
encrypted_otp_secret = NULL,
encrypted_otp_secret_iv = NULL,
encrypted_otp_secret_salt = NULL,
otp_required_for_login = False
where username = 'my-gitlab-username';
このあと、ログインを試したところ、無事ログインできました。
以上になります。