在Docker图像上验证Google云服务帐户

ldfqzlk8  于 2023-01-25  发布在  Docker
关注(0)|答案(3)|浏览(123)

我发现在docker图片的内部和外部验证google服务账户时有不同的行为。
在外面。成功。

C:\Users\Ben\AppData\Local\Google\Cloud SDK>gcloud auth activate-service-account 773889352370-compute@developer.gserviceaccount.com --key-file C:/Users/Ben/Dropbox/Google/MeerkatReader-d77c0d6aa04f.json --project api-project-773889352370
Activated service account credentials for: [773889352370-compute@developer.gserviceaccount.com]

运行docker container,将.json密钥传递到tmp目录。

C:\Users\Ben\AppData\Local\Google\Cloud SDK>docker run -it -v C:/Users/Ben/Dropbox/Google/MeerkatReader-d77c0d6aa04f.json:/tmp/MeerkatReader-d77c0d6aa04f.json  --rm -p "127.0.0.1:8080:8080" --entrypoint=/bin/bash  gcr.io/cloud-datalab/datalab:local-20161227

在Docker中,确认文件是否存在

root@4a4a9314f15c:/tmp# ls
MeerkatReader-d77c0d6aa04f.json  npm-24-b7aa1bcf  npm-45-fd13ef7c  npm-7-22ec336e

运行与之前相同的命令。失败。

root@4a4a9314f15c:/tmp# gcloud auth activate-service-account 773889352370-compute@developer.gserviceaccoun
t.com --key-file MeerkatReader-d77c0d6aa04f.json --project api-project-773889352370
ERROR: (gcloud.auth.activate-service-account) Failed to activate the given service account. Please ensure provided key file is valid.

什么可能导致这个错误?更广泛地说,什么是suggested strategy传递凭证。我尝试过这个,它也失败了。我使用的是cloudml API和cloud vision,我希望避免在每次运行开始时手动gcloud init。
编辑:显示gcloud信息

root@7ff49b26484f:/# gcloud info --run-diagnostics
Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic (1/1 checks) passed.

确认相同行为

root@7ff49b26484f:/tmp# gcloud auth activate-service-account 773889352370-compute@developer.gserviceaccount.com --key-file MeerkatReader-d77c0d6aa04f.json --project api-project-773889352370
ERROR: (gcloud.auth.activate-service-account) Failed to activate the given service account. Please ensure provided key file is valid.
of1yzvn4

of1yzvn41#

这可能是由于Docker VM的时钟偏差。我调试了Google SDK的activate-service-account函数,得到了以下错误消息:

There was a problem refreshing your current auth tokens: invalid_grant:  
Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
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.

重新启动VM后,它的工作就像一个魅力。

ttisahbt

ttisahbt2#

您是否尝试过从一开始就将凭据放入映像中?结果是否类似?
另一方面,您尝试过使用--key-file /tmp/MeerkatReader-d77c0d6aa04f.json吗?因为您似乎将json文件放在/tmp中。
您还可以考虑检查容器内部的网络配置,并从外部使用Docker进行检查。

ccrfmcuu

ccrfmcuu3#

在我的示例中,我使用了工作负载身份提供程序,并且犯了一个小错误,我使用池的全名设置了工作负载提供程序
应该是什么样的:/projects/${project-number}/locations/global/workloadIdentityPools/my-pool/providers/${id-provider}
我还添加了以下命令:

gcloud config set account ${{GCP_SERVICE_ACCOUNT}}

在我的 Docker 推之前,因为这是必须的。
此外,根据https://github.com/google-github-actions/auth#usage文档,我的服务帐户缺少所需的角色:

  • 角色/iam.服务帐户令牌创建者
  • 角色/iam.工作负载身份用户

编辑:您可能还需要为服务帐户授予对工作量标识池的访问权限,可以通过命令或界面执行此操作:

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="MEMBER_ID"

文件:www.example.comhttps://cloud.google.com/iam/docs/using-workload-identity-federation#gcloud

相关问题