Mus*_*ice 3 google-cloud-platform gcloud
我正在开发一个托管在 Google Cloud Platform 上的项目,我正在尝试适应他们的gcloudcli。我真正不明白的一件事是它的身份验证方案。
例如,如果我运行gcloud config configurations list,我会得到所有配置的列表:
PS C:\Users\username\dev\project-library> gcloud config configurations list
NAME IS_ACTIVE ACCOUNT PROJECT COMPUTE_DEFAULT_ZONE COMPUTE_DEFAULT_REGION
default True username@domain.com project-dev-gcp
project-dev-local False project-dev-gcp
Run Code Online (Sandbox Code Playgroud)
同样,如果我运行gcloud auth list,它会显示我通过身份验证的帐户:
PS C:\Users\username\dev\project-library> gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
* username@domain.com
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Run Code Online (Sandbox Code Playgroud)
但如果我尝试运行gcloud projects list,我不会得到我的 GCP 项目列表。相反,我看到一个错误,表明我未经身份验证:
PS C:\Users\username\dev\project-library> gcloud projects list
ERROR: (gcloud.projects.list) UNAUTHENTICATED: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Run Code Online (Sandbox Code Playgroud)
好的,如果我尝试使用 进行身份验证会怎样gcloud auth application-default login?
PS C:\Users\username\dev\project-library> gcloud auth application-default login
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxx
Credentials saved to file: [C:\Users\username\AppData\Roaming\gcloud\application_default_credentials.json]
These credentials will be used by any library that requests Application Default Credentials (ADC).
ERROR: (gcloud.auth.application-default.login) UNAUTHENTICATED: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Run Code Online (Sandbox Code Playgroud)
再次出现未经身份验证的错误,尽管我的浏览器打开了登录页面,我选择了我的 Google 帐户,然后在提示时授予了对 Google 身份验证库的访问权限。
奇怪的是我实际上有一个访问令牌:
PS C:\Users\username\dev\project-library> gcloud auth print-access-token
ya29.a0AfH6SMCGhGKSd39hJxfCBBNIDPGvpGjjskAKNDyH24C9TU0tG8P-FH_YL3OBJOZiqFXD4hKbVGCSNpfuwqOhB2p7uaBI_PtMuQO_Ip2fiMYHbHeLzyKKrnthFV4MqCNM_P80uQrTFy9LvvFm-kpcYFFFmh4Sam2Uoq3wsPW8m9febwFX2-4
Run Code Online (Sandbox Code Playgroud)
最终,我想做的是获取 kubernetes 配置,以便我可以使用 与集群交互kubectl,但当然gcloud container clusters get-credentials告诉我我没有经过身份验证:
PS C:\Users\username\dev\project-library> gcloud container clusters get-credentials project-dev --region us-east4 --project project-dev-gcp
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=401, message=Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Run Code Online (Sandbox Code Playgroud)
那么什么给出呢?为什么我似乎无法做任何事情gcloud?导致 UNAUTHENTICATED 错误的原因是什么?如何修复它?
我非常熟悉awscli 身份验证方案,但我很难理解它的gcloud工作方式。尽管 cli 不起作用,但我似乎拥有完整的控制台访问权限,而且我知道这些东西在某一时刻确实起作用,因为我过去使用过访问过 kubernetes 集群日志k9s。
找出问题所在了。[default]我的个人资料似乎C:\Users\username\AppData\Roaming\gcloud\configurations\config_default包含一些导致问题的错误配置值:
[core]
account = username@domain.com
project = project-dev-gcp
[compute]
[auth]
disable_credentials = true
[spanner]
instance = project-local
[api_endpoint_overrides]
spanner = http://localhost:9020/
Run Code Online (Sandbox Code Playgroud)
OP 中未经身份验证的问题是由 引起的,如果我尝试通过 CLI 与 Google Cloud Spanner 交互,disable_credentials = true该部分的内容也会导致类似的问题。[api_endpoint_overrides]
现在,这个配置文件在某些情况下确实有意义。我们保留另一个gcloud配置用于本地测试,在这种情况下,我们实际上确实希望在 Docker 容器中运行的模拟器上禁用身份验证并指向 Cloud Spanner 的调用。[default]显然,用于与真实 GCP 对话的配置文件中不应出现这种情况。
解决方案是从该文件中删除有问题的配置,使其看起来像:
[core]
account = username@domain.com
project = project-dev-gcp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |