如何使用gcloud CLI自动登录GCP并完成项目等资源自动化配置
GCP账号自动化配置落地实现方案
前置校验
执行脚本前先在EC2上运行gcloud version确认CLI安装正常,返回版本信息即可继续。
注意:GCP的project-id是全局唯一资源,命名建议遵循
业务标识-环境-用途-创建年月格式,避免和其他用户的项目重名;服务账号ID建议按实际用途命名,方便后续权限审计。
前置凭证配置
不要把GCP账号密码硬编码在脚本里,先在当前shell会话配置环境变量:
export GCP_USER="你的GCP登录邮箱(通常是gmail邮箱)" export GCP_PASS="你的GCP账号密码"
如果账号开启了二次验证(MFA),需要先在GCP账号安全中心生成应用专用密码,替换上面的GCP_PASS值,否则自动登录会被拦截
自动化执行脚本
把下面的内容保存为gcp_auto_setup.sh,先修改开头配置块的自定义参数,再执行即可:
#!/bin/bash set -euo pipefail # -------------------------- 自定义配置 请提前修改为实际值 -------------------------- PROJECT_ID="your-business-prod-data-202409" # 全局唯一的项目ID PROJECT_NAME="生产环境数据业务项目" # 控制台展示的项目名称 SA_ID="data-deploy-sa" # 服务账号ID SA_DISPLAY_NAME="生产数据部署服务账号" # 服务账号展示名 KEY_SAVE_PATH="./${SA_ID}-${PROJECT_ID}-key.json" # 密钥本地保存路径 # -------------------------------------------------------------------------------- # 1. 非交互模式登录GCP个人账号 gcloud auth login --no-launch-browser <<EOF $GCP_USER $GCP_PASS EOF echo "[完成] GCP个人账号登录成功" # 2. 创建新项目并设置为默认操作项目 gcloud projects create "$PROJECT_ID" --name="$PROJECT_NAME" gcloud config set project "$PROJECT_ID" echo "[完成] 项目 $PROJECT_ID 创建成功,已设为CLI默认项目" # 3. 创建服务账号 gcloud iam service-accounts create "$SA_ID" \ --display-name="$SA_DISPLAY_NAME" SA_FULL_EMAIL="${SA_ID}@${PROJECT_ID}.iam.gserviceaccount.com" echo "[完成] 服务账号 $SA_FULL_EMAIL 创建成功" # 4. 为服务账号绑定项目级Owner角色 gcloud projects add-iam-policy-binding "$PROJECT_ID" \ --member="serviceAccount:${SA_FULL_EMAIL}" \ --role="roles/owner" \ --quiet echo "[完成] 已为服务账号绑定项目Owner角色" # 5. 生成并下载服务账号JSON密钥 gcloud iam service-accounts keys create "$KEY_SAVE_PATH" \ --iam-account="$SA_FULL_EMAIL" echo "[完成] 服务账号JSON密钥已保存到 $KEY_SAVE_PATH,请妥善保管"
执行步骤
- 给脚本添加执行权限:
chmod +x gcp_auto_setup.sh - 替换脚本开头配置块的所有自定义参数,确保项目ID符合全局唯一要求
- 执行脚本:
./gcp_auto_setup.sh
注意事项
- Owner角色拥有项目所有资源的最高操作权限,生产环境建议遵循最小权限原则,按需分配对应角色,不建议直接授予Owner
- 个人账号密码自动登录仅适合临时初始化场景,后续自动化操作建议直接使用生成的服务账号密钥做认证,避免个人账号密码泄露、权限变更导致脚本失效
- 若创建项目时报权限错误,请确认使用的个人GCP账号拥有项目创建权限,且未超出账号的项目数量配额
- 脚本执行完成后生成的JSON密钥是服务账号的唯一凭证,泄露后会导致项目资源被未授权访问,请妥善存储
内容的提问来源于stack exchange,提问作者Nitin G
相关产品推荐
相关产品推荐

