Bagaimana cara menggunakan GOOGLE_APPLICATION_CREDENTIALS dengan gcloud di server?

11

Apa cara paling sederhana untuk menggunakan gcloudbaris perintah secara non-interaktif dengan Akun Layanan di luar GCE? Lebih disukai tanpa mengotori sistem file dengan file kredensial, yang gcloud auth activate-service-account --key-file=...tidak.

Ada banyak kasus penggunaan untuk digunakan gclouddengan akun layanan. Misalnya, di server, saya ingin menguji apakah pengaturannya GOOGLE_APPLICATION_CREDENTIALSbenar dan memiliki izin yang diperlukan sebelum menjalankan aplikasi saya. Atau, saya ingin menjalankan beberapa skrip pengaturan atau skrip cron yang melakukan beberapa pengecekan dengan gcloudbaris perintah.

Perpustakaan Google Cloud (misalnya python , java ) secara otomatis menggunakan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALSuntuk mengautentikasi ke Google Cloud. Namun sayangnya, baris perintah ini tampaknya tidak berpengaruh gcloud. Apa cara bersih untuk digunakan gcloudsambil membiarkan sistem file tetap utuh?

$ 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.
yonran
sumber
Silakan membuka permintaan fitur di Google Public Issue Tracker dengan menyebutkan kasus penggunaan Anda: issuetracker.google.com
Kamran
1
Saya telah membuat edisi 38098801
yonran

Jawaban:

20

gcloudumumnya tidak menggunakan GOOGLE_APPLICATION_CREDENTIALSvariabel lingkungan. Ini hanya memiliki beberapa perintah untuk memfasilitasi pengaturan kredensial default aplikasi ini di gcloud auth application-default [login|revoke|print-access-token...].

Secara default gcloudmenyimpan konfigurasinya dalam $ {HOME} /. Config / gcloud. Dimungkinkan untuk mengganti lokasi itu dengan mengatur CLOUDSDK_CONFIGvariabel lingkungan.

Juga dimungkinkan (meskipun lebih membosankan) untuk mengesampingkan sebagian besar pengaturan sehingga tidak perlu dikonfigurasikan sebelumnya melalui gcloud config set ...dan / atau gcloud auth activate-service-account. Untuk setiap pengaturan, seseorang dapat menentukan variabel lingkungan.

Misalnya perintah setara yang Anda coba gunakan file kunci akun layanan adalah:

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

Perhatikan bahwa ini masih akan men-cache kredensial CLOUDSDK_CONFIGkarena ia perlu melakukan cache akses-token, sehingga ia tidak harus me-refreshnya pada setiap permintaan.

Untuk use case, opsi terbaik menurut saya adalah

  1. Setel CLOUDSDK_CONFIGke beberapa direktori temp
  2. gcloud auth activate-service-account --key-file=...
  3. ... gunakan gclouduntuk melakukan pekerjaan Anda ...
  4. Hapus CLOUDSDK_CONFIGdirektori temp .
cherba
sumber
1

Sudahkah Anda melihat --accountopsi? Suka

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

( Referensi )

Mengenai "Lebih disukai tanpa mengotori sistem file dengan kredensial file", saya tidak yakin apakah mungkin untuk mencapai.

Donald Bebek
sumber
Saya pikir OP bertanya tentang cara mengotentikasi tanpa harus mengaktifkan kredensial akun layanan yang menyimpan cache kredensial di tempat lain. Saya pikir Anda hanya dapat menggunakan --account=setelah kredensial diaktifkan.
David Xia
1

1) Buat ServiceAccount di GCP IAM. Centang kotak untuk "Berikan kunci pribadi baru", dan pilih JSON sebagai jenis file.

2) Unduh file JSON ke server Anda, dan ketik: gcloud auth activate-service-account --key-file serviceaccount.json

3) Verifikasi kredensial diterapkan dengan menjalankan gcloud auth list.

Shane Ramey
sumber