Gcloud Login With Service Account ^hot^ May 2026
# Optionally set as active account if $SET_ACTIVE; then gcloud config set account "$SA_EMAIL" log_info "✓ Set as active account" fi
log_info() echo -e "$GREEN[INFO]$NC $1"; log_warn() echo -e "$YELLOW[WARN]$NC $1"; log_error() echo -e "$RED[ERROR]$NC $1"; KEY_FILE="" PROJECT_ID="" VERBOSE=false SET_ACTIVE=true Parse arguments while [[ $# -gt 0 ]]; do case $1 in --key-file|-k) KEY_FILE="$2" shift 2 ;; --project|-p) PROJECT_ID="$2" shift 2 ;; --verbose|-v) VERBOSE=true shift ;; --no-set-active) SET_ACTIVE=false shift ;; --help|-h) cat << EOF Usage: $0 [OPTIONS] gcloud login with service account
Examples: $0 --key-file ./sa-key.json $0 -k sa-key.json -p my-project $0 -k sa-key.json -v EOF exit 0 ;; *) log_error "Unknown option: $1" exit 1 ;; esac done if [[ -z "$KEY_FILE" ]]; then log_error "Key file is required. Use --key-file or -k" exit 1 fi # Optionally set as active account if $SET_ACTIVE;
Options: -k, --key-file PATH Service account JSON key file (required) -p, --project ID GCP project ID (optional) -v, --verbose Enable verbose output --no-set-active Don't set as active account -h, --help Show this help message jq empty "$KEY_FILE" 2>
log_info "Authenticating service account: $SA_EMAIL" GCLOUD_CMD="gcloud auth activate-service-account $SA_EMAIL --key-file=$KEY_FILE"
if [[ ! -f "$KEY_FILE" ]]; then log_error "Key file not found: $KEY_FILE" exit 1 fi if ! jq empty "$KEY_FILE" 2>/dev/null; then log_error "Invalid JSON in key file: $KEY_FILE" exit 1 fi Extract service account email SA_EMAIL=$(jq -r .client_email "$KEY_FILE") if [[ -z "$SA_EMAIL" || "$SA_EMAIL" == "null" ]]; then log_error "Invalid service account key: missing client_email" exit 1 fi






