WSL2でのCloud SDKツールの承認を行う方法（gcloud auth login）がちょっとややこしくなっているらしい

Google Cloud (GC)のTerraformについて勉強を始めたいと思い、WSL2に[gcloud](https://cloud.google.com/sdk/gcloud?hl=ja)をインストールしたのですが、その承認方法がちょっとややこしいことになりつつあるという話です。

前提としてGCPのアカウントタイプには[「ユーザーアカウント」と「サービスアカウント」の2種類](https://cloud.google.com/sdk/docs/authorizing?hl=ja#types_of_accounts)があるのですが、今回は「ユーザーアカウント」で承認するケースについてです。

## 結論
- 2022年7月までは`gcloud auth login --no-launch-browser`を使うのがおそらく一番楽（Googleとしては非推奨）
- 2022年7月以降は、`DISPLAY=":0" gcloud auth login`がとりあえずの回避策になりそう


## （非推奨ではあるが）現在（2022年6月）使えるおそらく一番楽な方法
gcloudを用いてGCを操作するには、`gcloud init`または`gcloud auth login`コマンドを用いて、ユーザーアカウントによるアクセスを行う必要があります。

ということで早速`gcloud auth login`を使ってみます。
実行環境はWSL2です。
```
$ gcloud auth login
You are authorizing gcloud CLI without access to a web browser. Please run the following command on a machine with a web browser and copy its output back here. Make sure the installed gcloud version is 372.0.0 or newer.

gcloud auth login --remote-bootstrap="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=IM7fR5Zqmxb2lntvyHJPVUkfKW421I&access_type=offline&code_challenge=rxWJF6LgNHeJpuqSWVSobYviIPr6Po3_nStkGgpnDdA&code_challenge_method=S256&token_usage=remote"


Enter the output of the above command:
```
何か色々と言われてますね。


> You are authorizing gcloud CLI without access to a web browser. Please run the following command on a machine with a web browser and copy its output back here. Make sure the installed gcloud version is 372.0.0 or newer.

「Webブラウザを使わずにCLIの承認を行うとしているため、Webブラウザが使えるマシーンで改めてコマンドを実行してください」とのこと。

gcloudにおいては、ユーザーアカウントによる承認を行うためにはWebブラウザを用いて、Google Cloud SDKのリクエストを許可する必要があります。
（セキュリティ的な理由らしいです。）

WSL2にGUI設定をしたりとかしたら解決するのかもしれませんが、gcloudの承認をするためだけにそこまでするのか・・・と思ってしまいました。
（実践してないので本当はすごく楽なのかもしれませんが）

ということで、以下のようにして対策します。

1. `--no-launch-browser`オプションを付与
1. 表示されるURLをWebブラウザで開く
1. 該当アカウントにログインして、リクエストを許可する
1. 次の画面で表示される「認証コード」をコンソールで入力する

※コマンド結果やスクショは本記事の末尾に掲載しておきます。

上記の方法を取ることで、WSL2でWebブラウザが使えるようにする必要がなくなります。

ただしこの方法、現時点（2022年6月）で非推奨となっており、**2022年7月頃には使えなくなります**。

## 代わりのオプション`--no-browser`
`--no-launch-browser`が使えなくなるということで、ドキュメントには[`--no-browser`オプションを代用してくれ](https://cloud.google.com/sdk/gcloud/reference/init#:~:text=The%20%2D%2Dconsole%2Donly/%2D%2Dno%2Dlaunch%2Dbrowser%20are%20deprecated%20and%20will%20be%20removed%20in%20future%20updates.%20Use%20%2D%2Dno%2Dbrowser%20as%20a%20replacement.)と記載されています。

ただしこのオプション、**付けていない時と挙動が変わりません**。（少なくとも変わっていないように見える）

```
$ gcloud auth login --no-browser
You are authorizing gcloud CLI without access to a web browser. Please run the following command on a machine with a web browser and copy its output back here. Make sure the installed gcloud version is 372.0.0 or newer.

gcloud auth login --remote-bootstrap="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=9LIFAagO246eEM3JGqJfVfubP580dP&access_type=offline&code_challenge=whQ0CzSRLKXYCNtFkHK3_V4YEG66iL5IdgIzrpMjonY&code_challenge_method=S256&token_usage=remote"


Enter the output of the above command:
```

どうやらGoogleとしては、セキュリティ的な都合から、ユーザーアカウントによる承認を行う際はWebブラウザが使えるマシーンで`gcloud auth login --remote-bootstrap=https://xxx`を実行することを必須としたいようです。
- [参考1](https://groups.google.com/g/google-cloud-dev/c/UmGFI36Tufk/m/oE89GjZnCAAJ)
- [参考2](https://issuetracker.google.com/issues/224754679)

なので、WSL2でgcloudを使いたいならPowerShellにもgcloudをインストールする必要があるみたいです・・・。

## 現在（2022年6月）の回避策
先程[参考2として載せていたGoogle Issue Tracker](https://issuetracker.google.com/issues/224754679)の中で回避策が提案されており、
`google auth login`コマンドの前に`DISPLAY=":0"`をつけるというものです。

これによってWindowsのWebブラウザが開かれ、承認処理を行うことが可能です。

## まとめ
`DISPLAY=":0" gcloud auth login`でとりあえずはどうにかなりましたが、今回のアップデートについては渋い反応をしている方もいるようで、実際僕もちょっと不便だなとは思いました。
WSL2への理解があればもっと簡単に解決できたりするのでしょうか？

## 参考
- [gcloud ツールの概要](https://cloud.google.com/sdk/gcloud?hl=ja)
- [Cloud SDK ツールの承認](https://cloud.google.com/sdk/docs/authorizing?hl=ja)
- [gcloud init](https://cloud.google.com/sdk/gcloud/reference/init)
- [Why was \`gcloud auth login\` flag \`--no-launch-browser\` deprecated?](https://groups.google.com/g/google-cloud-dev/c/UmGFI36Tufk/m/oE89GjZnCAAJ)
- [gcloud auth login --no-browser does not work](https://issuetracker.google.com/issues/224754679)

## （備考）`gcloud auth login --no-lanunch-browser`の結果
一部伏せてます

### コマンド結果
```
$ gcloud auth login --no-launch-browser
WARNING: The login flow that you are using with the --no-launch-browser flag will be updated by July 12, 2022 to address a security issue. No immediate action is required to continue using this flag, but be sure to upgrade your gcloud installation by running `gcloud components update` between July 12, 2022 and August 2, 2022.

Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=6Dyp1cOOUspyHZcAXedLxeaBdYwQj7&prompt=consent&access_type=offline&code_challenge=kxms5cD27AW25yVUv0a7HiFt5xIrO_Z0iM6_9byPbbo&code_challenge_method=S256

Enter verification code: xxx

You are now logged in as [xxx@gmail.com].
Your current project is [default-353402].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
```

### スクリーンショット
![sdk_allow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/a140397e-1325-7306-e139-146ce8bd19e9.png)
![sdk_allow_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/4c22d777-b171-8438-bfd8-afac35c5edcc.png)