gcloud与ADC凭证是否可互换?能否双向转换凭证文件?
GCP认证文件
application_default_credentials.json与credentials.db的双向转换 先明确两个文件的定位:
credentials.db是gcloud CLI的本地SQLite数据库,存储了多个用户/服务账号的认证凭证,供gcloud命令行工具使用。application_default_credentials.json(简称ADC文件)是应用默认凭证的单文件存储,通常对应单个账号,供Terraform、GCP SDK等非CLI工具使用。
一、从credentials.db生成application_default_credentials.json
有两种常用方法:
方法1:通过gcloud命令直接生成
如果已经用gcloud auth login登录了目标账号,可直接让gcloud生成对应ADC文件:
- 确认并切换到目标账号:
gcloud auth list gcloud config set account your-account@example.com - 生成ADC文件(会覆盖当前默认路径下的ADC文件):
默认生成路径:gcloud auth application-default login- Linux/macOS:
~/.config/gcloud/application_default_credentials.json - Windows:
%APPDATA%\gcloud\application_default_credentials.json
- Linux/macOS:
方法2:直接从SQLite数据库提取
如果不想重新触发登录流程,可直接从credentials.db中提取凭证并保存为ADC文件:
- 查询目标账号的凭证内容:
sqlite3 ~/.config/gcloud/credentials.db "SELECT value FROM credentials WHERE account_id='your-account@example.com';" - 将查询输出的JSON内容写入ADC文件:
sqlite3 ~/.config/gcloud/credentials.db "SELECT value FROM credentials WHERE account_id='your-account@example.com';" > ~/.config/gcloud/application_default_credentials.json
二、从application_default_credentials.json导入到credentials.db
根据ADC文件对应的账号类型(用户账号/服务账号),选择不同的导入方式:
情况1:ADC文件是用户OAuth2凭证
直接用gcloud登录命令导入:
gcloud auth login --cred-file=path/to/application_default_credentials.json
执行后,该凭证会被添加到credentials.db中,可通过gcloud auth list查看。
情况2:ADC文件是服务账号密钥
如果ADC文件是服务账号的JSON密钥,用激活服务账号的命令导入:
gcloud auth activate-service-account --key-file=path/to/application_default_credentials.json
注意事项
- 凭证有效期:用户类型的凭证有短期有效期,gcloud和ADC工具都会自动刷新,但手动导出的凭证如果未配置刷新机制,可能会过期失效。
- 多账号管理:
credentials.db支持多账号存储,而ADC文件默认只对应单个账号,切换ADC账号需要重新生成或替换文件。 - 权限一致性:导入/导出的凭证权限取决于原账号的权限,确保操作时使用的账号有足够的权限完成对应任务。
内容的提问来源于stack exchange,提问作者x-yuri
相关产品推荐
相关产品推荐

