我有一个经常旋转的GCloud凭证和一个使用它们的bash脚本。我希望在bast脚本中检测到,如果在运行过程中更改了凭据并覆盖它们。
我的逻辑是:
获取SA json并使用导出GOOGLE_APPLICATION_CREDENTIALS="${current_sa_path}"
修改current_sa_path。
所以我有这样的东西:
function check_for_new_sa() {
new_sa_path=<get-path-to-the-new-sa-json>
diff "${current_sa_path}" "${new_sa_path}"
if [ $? -ne "0" ]; then
cat ${new_sa_path} > "${current_sa_path}"
unset GOOGLE_APPLICATION_CREDENTIALS
export GOOGLE_APPLICATION_CREDENTIALS="${current_sa_path}"
fi
rm -rf ${new_sa_path}
}不幸的是,我看到gcloud没有注意到这一变化,并且仍然试图通过旧的服务帐户进行连接。也许一旦它被导出,它就会被缓存在某处或idk中。你有什么想法吗?我怎么能重新设置它?
您还可以通过将GOOGLE_APPLICATION_CREDENTIALS导出到一个文件来轻松地再现它。修改该文件之后,当您尝试某些命令时,gcloud将使用旧的文件凭据。
发布于 2022-02-04 19:03:07
当您编写"gcloud“时,我假设您指的是某个客户端应用程序;gcloud本身并不使用GOOGLE_APPLICATION_CREDENTIALS变量。
因为在运行应用程序之前需要使用export GOOGLE_APPLICATION_CREDENTIALS,所以应用程序将在内存中保存凭据。如果凭据更改,则有>2个解决方案:
GOOGLE_APPLICATION_CREDENTIALS变量值GOOGLE_APPLICATION_CREDENTIALS引用的文件中的更改,并在文件更改时重新启动.我认为选项1更好,因为在GCP上运行时,应用程序凭据将从元数据服务而不是文件中获得。
https://stackoverflow.com/questions/70984739
复制相似问题