相关疑难解决方法(0)

使用用户帐户凭据访问私有 Cloud Run/Cloud Functions

这是我的用例。

  • 我已经以私有模式部署了 Cloud Run 服务。(与云功能相同的问题)
  • 我正在开发一项使用此 Cloud Run 的新服务。我使用应用程序中的默认凭据进行身份验证。它适用于 Compute Engine 和 Cloud Run,因为默认凭据是从元数据服务器获取的。

但是,在我的本地环境中,我需要使用服务帐户密钥文件来实现此目的。(例如,当我设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量时)

但是,我无法使用我的用户帐户凭据。

Java、Node 或 Go 中的日志跟踪非常清晰:不可能在用户凭证类型上生成身份令牌。

所以,

  • 为什么谷歌身份验证库不允许这样做?
  • 为什么 Google 前端仅接受 Google 签名的身份令牌?
  • 是否存在继续使用用户帐户的解决方法?

还有一段上下文:我们希望避免使用服务帐户密钥文件。今天,这是我们的重大安全漏洞(文件被复制、通过电子邮件发送、甚至公开提交到 Github 上......)。用户帐户默认凭据适用于所有 Google Cloud API,但不适用于 IAP 和 CLoud Run/Functions。

编辑

这是一些错误的例子。

爪哇

我这样做

        Credentials credentials = GoogleCredentials.getApplicationDefault().createScoped("https://www.googleapis.com/auth/cloud-platform");

        IdTokenCredentials idTokenCredentials = IdTokenCredentials.newBuilder()
                .setIdTokenProvider((IdTokenProvider) credentials)
                .setTargetAudience(myUri).build();

        HttpRequestFactory factory = new NetHttpTransport().createRequestFactory(new HttpCredentialsAdapter(idTokenCredentials));
Run Code Online (Sandbox Code Playgroud)

我的用户凭证不符合IdTokenProvider接口


Caused by: java.lang.ClassCastException: class com.google.auth.oauth2.UserCredentials cannot be cast to class com.google.auth.oauth2.IdTokenProvider (com.google.auth.oauth2.UserCredentials and com.google.auth.oauth2.IdTokenProvider …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-functions google-iam google-cloud-run

12
推荐指数
1
解决办法
5306
查看次数

无法通过 IAP 授权访问 App Engine

我目前已启动并运行 App Engine,并受 IAP 保护,我的最终目标是通过 Apps 脚本项目触发它。我已经在没有 IAP 的情况下测试了代码,它工作得很好。但是,当启用 IAP 时,我在成功授权访问它时遇到了困难。

我已将自己作为受 IAP 保护的 Web 应用程序用户(以及策略管理员)添加到 App Engine,但每当我尝试从 GSheets 应用程序脚本(我是所有者并且它与正确的 GCP 项目关联)触发它时(使用这个很好的解释作为指导)我得到以下信息:

“IAP 凭据无效:JWT 受众群体与此应用程序不匹配('aud' 声明 (1084708005908-bk66leo0dnkrjsh276f0rgeoq8ns87qu.apps.googleusercontent.com) 与预期值 (1084708005908-oqkn6pcj03c2pmdufkh0l7mh37f79po2.apps) 不匹配.googleusercontent.com))"

我尝试向我的帐户添加/删除各种权限,以及创建新的 Apps 脚本并重新添加到项目,但无济于事。从 CLI 触发时我遇到了同样的问题,所以我相当确定这是身份验证问题,但是这是我的 Apps 脚本代码,以防它有帮助:

function test() {
  const options = {
    headers: {'Authorization': 'Bearer ' + ScriptApp.getIdentityToken()},
    muteHttpExceptions: true
  }
  var result = UrlFetchApp.fetch('https://APP-ENGINE-URL.appspot.com', options);
  Logger.log(result);
}
Run Code Online (Sandbox Code Playgroud)

和清单文件:

{
  "timeZone": "Europe/London",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": ["openid", "https://www.googleapis.com/auth/script.external_request"]
}
Run Code Online (Sandbox Code Playgroud)

对此的任何帮助都非常感谢!以前从未在这里发布过,但非常绝望,找不到任何人有这个确切的问题。

google-app-engine oauth google-apps-script google-cloud-functions identity-aware-proxy

5
推荐指数
1
解决办法
891
查看次数