จะใช้ GOOGLE_APPLICATION_CREDENTIALS กับ gcloud บนเซิร์ฟเวอร์ได้อย่างไร


11

วิธีที่ง่ายที่สุดในการใช้gcloudบรรทัดคำสั่งแบบไม่โต้ตอบกับบัญชีบริการนอก GCE คืออะไร ดีกว่าโดยไม่ทิ้งระบบไฟล์ด้วยไฟล์หนังสือรับรองซึ่งเป็นสิ่งที่gcloud auth activate-service-account --key-file=...ทำ

มีหลายกรณีการใช้งานสำหรับใช้gcloudกับบัญชีบริการ ตัวอย่างเช่นบนเซิร์ฟเวอร์ฉันต้องการทดสอบว่าGOOGLE_APPLICATION_CREDENTIALSตั้งค่าไว้อย่างถูกต้องและมีสิทธิ์ที่จำเป็นก่อนเรียกใช้แอปพลิเคชันของฉัน หรือฉันต้องการเรียกใช้สคริปต์การตั้งค่าหรือสคริปต์ cron ที่ดำเนินการตรวจสอบบางอย่างด้วยgcloudบรรทัดคำสั่ง

ไลบรารี Google Cloud (เช่นpython , java ) ใช้ตัวแปรสภาพแวดล้อมโดยอัตโนมัติ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

คำตอบ:


20

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=เมื่อเปิดใช้งานข้อมูลรับรองแล้วเท่านั้น
David Xia Xia

1

1) สร้าง ServiceAccount ใน GCP IAM ทำเครื่องหมายที่ช่องเพื่อ "สร้างคีย์ส่วนตัวใหม่" และเลือก 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.