首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google Cloud Run Authentication Service to-Service

Google Cloud Run Authentication Service to-Service
EN

Stack Overflow用户
提问于 2019-11-04 02:31:56
回答 1查看 2.8K关注 0票数 9

我在GCP Cloud Run上部署了两个服务(API)。叫它们service-one.myDomain.comservice-two.myDomain.com。我希望服务-一个在调用服务时进行身份验证-两个独立于任何用户正在做的事情。

我已经阅读并实现了GCP Cloud Run文档中关于验证服务到服务(https://cloud.google.com/run/docs/authenticating/service-to-service)的说明,但是service-one.myDomain.com在调用service-two.myDomain.com时没有成功地收到401:Unauthorized响应。

关于如何让service-one成功调用service-two有什么想法吗?

下面是我的设置:

IAM和服务帐户:

在google IAM上,我创建了两个服务帐户,并授予它们"Cloud Run Invoker“(roles/run.invoker)角色:service-one@myproject.iam.gserviceaccount.com service-two@myproject.iam.gserviceaccount.com

在Cloud Run中,我将服务帐户从“默认计算服务帐户”更改为我创建的服务帐户。我为service-one.myDomain.com分配了service-one@myproject.iam.gserviceaccount.com,为service-two.myDomain.com分配了service-two@myproject.iam.gserviceaccount.com

OIDC身份验证令牌:

service-one.myDomain.com中,我调用元数据服务器,从以下url获取令牌(jwt):http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://service-two.myDomain.com,请求头设置为{'Metadata-Flavor': 'Google'},请求成功,我收到的令牌被解码为具有以下有效负载:

代码语言:javascript
运行
复制
{
  "alg": "RS256",
  "kid": "9cef5340642b157fa8a4f0d874fe7543872d82db",
  "typ": "JWT"
}

{
  "aud": "https://service-two.mydomain.com",
  "azp": "100959068407876085761",
  "email": "service-one@myproject.iam.gserviceaccount.com",
  "email_verified": true,
  "exp": 1572806540,
  "iat": 1572802940,
  "iss": "https://accounts.google.com",
  "sub": "100953168404568085761"
}

Http请求:

使用令牌,我从service-one.myDomain.comservice-two.myDomain.com上的http端点发出请求。我用{'Authorization': 'Bearer {token}'}设置了请求头({token}是token的值)。

Http响应:

响应是401未授权的,我的日志显示了响应标头,其中包括:

{'WWW-Authenticate': 'Bearer error="invalid_token" error_description="The access token could not be verified"'}

其内容为:

代码语言:javascript
运行
复制
"
<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>401 Unauthorized</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Unauthorized</h1>
<h2>Your client does not have permission to the requested URL <code>/health</code>.</h2>
<h2></h2>
</body></html>
" 

我被难住了.对于如何让service-oneservice-two进行身份验证有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-05 04:22:37

答案是使用gcp cloud run生成的Url作为OIDC令牌请求中的受众。以及相关的jwt中的"aud“字段。

我的发现是云运行中的服务到服务身份验证不支持自定义域(myDomain.com)。我使用的是我的自定义域名。

(我觉得自己像个笨蛋)谢谢@guillaumeblaquiere

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58683365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档