Google Cloud (GC)のTerraformについて勉強を始めたいと思い、WSL2にgcloudをインストールしたのですが、その承認方法がちょっとややこしいことになりつつあるという話です。
前提としてGCPのアカウントタイプには「ユーザーアカウント」と「サービスアカウント」の2種類があるのですが、今回は「ユーザーアカウント」で承認するケースについてです。
結論
- 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の承認をするためだけにそこまでするのか・・・と思ってしまいました。
(実践してないので本当はすごく楽なのかもしれませんが)
ということで、以下のようにして対策します。
-
--no-launch-browser
オプションを付与 - 表示されるURLをWebブラウザで開く
- 該当アカウントにログインして、リクエストを許可する
- 次の画面で表示される「認証コード」をコンソールで入力する
※コマンド結果やスクショは本記事の末尾に掲載しておきます。
上記の方法を取ることで、WSL2でWebブラウザが使えるようにする必要がなくなります。
ただしこの方法、現時点(2022年6月)で非推奨となっており、2022年7月頃には使えなくなります。
代わりのオプション--no-browser
--no-launch-browser
が使えなくなるということで、ドキュメントには--no-browser
オプションを代用してくれと記載されています。
ただしこのオプション、付けていない時と挙動が変わりません。(少なくとも変わっていないように見える)
$ 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
を実行することを必須としたいようです。
なので、WSL2でgcloudを使いたいならPowerShellにもgcloudをインストールする必要があるみたいです・・・。
現在(2022年6月)の回避策
先程参考2として載せていたGoogle Issue Trackerの中で回避策が提案されており、
google auth login
コマンドの前にDISPLAY=":0"
をつけるというものです。
これによってWindowsのWebブラウザが開かれ、承認処理を行うことが可能です。
まとめ
DISPLAY=":0" gcloud auth login
でとりあえずはどうにかなりましたが、今回のアップデートについては渋い反応をしている方もいるようで、実際僕もちょっと不便だなとは思いました。
WSL2への理解があればもっと簡単に解決できたりするのでしょうか?
参考
- gcloud ツールの概要
- Cloud SDK ツールの承認
- gcloud init
- Why was `gcloud auth login` flag `--no-launch-browser` deprecated?
- gcloud auth login --no-browser does not work
(備考)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