Làm cách nào để sử dụng GOOGLE_APPLICATION_CREDENTIALS với gcloud trên máy chủ?


11

Cách đơn giản nhất để sử dụng gclouddòng lệnh không tương tác với Tài khoản dịch vụ bên ngoài GCE là gì? Tốt nhất là không xả rác hệ thống tệp với các tệp thông tin xác thực, đó là những gì gcloud auth activate-service-account --key-file=...làm.

Có nhiều trường hợp sử dụng để sử dụng gcloudvới tài khoản dịch vụ. Ví dụ: trên máy chủ, tôi muốn kiểm tra xem bộ đó có GOOGLE_APPLICATION_CREDENTIALSđược đặt chính xác không và có các quyền cần thiết trước khi chạy ứng dụng của tôi. Hoặc, tôi muốn chạy một số tập lệnh thiết lập hoặc tập lệnh cron thực hiện một số kiểm tra với gclouddòng lệnh.

Các thư viện Google Cloud (ví dụ python , java ) tự động sử dụng biến môi trường GOOGLE_APPLICATION_CREDENTIALSđể xác thực với Google Cloud. Nhưng thật không may, dòng lệnh này dường như không có tác dụng gcloud. Một cách sạch để sử dụng gcloudtrong khi giữ nguyên hệ thống tập tin là gì?

$ 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.

Vui lòng mở một yêu cầu tính năng trên Trình theo dõi sự cố công cộng của Google bằng cách đề cập đến các trường hợp sử dụng của bạn: suetracker.google.com
Kamran

1
Tôi đã tạo vấn đề 38098801
yonran

Câu trả lời:


19

gcloudnói chung không sử dụng GOOGLE_APPLICATION_CREDENTIALSbiến môi trường. Nó chỉ có một số lệnh để tạo điều kiện thiết lập các thông tin mặc định của ứng dụng này gcloud auth application-default [login|revoke|print-access-token...].

Theo mặc định, gcloudlưu trữ cấu hình của nó trong $ {HOME} /. Config / gcloud. Có thể ghi đè vị trí đó bằng cách đặt CLOUDSDK_CONFIGbiến môi trường.

Ngoài ra, có thể (mặc dù tẻ nhạt hơn) để ghi đè hầu hết cài đặt để chúng không cần phải được cấu hình sẵn thông qua gcloud config set ...và / hoặc gcloud auth activate-service-account. Đối với mỗi cài đặt, người ta có thể chỉ định biến môi trường.

Ví dụ: lệnh tương đương bạn đã cố sử dụng tệp khóa tài khoản dịch vụ sẽ là:

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

Lưu ý rằng điều này sẽ vẫn lưu thông tin đăng nhập vào bộ đệm CLOUDSDK_CONFIGvì nó cần lưu mã thông báo truy cập, để nó không phải làm mới nó trên mỗi lần gọi.

Đối với trường hợp sử dụng của bạn, tùy chọn tốt nhất theo quan điểm của tôi sẽ là

  1. Đặt CLOUDSDK_CONFIGvào một số thư mục tạm thời
  2. gcloud auth activate-service-account --key-file=...
  3. ... sử dụng gcloudđể làm công việc của bạn ...
  4. Xóa CLOUDSDK_CONFIGthư mục tạm thời .

1

Bạn đã xem xét các --accounttùy chọn? Giống

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

( Tham khảo )

Về "Tốt nhất là không xả rác hệ thống tệp với các tệp thông tin xác thực", tôi không chắc liệu nó có thể đạt được hay không.


Tôi nghĩ rằng OP đang hỏi về cách xác thực mà không cần phải kích hoạt thông tin đăng nhập tài khoản dịch vụ lưu trữ thông tin đăng nhập ở nơi khác. Tôi nghĩ bạn chỉ có thể sử dụng --account=khi thông tin đăng nhập đã được kích hoạt.
David Xia

1

1) Tạo một ServiceAccount trong GCP IAM. Chọn hộp để "Cung cấp khóa riêng mới" và chọn JSON làm loại tệp.

2) Tải tệp JSON về máy chủ của bạn và nhập: gcloud auth activate-service-account --key-file serviceaccount.json

3) Xác minh thông tin đăng nhập đã được áp dụng bằng cách chạy gcloud auth list.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.