Google Cloud から完全にログアウトするにはどうすればいいですか? `gcloud auth revoke --all` では不十分です

Google Cloud から完全にログアウトするにはどうすればいいですか? `gcloud auth revoke --all` では不十分です

Google Cloud からログアウトする思われる簡単なはずです。実行すると:

$ unset GOOGLE_APPLICATION_CREDENTIALS

$ gcloud auth revoke --all
Revoked credentials:
  - [my account]
$ gcloud auth list

No credentialed accounts.

To login, run:
  $ gcloud auth login `ACCOUNT`

最初は見た目完全にログアウトしたように見えますgcloud。しかし、Python シェルを開いたときに何が起こるか見てみましょう。

>>> from google.cloud import secretmanager_v1beta1 as secretmanager
>>> client = secretmanager.SecretManagerServiceClient()
/Users/my/path/.venv/lib/python3.7/site-packages/google/auth/_default.py:66: UserWarning: Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/
  warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
>>> path = client.secret_version_path(project="my-project-name", secret="my-secret", secret_version="latest")
>>> secret = client.access_secret_version(path)
>>> secret.payload.data.decode()
"Oh, no! I should be secret!"

ご覧のとおり、実行したにもかかわらず、gcloud auth revoke --allどこかに保存されているユーザー認証情報を使用してPython SDK経由でGoogle Cloudにアクセスできます。完全にノートパソコンで Google Cloud からログアウトするにはどうすればよいですか?

編集: さらに明確にするために、このコンピューターには Google Cloud サービス アカウントの JSON ファイルは保存されておらず、GOOGLE_APPLICATION_CREDENTIALS環境変数を設定解除しました。

答え1

これが役に立つかどうかはわかりませんが、私も同様の問題に遭遇しました。コマンドを使用してすべての資格情報を取り消した後でも、gcloud auth revoke --all自分の環境に対してスクリプトを実行することができました。最終的に、アプリケーションのデフォルトの資格情報ファイルが次の場所にあることがわかりました。~/.config/gcloud/application_default_credentials.jsonこのファイルの名前を変更または削除すると、資格情報が完全に取り消されます。これで、クライアント ライブラリは環境にアクセスできなくなります。

  File "audit_test.py", line 8, in main
    client = resource_manager.Client()
  File "fake_path/python3.7/site-packages/google/cloud/resource_manager/client.py", line 72, in __init__
    super(Client, self).__init__(credentials=credentials, _http=_http)
  File "fake_path/python3.7/site-packages/google/cloud/client.py", line 132, in __init__
    credentials, _ = google.auth.default()
  File "fake_path/python3.7/site-packages/google/auth/_default.py", line 321, in default
    raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

答え2

上記のコメントにあるようにアジャンチャールズgcloud auth application-default revoke動作します。コマンドを入力するだけで、application-default認証情報が削除されます。違いを確認してくださいここ私も同じ問題を抱えていましたが、この方法だけが機能しました。

編集:

アプリケーションのデフォルトの認証情報のみを削除するgcloud auth revoke --allため、引き続き を呼び出す必要があることに注意してください。gcloud auth application-default revoke

関連情報