除了创建、更新和删除服务等管理操作以外,开发者通常还需要在发布服务之前进行不公开测试。此选项适用于 Cloud Run 服务,而不适用于 Cloud Run 作业。
开始前须知
请确保您授予访问要向其进行身份验证的服务的权限。您必须将 Cloud Run Invoker 角色授予开发者或开发者组:
控制台界面
前往 Google Cloud 控制台:
选择服务,但不点击它。
点击右侧面板中的权限标签页。(您可能需要先点击右上角的显示信息面板。)
点击添加主账号。
在新的主账号字段中,输入开发者账号电子邮件。
从选择角色下拉菜单中选择
Cloud Run Invoker
角色。点击保存。
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 的值是
user
或group
,具体取决于您是向单个开发者授权还是向群组授权。 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 政策限制在最少数量的用户和服务账号。