允许外部调用 Cloud Run

Allowing External Invocation of Cloud Run

提问人:swygerts 提问时间:6/5/2023 更新时间:6/10/2023 访问量:199

问:

我正在尝试在 GCP 中创建一个 API 以作为 webhook 的目标。具体而言,事件 Webhook 位于 Twilio Sendgrid 上。我需要对请求进行身份验证(不想要未经身份验证的请求),但我不确定正确的方法。

根据文档,如果我提供客户端 ID 和密钥,Sendgrid 会从 GCP 的身份验证服务器生成访问令牌(我猜这是 https://www.googleapis.com/oauth2/v4/token)。但是,Cloud Run 需要身份令牌。我是否正确理解了这一点,如果是这样,有没有办法解决这个问题?

身份验证 google-cloud-platform sendgrid google-cloud-run

评论

0赞 guillaume blaquiere 6/5/2023
您共享的流程用于 sendgrid OAuth2 访问令牌,而不是用于 Google Cloud 访问令牌,不是吗?
0赞 swygerts 6/5/2023
@guillaumeblaquiere是的,这就是我想要展示的。
0赞 swygerts 6/9/2023
@guillaumeblaquiere我遇到的问题是,Sendgrid 似乎只发送 OAuth2 访问令牌,而 API Gateway 需要身份令牌。我无法找到一种方法来配置我的网关以接受访问令牌。如果我尝试,它会给出类似 { “message”: “Jwt 不是 Header.Payload.Signature 的形式,有两个点和 3 个部分”, “code”: 401 } 您知道将网关配置为接受这些非 Jwt 的访问令牌的方法吗?
0赞 swygerts 6/9/2023
@guillaumeblaquiere我想作为替代方案,它们为我提供了一把钥匙。我想知道 OpenId 配置中是否有某种方法可以要求该密钥存在于标头中。你知道什么吗?

答:

-1赞 guillaume blaquiere 6/10/2023 #1

您无法从 Twilio 生成 Google Cloud OAuth 令牌(访问令牌或身份令牌)。您的 Webhook 必须在互联网上公开提供。

为了保护连接,您可以根据需要创建自己的 API 密钥,方法是像这样设置 Webhook URL

https://XXXX.run.app?key=<API KEY>

并检查 Cloud Run 中的 API KEY 查询参数。如果不匹配,则放弃请求。


另一种解决方案是使用 API Gateway,它是 ESPv2 的托管版本。我之所以提到这一点,是因为我写了一篇关于 ESPv2 的文章,但只要稍作改动,你就可以在 API Gateway 上做同样的事情。

评论

0赞 swygerts 6/13/2023
使用 Google 客户端凭据,Twilio 发送请求以获取 Google 访问令牌。我在这里的问题是 API Gateway 似乎需要和身份令牌。
0赞 guillaume blaquiere 6/13/2023
Twilio 不能这样做。Twilio 生成 Twilio 访问令牌。
0赞 swygerts 6/14/2023
如果我提供 GCP 客户端凭据和 GCP Oauth 令牌 URL,他们是否不会获得 GCP 令牌?
0赞 guillaume blaquiere 6/14/2023
Twilio 无法验证您的 Google 凭据,只有 Google 可以!
0赞 swygerts 6/14/2023
正确。他们是否不使用凭据获取访问令牌,然后将访问令牌发送到我的 GCP API 网关,API 网关会尝试对其进行验证?