You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSV项目ID作为变量批量执行gcloud日志查询命令

批量查询GCP项目创建者并导出CSV

前提说明

你提到的单项目查询命令依赖GCP审计日志(默认保留400天),超过400天的项目无法通过该方式获取创建者,以下方案会将这类情况标记为N/A。

方案1:Shell脚本(适合熟悉命令行的用户)

假设你的输入CSV文件名为projects.csv,格式为第一行表头PROJECT_ID,PROJECT_NAME,后续每行对应项目ID和名称。

步骤:

  1. 创建并保存以下脚本为get_project_creators.sh:
#!/bin/bash

# 初始化输出CSV,写入表头
echo "PROJECT_ID,PROJECT_NAME,CREATOR_EMAIL" > project_creators.csv

# 跳过输入CSV的表头行,循环处理每个项目
tail -n +2 projects.csv | while IFS=, read -r project_id project_name
do
    # 执行审计日志查询,捕获创建者邮箱,错误输出重定向到/dev/null
    creator=$(gcloud logging read "resource.type=gce_project AND protoPayload.methodName=CreateProject" \
        --project="$project_id" \
        --format="value(protoPayload.authentication.principalEmail)" 2>/dev/null)
    
    # 处理空结果或查询失败的情况
    if [ -z "$creator" ]; then
        creator="N/A"
    fi

    # 写入结果到输出CSV(用引号包裹字段,避免特殊字符干扰)
    echo "\"$project_id\",\"$project_name\",\"$creator\"" >> project_creators.csv
    
    # 打印进度,方便跟踪处理状态
    echo "已处理项目: $project_id"
done
  1. 给脚本添加执行权限:
chmod +x get_project_creators.sh
  1. 在命令行执行脚本:
./get_project_creators.sh

方案2:Python脚本(适合处理含特殊字符的CSV)

如果你的项目名称包含逗号、引号等特殊字符,Python的csv模块能更可靠地处理这类情况。

步骤:

  1. 创建并保存以下脚本为get_project_creators.py:
import csv
import subprocess

# 定义输入输出文件路径
INPUT_CSV = "projects.csv"
OUTPUT_CSV = "project_creators.csv"

# 读取输入CSV,写入结果到输出CSV
with open(INPUT_CSV, mode='r', newline='', encoding='utf-8') as infile, \
     open(OUTPUT_CSV, mode='w', newline='', encoding='utf-8') as outfile:
    
    # 用字典读取输入CSV,自动匹配表头
    csv_reader = csv.DictReader(infile)
    # 定义输出CSV的表头
    csv_writer = csv.DictWriter(outfile, fieldnames=['PROJECT_ID', 'PROJECT_NAME', 'CREATOR_EMAIL'])
    
    csv_writer.writeheader()
    
    for row in csv_reader:
        project_id = row['PROJECT_ID']
        project_name = row['PROJECT_NAME']
        
        # 构建gcloud查询命令
        gcloud_cmd = [
            'gcloud', 'logging', 'read',
            'resource.type=gce_project AND protoPayload.methodName=CreateProject',
            '--project', project_id,
            '--format', 'value(protoPayload.authentication.principalEmail)'
        ]
        
        try:
            # 执行命令,捕获标准输出
            result = subprocess.run(gcloud_cmd, capture_output=True, text=True, check=True)
            creator_email = result.stdout.strip() if result.stdout.strip() else "N/A"
        except subprocess.CalledProcessError:
            # 处理命令执行失败的情况(如无权限、项目不存在)
            creator_email = "N/A"
        
        # 写入当前项目的结果
        csv_writer.writerow({
            'PROJECT_ID': project_id,
            'PROJECT_NAME': project_name,
            'CREATOR_EMAIL': creator_email
        })
        
        print(f"已处理项目: {project_id}")
  1. 在命令行执行脚本:
python3 get_project_creators.py

注意事项

  • 确保已通过gcloud auth login完成身份验证,且账号拥有logging.logEntries.list权限以及所有项目的查看权限。
  • 输出结果会保存在project_creators.csv文件中,包含项目ID、名称和创建者邮箱(无结果则为N/A)。
  • 若输入CSV的表头不是PROJECT_ID和PROJECT_NAME,需修改脚本中对应的字段名。

内容的提问来源于stack exchange,提问作者Scott E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:55:15