对开发者进行身份验证

除了创建、更新和删除服务等管理操作以外,开发者通常还需要在发布服务之前进行不公开测试。此选项适用于 Cloud Run 服务,而不适用于 Cloud Run 作业。

开始前须知

请确保您授予访问要向其进行身份验证的服务的权限。您必须将 Cloud Run Invoker 角色授予开发者或开发者组:

控制台界面

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 选择服务,但不点击它。

  3. 点击右侧面板中的权限标签页。(您可能需要先点击右上角的显示信息面板。)

  4. 点击添加主账号

  5. 新的主账号字段中,输入开发者账号电子邮件。

  6. 选择角色下拉菜单中选择 Cloud Run Invoker 角色。

  7. 点击保存

gcloud

使用 gcloud run services add-iam-policy-binding 命令:

gcloud run services add-iam-policy-binding SERVICE \
  --member='USER:EMAIL' \
  --role='roles/run.invoker'

其中

  • SERVICE 是服务的名称。
  • USER 的值是 usergroup,具体取决于您是向单个开发者授权还是向群组授权。
  • EMAIL 是电子邮件账号。

    例如:

    gcloud run services add-iam-policy-binding myservice \
    --member='user:test-user@gmail.com' \
    --role='roles/run.invoker'

测试专用服务

您可以使用 Cloud Run 代理或 curl 来测试专用服务。

在 Google Cloud CLI 中使用 Cloud Run 代理

测试专用服务的最简单方法是使用 Google Cloud CLI 中的 Cloud Run 代理。这会将专用服务代理到 http://localhost:8080(或使用 --port 指定的端口),并向服务提供活跃账号的令牌或您指定的其他令牌。这使您可以使用网络浏览器或 curl 等工具。这是在浏览器中对网站或 API 进行非公开测试的推荐方法。

您可以在 Linux、macOS、WSL(首选)cygwin 环境中使用以下命令行,在本地代理服务:

gcloud run services proxy SERVICE --project PROJECT-ID

使用 curl

或者,您可以使用 curl 等工具并在 Authorization 标头中传递身份验证令牌,从而在不使用代理的情况下测试专用服务:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

为了让 curl 命令正常运行,您必须为具有 run.routes.invoke 权限的用户(例如 Cloud Run Admin 或 Cloud Run Invoker)传递一个有效的 ID 令牌。如需查看角色及其关联权限的完整列表,请参阅 Cloud Run IAM 角色

如需获取已登录 gcloud CLI 的身份的有效 ID 令牌,请使用 gcloud auth print-identity-token 命令。只要您的账号拥有该服务的 run.routes.invoke 权限,您就可以使用 gcloud CLI 创建的令牌在任何项目中调用 HTTP 请求。

如果要进行开发,请使用 gcloud CLI 生成的 ID 令牌。但请注意,此类令牌缺少目标对象声明,因此易遭受中继攻击。在生产环境中,请使用为服务账号颁发并指定了适当目标对象的 ID 令牌。这种方法通过将令牌的使用范围限制为预期服务来提高安全性。对于非 Google 账号,请使用员工身份联合来调用 Cloud Run 服务,因此您无需下载服务账号密钥。

我们建议您分配开发和使用服务所需的一组最小权限。请务必将您服务的 IAM 政策限制在最少数量的用户和服务账号。