返回

如何快速确定 Cloud Run 服务所在的 GCP 项目及运行服务的 IAM 用户?

java

如何确定 Cloud Run 服务所在的 GCP 项目

前言

在 Cloud Run 中管理多个服务时,准确识别每个服务所在的 GCP 项目至关重要,以实现跨项目资源的有效协作和身份验证。本指南将深入探讨使用多种方法来确定服务的项目归属,并提供如何查找服务运行的 IAM 用户的解决方案。

**子

gcloud 命令行工具

gcloud run services describe <SERVICE_NAME> --format json | jq -r '.metadata.projectId'

此命令使用 gcloud 工具提取服务的 JSON 表示并查询 projectId 字段,显示服务所在的项目。

Google Cloud SDK 库

// ... 代码省略
System.out.println(String.format("Project: %s", service.getMetadata().getProjectId()));
// ... 代码省略

利用 Google Cloud SDK 库,您可以直接访问服务的元数据,并从 projectId 字段中检索项目 ID。

kubectl 命令

kubectl get service <SERVICE_NAME> -n <NAMESPACE> -o jsonpath='{.metadata.labels.cloud\.google\.com/project-id}'

对于在 Kubernetes 集群中部署的服务,可以使用 kubectl 命令查询服务标签,以查找与 cloud.google.com/project-id 关联的项目 ID。

**子

为了与同一项目中的 DB 进行身份验证或授权,确定服务运行的 IAM 用户至关重要。

gcloud 命令行工具

gcloud run services describe <SERVICE_NAME> --format json | jq -r '.status.conditions[] | select(.type=="AuthorizedDomain") | .message' | cut -d':' -f2 | cut -d'/' -f2

此命令提取服务的条件并过滤出 AuthorizedDomain 类型,以查找与服务的 IAM 用户关联的域。

Google Cloud SDK 库

// ... 代码省略
System.out.println(
    String.format(
        "IAM User: %s", service.getStatusList().stream()
            .filter(s -> s.getType().equals("AuthorizedDomain"))
            .findFirst()
            .map(s -> s.getMessage().split(":")[1])
            .orElse("Unknown")));
// ... 代码省略

类似地,Google Cloud SDK 库允许您解析服务的条件,并从 AuthorizedDomain 条件的 message 字段中提取 IAM 用户信息。

kubectl 命令

kubectl get service <SERVICE_NAME> -n <NAMESPACE> -o jsonpath='{.metadata.annotations.iam\.gke\.io/service-account}'

在 Kubernetes 集群中,您可以查看服务的注解,以查找与 iam.gke.io/service-account 关联的 IAM 用户的电子邮件地址。

结论

通过遵循本指南中概述的方法,您可以轻松确定 Cloud Run 服务所在的 GCP 项目和运行服务的 IAM 用户。这些见解对于跨项目协作、身份验证和管理至关重要,确保您在管理多服务环境时的效率和安全性。

常见问题解答

  • 如何确定服务所在区域?
    • 使用 gcloud run services describe <SERVICE_NAME> --format json | jq -r '.metadata.location' 或 Google Cloud SDK 库来获取服务的 location 字段。
  • 我可以为服务配置特定的 IAM 用户吗?
    • 是的,您可以通过在服务规范中指定 iam 字段来配置 IAM 用户。
  • 服务可以访问同一项目中的所有资源吗?
    • 否,服务只能访问与项目中已授予服务的权限相同的资源。
  • 确定服务所属项目有什么好处?
    • 跨项目协作、身份验证、资源访问控制和服务管理。
  • 这些方法是否适用于所有版本的 Cloud Run?
    • 是的,这些方法适用于 Cloud Run 的所有版本,包括 Cloud Run (Fully Managed)、Cloud Run for Anthos 和 Cloud Run for GKE。