[Heroku] Herokuがpassword変えてって言ってたので対応したら、API keyが無効になった

# 概要

`Heroku security notification - resetting user account passwords on May 4, 2022`と書かれたメールが届いたので、対応しましたよ。

ところがその対応によりHeorkuのAPI keyが無効になる問題が起きたので、追対応しました、というお話です。

私はプライベートでしか使っていないのですが、まさか業務で本番環境で使っていたりしたらかなりヤバイ話なので、誰かの役に立てればと思います。。。: (´ºωº｀):

# メール本文

日本時間で、`2022/05/04 9:11` にメールが届いていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/237b5738-aa5f-3ca5-a583-9e92be98f9c9.png)

> As part of our efforts to enhance our security and in response to an incident published on status.heroku.com, we wanted to inform you that we will begin resetting user account passwords on May 4, 2022. We recommend that you reset your user account password in advance here and follow the best practices below: 
>
> Minimum of 16 characters 
Minimum complexity of 3 out of 4: Uppercase, Lowercase, Numeric, Symbol
Don't just add a letter or a 1 digit number to the existing password while changing
Passwords may not be duplicated across accounts
If you do not reset your password and your user account password is reset by Heroku on May 4, 2022, your existing password will no longer work. To log in to Heroku, you must reset your password by accessing the Heroku login page and clicking the "Forgot your password?" link . Please be aware that you may be required to reset your passwords again in the future. 
> 
> NOTE: A password reset will also invalidate your API access tokens. As a result, any automations you’ve built to integrate with the Heroku Platform API that use these tokens may result in 403 forbidden errors . To avoid downtime you will need to re-enable direct authorizations by following the instructions here and update your integrations to use your newly generated token.
>
> As an added precaution, we strongly recommend enabling Multi-Factor Authentication (MFA) by following the guidance in the MFA article in the Heroku Dev Center. To ensure you have a backup to your primary MFA verification method, we also suggest setting up recovery codes.
>
> We sincerely regret any inconvenience you may have experienced because of this issue and appreciate your trust in us as we continue to make your success our top priority. Please continue to visit status.heroku.com for the latest updates. 
>
> If you used your previous password on any other sites, we highly recommend you also change your password on those sites. If you have any questions or require assistance, please open a case with Heroku Support. A reminder message will be sent on May 4, 2022.
>
>
> Thank you,
>
> Salesforce

# 経緯

実は先日、Herokuから認証情報が洩れてGithubでなんか悪用されてる的な情報が、HerokuとGithubから届いておりました。

Herokuのエンジニアの方々が色々調査をされたようなのですが、その流れで本日、上記の通り「前もってパスワード変えてくれると嬉しいです」というメールが届きました。

該当箇所はここ↓

> we wanted to inform you that we will begin resetting user account passwords on May 4, 2022. We recommend that you reset your user account password in advance here and follow the best practices below: 

（以下、直訳）
私たちは、2022年5月4日にあなたのアカウントのパスワードを変更するつもりだと連絡したいと思っていました。
以下に示すベストプラクティスに従って、前もってパスワードを変えることをお勧めします。

# 影響

パスワードを変えてみたところ、コマンドからの `heroku login` ができなくなってました／(^o^)＼

```bash
$ heroku login -i
heroku: Enter your login credentials
Email [hoge@hogemail.com]:                                
Password: **********************
 ›   Error: Your account has MFA enabled; API requests using basic authentication with email and password are not supported. Please generate an authorization token for API access. 
 ›
 ›   Error ID: vaas_enrolled
```

# 対策１

以下の記事に従って、パスワードの代わりにAPI keyを入力してみる。（失敗するので、急いでいる人は`対策２`へ進んでください。）

https://qiita.com/WEByamori/items/4cab4be8ce336ed3e4d6

API keyは以下のように確認できる。

![2022-05-05_00h35_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/55229189-ab02-6e83-5d14-d1944999423d.png)
![2022-05-05_00h35_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/d3ee2713-9b4b-771f-ffca-5ffc563e20a0.png)
![2022-05-05_00h35_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/f8b3ec3f-ccec-12e0-edc2-fbffe8674479.png)
![2022-05-05_00h35_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/a7fa9aec-972a-4b64-ef92-da5eec0dfe91.png)

Herokuにログインした後、①、②の順にクリックして、下へスクロール、そして③`Reveal`をくりっくすれば、④の位置にAPI keyが表示されます。

これをPasswordの代わりに入力してログインしようとすると...

```bash
$ heroku login -i
heroku: Enter your login credentials
Email [hoge@hogemail.com]: 
Password: ************************************
 ›   Error: Invalid credentials provided.
 ›
 ›   Error ID: unauthorized
```

だめかー(´；ω；｀)ﾌﾞﾜｯ

# 対策２

実は、パスワードを変えるとAPI keyが無効化されるみたいな話はメールに書いてありました。

> NOTE: A password reset will also invalidate your API access tokens. As a result, any automations you’ve built to integrate with the Heroku Platform API that use these tokens may result in 403 forbidden errors . To avoid downtime you will need to re-enable direct authorizations by following the instructions here and update your integrations to use your newly generated token.

素直にAPI keyを再発行します。

![2022-05-05_00h43_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/3e2f55ef-fd31-7124-f4fd-416db85ad1b0.png)
![2022-05-05_00h44_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327407/e15fe63f-6713-553e-972a-35c900a8b259.png)

⑤、⑥の順にクリック。

⑥のとき「API key作り直すと、危ないよ」というメッセージが出るけど、既にAPI key死んでるから(´^ω^｀)

ここで作り直したAPI keyを入力したら、ログインできました\( ˙꒳˙ \三/ ˙꒳˙)/

```bash
$ heroku login -i
heroku: Enter your login credentials
Email [hoge@hogemail.com]: 
Password: ************************************
Logged in as hoge@hogemail.com
```

# あとがき

対応依頼が来たら、全文隅まで読んでから対応開始(｀･ω･´)

ちなみにこのAPI key、CircleCIの自動デプロイで使っていたので、CircleCIに登録していた環境変数も新しいAPI keyに書き換えておきました。
（ただし、CIの動作は未確認です）