【问题标题】:How to get the project Name and project Number through audit logs or through API's in google bigquery如何通过审计日志或通过 google bigquery 中的 API 获取项目名称和项目编号
【发布时间】:2022-01-09 14:13:16
【问题描述】:

我正在尝试在bigquery 中检索项目详细信息,例如projectNameprojectNumber,但在任何地方我只能看到projectId,但看不到其他详细信息。当我运行查询并查看所有类型的审计日志时,我已经在我的项目中探索了audit logs,无论我可以在任何地方找到这些详细信息,但我只能看到projectId。我还探索了 API,比如是否有任何 API 服务于我的目的,我找到了一个 API,它提供了项目列表,但他们也没有提供 projectNameprojectNumber 详细信息。那么有没有其他方法可以获取这些详细信息,请告诉我。

编辑:寻找 JAVA API 客户端

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您可以从 bigquery 资源中使用其客户端库(使用 API)来获取该信息。

    2021 年 7 月 12 日更新:JAVA API

    不幸的是,这是从 JAVA API BIGQUERY 客户端中取出的,没有消息是否会返回。因此,您将无法从 BigQuery 最新客户端获取此类信息。你可以看到一个关于它的讨论here

    无论如何,您都可以使用resource manager 获取该信息。 (尽管您需要从上面的层次结构或至少项目名称中获得信息)

    使用的库

    import com.google.cloud.resourcemanager.v3.Project;
    import com.google.cloud.resourcemanager.v3.ProjectName;
    import com.google.cloud.resourcemanager.v3.ProjectsClient;
    

    代码

    try (ProjectsClient projectsClient = ProjectsClient.create()) { 
         ProjectName name = ProjectName.of("[PROJECT]");
         Project prjct = projectsClient.getProject(name); 
         System.out.println(prjct.getProjectId());
         System.out.println(prjct.getName()); # returns `projects/415104041262`
    }
    

    要设置DOM 和依赖项,您可以查看resource manager 的官方文档。另外,这里是可以查看用于获取项目的客户端的链接,project client

    解决方法:

    或者,您可以使用其他库和 cmds 来获取该信息,它利用 bigquery python 客户端库来获取您正在寻找的信息:

    from google.cloud import bigquery 
    from google.oauth2 import service_account
    
    # key_path = "path/to/service_account.json"
    key_path = "my-service-account-key.json"
    
    credentials = service_account.Credentials.from_service_account_file(
        key_path, scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    
    client = bigquery.Client(credentials=credentials, project=credentials.project_id,)
    
    print(client.get_service_account_email())
    
    projects = client.list_projects(max_results=10)
    
    for project in list(projects):
        print(project.project_id)
        print(project.numeric_id)
    

    注意:按照link 获取有关如何获取服务帐户 json 的指导。

    输出

    bq-service-account-project-number@bigquery-account.iam.gserviceaccount.com
    project id: my-project-id
    project number: 7788990000xxx
    

    bigquery 资源之外的另一个选项,用于获取有关项目的信息。您可以打开google cloud shell 并执行以下命令来获取该信息:

    gcloud projects describe <my-project-id>
    
    

    输出:

    createTime: '2015-10-20T10:12:09.452Z'
    lifecycleState: ACTIVE
    name: my-project-id
    parent:
      id: '111222333xxx'
      type: folder
    projectId: my-project-id
    projectNumber: '777555000xxx'
    

    另外,我将这些链接留在您可以获取项目相关信息的地方:

    最后,如果您正在寻找为什么难以从 bigquery 中获取有关项目的信息,我将提供此链接来讨论 resource-hierarchy

    【讨论】:

    • 嗨 Betjens,感谢您的详细回复,但我特别关注 JAVA API,我已经搜索并找到了一个 repo。 github.com/googleapis/java-resourcemanager 通过它我能够获得项目详细信息,但这些方法已被弃用。这是唯一的问题,试图找出替代方案
    • 你好 saivasanth,我已经更新了我的回复。
    • 确实,正如您所提到的,java-resourcemanager 是目前唯一的方法。您将无法从 bigquery 客户端获取该信息。
    • 另外,java-resourcemanager 还活着,目前在 v3 上。
    • 感谢您的努力,我已经发布了适合我用例的答案,请仔细阅读
    【解决方案2】:

    我已经以这种方式实现了它,这里的方法已被弃用,寻找替代方案,比如将这个工件移动到我们自己的工件,就像目前脱离上下文一样,但我得到了我想要的信息通过java客户端。

         <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-resourcemanager</artifactId>
            <version>1.1.4</version>
        </dependency>
    

    这是我在 pom.xml 文件中添加的依赖项

    import com.google.cloud.resourcemanager.ResourceManager;
    import com.google.cloud.resourcemanager.ResourceManagerOptions;
    import com.google.cloud.resourcemanager.Project;
    String credentialsPath = "tmp/credentials.json";
    ResourceManager resourceManager = ResourceManagerOptions.newBuilder().setProjectId("my-project-id").
                setCredentials(GoogleCredentials.fromStream(new FileInputStream(credentialsPath))).build().getService();
      
    
     Project project = resourceManager.get(projectId);
    // You got the project object which contains the details you needed
        
    

    您需要两个权限才能获取项目的详细信息

    1. projects.get
    2. 为您的项目启用this API

    如果这些权限正确,您将获得详细信息,否则将从谷歌端返回空对象

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2012-05-07
      • 2023-03-08
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2012-12-25
      相关资源
      最近更新 更多