亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Google云客戶端庫時出錯:未知憑據類型:

使用Google云客戶端庫時出錯:未知憑據類型:

Go
慕沐林林 2022-09-05 16:55:00
我正在Go中使用Google Cloud,并關注John Hanley的這篇文章:https://www.jhanley.com/google-cloud-improving-security-with-impersonation/并用這個SO答案搗碎了它:如何在不下載服務帳戶憑據的情況下從 Google Compute Engine 和本地對 Google API (Google Drive API) 進行身份驗證?憑據已成功保存到“application_default_credentials.json”:注意:“類型”:“impersonated_service_account"    {  "delegates": [],  "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[[email protected]]:generateAccessToken",  "source_credentials": {    "client_id": "...apps.googleusercontent.com",    "client_secret": "...",    "refresh_token": "...",    "type": "authorized_user"  },  "type": "impersonated_service_account"}我的代碼生成未知的憑據類型:“impersonated_service_account”錯誤:package mainimport (...    "cloud.google.com/go/storage"    "golang.org/x/oauth2"    "google.golang.org/api/docs/v1"    "google.golang.org/api/drive/v3"    "google.golang.org/api/impersonate"    "google.golang.org/api/option"...)var Config.GoogleServiceAccount string = "[email protected]"func main(){  _ = getTokenAsImpersonator()}// From: https://pkg.go.dev/google.golang.org/api/impersonate#example-CredentialsTokenSource-ServiceAccountfunc getTokenAsImpersonator() oauth2.TokenSource {    ctx := context.Background()    // Base credentials sourced from ADC or provided client options.    ts, err := impersonate.CredentialsTokenSource(ctx, impersonate.CredentialsConfig{        TargetPrincipal: Config.GoogleServiceAccount,        Scopes:          []string{"https://www.googleapis.com/auth/cloud-platform"},        // Delegates: []string{"[email protected]"},    })    if err != nil {        log.Fatal(err)    }    return ts}“未知憑據類型:”impersonated_service_account“錯誤:google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: unknown credential type: "impersonated_service_account"我是否做錯了什么,或者這是一個錯誤?
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

我在運行 GCP Terraform 提供程序測試時遇到了同樣的問題。您可以指定服務帳戶 Terraform 必須模擬設置 env 變量(文檔)。GOOGLE_IMPERSONATE_SERVICE_ACCOUNT

配置步驟:

  • export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT=SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com

  • gcloud auth application-default login


查看完整回答
反對 回復 2022-09-05
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

在某些時候,我使用CLI來模擬一個帳戶:


gcloud config set auth/impersonate_service_account <service account>

然后,稍后在嘗試使用應用程序默認憑據命令時,它會使用服務帳戶憑據包裝您的憑據。


gcloud auth application-default login

您最終得到的是一個如下所示的文件:


{

  "delegates": [],

  "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[email protected]:generateAccessToken",

  "source_credentials": {

    "client_id": "123abc.apps.googleusercontent.com",

    "client_secret": "XXXXXXXXX",

    "refresh_token": "XXXXXXXXX",

    "type": "authorized_user"

  },

  "type": "impersonated_service_account"

}

這似乎會導致第三方服務(如terraform)出現很多問題。


奇怪的是,Terraform只是使用Google SDK對Google進行API調用,因此它確實與Google有關。


您需要刪除模擬:


gcloud config unset auth/impersonate_service_account

然后再次運行應用程序默認憑據命令:


gcloud auth application-default login

現在,如果您檢查文件,它應該如下所示:


{

  "client_id": "XXXXXXXXX",

  "client_secret": "XXXXXXXXX",

  "quota_project_id": "example-project",

  "refresh_token": "XXXXXXXXXX",

  "type": "authorized_user"

}

當我嘗試模擬帳戶時,我遇到了同樣的問題,因此我可以將Terraform命令作為服務帳戶而不是我的個人帳戶運行,但它不喜歡這樣。


編輯:重讀你的問題,聽起來你和我在同一條船上。我們希望使用服務帳戶,而無需實際下載密鑰。谷歌甚至提到這是最佳實踐。但這樣做會導致他們自己的SDK出現問題。


查看完整回答
反對 回復 2022-09-05
  • 2 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號