gcloud iam service-accounts keys create 给出无效的 jwt 签名错误

gcloud iam service-accounts keys create gives invalid jwt signature error

我使用下面的 gcloud iam 命令创建的密钥与通过控制台创建 json 密钥之间有什么区别吗?每个结果都会生成一个 .json 文件,除了 private_key_id 和 private_key 值的明显差异外,它们是相同的。以下是我正在使用的 gcloud 命令:

gcloud iam service-accounts create my-sa-name
gcloud projects add-iam-policy-binding my-project-id --member="serviceAccount:my-sa-name@my-project-id.iam.gserviceaccount.com" --role="roles/owner"
gcloud iam service-accounts keys create key.json --iam-account=serviceAccount:my-sa-name@my-project-id.iam.gserviceaccount.com

但是,当我尝试利用通过命令行下拉的那个时,我得到:

google.auth.exceptions.RefreshError: ('invalid_grant: Invalid JWT Signature.', '{"error":"invalid_grant","error_description":"Invalid JWT Signature."}')

奇怪的是,如果我转到控制台,为同一个服务帐户创建一个密钥,然后将下载到我的计算机的文件代替来自 CLI 的文件,一切正常。

我如何使用您要求的密钥?我在本地使用函数框架 运行 并调试将访问云存储桶的云函数,因此我的代码使用 google.cloud.storage 客户端库 (python 3.8)。我 运行 本地进程,环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为 json 密钥文件的 location/filename。我知道这一切工作正常 b/c 控制台下载的密钥工作正常。

我也尝试过使用 gcloud auth service-account --key-file=key.json,这也给了我无效的 JWT 签名错误。

幸运的是我没有被阻止b/c我可以使用手动创建的密钥,但我真的很想在这里自动执行每个可能的步骤...

所以...有人可以解释一下吗?看到它,弄清楚并知道如何修复它?

gcloud iam service-accounts keys create key.json \
--iam-account=my-sa-name@my-project-id.iam.gserviceaccount.com

澄清这一点的一种方法是:

ACCOUNT="[[YOUR-ACCOUNT]]"
PROJECT="[[YOUR-PROJECT]]"
EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}

gcloud projects add-iam-policy-binding ${PROJECT} \
--member="serviceAccount:${EMAIL}" \
--role="roles/owner"

gcloud iam service-accounts keys create ${ACCOUNT}.json \
--iam-account=${EMAIL} \
--project=${PROJECT}