サーバー上のgcloudでGOOGLE_APPLICATION_CREDENTIALSを使用する方法


11

gcloudGCEの外部のサービスアカウントでコマンドラインを非対話的に使用する最も簡単な方法は何ですか?できれば、資格情報ファイルでファイルシステムを散らかさgcloud auth activate-service-account --key-file=...ないでください。

gcloudサービスアカウントで使用する多くのユースケースがあります。たとえば、サーバーGOOGLE_APPLICATION_CREDENTIALS上で、アプリケーションを実行する前にが正しく設定され、必要なアクセス許可があることをテストしたいと思います。または、gcloudコマンドラインでチェックを実行するセットアップスクリプトまたはcronスクリプトを実行したいと思います。

Google Cloudライブラリ(pythonjavaなど)は、環境変数GOOGLE_APPLICATION_CREDENTIALSを自動的に使用してGoogle Cloudの認証を行います。しかし、残念ながら、このコマンドラインはに影響を与えないようgcloudです。gcloudファイルシステムをそのまま残しながら使用するクリーンな方法は何ですか?

$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

Google Public Issue Trackerで、ユースケースを記載した機能リクエストを自由に開いてください。issuetracker.google.com
Kamran

1
私は問題38098801
yonran

回答:


19

gcloud通常、GOOGLE_APPLICATION_CREDENTIALS環境変数は使用しません。これらのアプリケーションのデフォルト認証情報の設定を容易にするコマンドがいくつかありますgcloud auth application-default [login|revoke|print-access-token...]

デフォルトでgcloudは、構成を$ {HOME} /。config / gcloudに保存します。CLOUDSDK_CONFIG環境変数を設定することにより、その場所を上書きできます。

また、(さらに面倒ですが)ほとんどの設定をオーバーライドしてgcloud config set ...、および/またはで事前に設定する必要がないようにすることもできますgcloud auth activate-service-account。設定ごとに、環境変数を指定できます。

たとえば、サービスアカウントキーファイルを使用しようとした同等のコマンドは次のようになります。

$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
    gcloud alpha pubsub topics publish testtopic hello

これはCLOUDSDK_CONFIG、アクセストークンをキャッシュする必要があるため、資格情報を引き続きキャッシュすることに注意してください。これにより、呼び出しごとに資格情報を更新する必要がなくなります。

あなたのユースケースでは、私の意見で最良のオプションは

  1. CLOUDSDK_CONFIG一時ディレクトリに設定する
  2. gcloud auth activate-service-account --key-file=...
  3. ... gcloud作業に使用する...
  4. 一時CLOUDSDK_CONFIGディレクトリを削除します。

1

--accountオプションを見ましたか?お気に入り

$gcloud --account="foo" ...

参考

「できれば、資格情報ファイルでファイルシステムを散らかさないこと」については、達成できるかどうかわかりません。


OPは、他の場所に資格情報をキャッシュするサービスアカウントの資格情報をアクティブ化せずに認証する方法について尋ねていると思います。--account=資格情報がアクティブになった後にのみ使用できると思います。
デビッド夏

1

1)GCP IAMでServiceAccountを作成します。[新しい秘密キーを作成する]チェックボックスをオンにして、ファイルタイプとしてJSONを選択します。

2)JSONファイルをサーバーにダウンロードし、次を入力します。 gcloud auth activate-service-account --key-file serviceaccount.json

3)を実行して、資格情報が適用されたことを確認しますgcloud auth list

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.