首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云计划程序使用错误的服务帐户进行身份验证

云计划程序使用错误的服务帐户进行身份验证
EN

Stack Overflow用户
提问于 2022-11-29 09:42:19
回答 1查看 34关注 0票数 1

我在云运行上部署了一个应用程序,我创建了一个云调度器作业,它调用这个应用程序的端点。

我创建了一个服务帐户,并将其用于云任务令牌。下面是云调度器任务配置的屏幕截图(我确保多次选择正确的服务帐户)。

我的应用程序上有一个中间件来防止对端点的未经授权的访问(简化版本):

代码语言:javascript
复制
import (
    "fmt"
    "github.com/gin-gonic/gin"
    "google.golang.org/api/oauth2/v2"
    "net/http"
    "strings"
)

func ForceCloudScheduler(c *gin.Context) {
    if c.Request.UserAgent() != "Google-Cloud-Scheduler" {
        c.AbortWithStatus(http.StatusForbidden)
        return
    }

    // https://stackoverflow.com/questions/53181297/verify-http-request-from-google-cloud-scheduler
    token := c.GetHeader("Authorization")
    if token == "" {
        c.AbortWithStatus(http.StatusForbidden)
        return
    }
    idToken := strings.Split(token, "Bearer ")[0]

    authenticator, err := oauth2.NewService(c)
    if err != nil {
        _ = c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("failed to acquire authenticator: %w", err))
        return
    }
    info, err := authenticator.Tokeninfo().IdToken(idToken).Do()
    if err != nil {
        _ = c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("failed to retrieve token information: %w", err))
        return
    }

    // This is the line where the job fails.
    if info.Email != "agora-job-scheduler-account@agoradesecrivains.iam.gserviceaccount.com" {
        c.AbortWithStatus(http.StatusForbidden)
        return
    }

    c.Next()
}

当我运行作业时,请求会失败,结果是403。我添加了一些日志来检查云调度程序发送的令牌的内容。下面是日志资源管理器的输出:

代码语言:javascript
复制
{
    "audience": "107655128939031897672"
    "email": "970356934135-compute@developer.gserviceaccount.com"
    "expires_in": 1644
    "issued_to": "107655128939031897672"
    "scope": "openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"
    "user_id": "107655128939031897672"
    "verified_email": true
}

由于某些原因(可能是bug?),令牌负载中的电子邮件与我在云调度程序中设置的邮件不匹配。这是意料之中的吗?我能解决吗?

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 09:28:07

文档说,

不要从项目中删除默认的Cloud服务帐户,也不要从其cloudscheduler.serviceAgent(roles/CloudScheder.serviceAgent)角色中删除该帐户。这样做会产生403个对需要身份验证的端点的响应,即使您的作业服务帐户具有适当的角色。

您可以参考这个云运行问题的故障排除文档,其中它说明了导致403错误的不同原因以及相应的解决步骤。

有关更多信息,您可以参考这些堆栈溢出Link1Link2,它们可能对您有帮助。

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

https://stackoverflow.com/questions/74611944

复制
相关文章

相似问题

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