【问题标题】:Access denied for service account when accessing IAP-protected application访问受 IAP 保护的应用程序时服务帐户的访问被拒绝
【发布时间】:2019-03-26 03:13:12
【问题描述】:

试图让 python 命令行访问(HTTP GET)受 IAP 保护的应用程序。

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/iap/make_iap_request.py

但出现 403 err 异常:服务帐号 xxx@xxxxxxxxx-production.iam.gserviceaccount.com 无权访问受 IAP 保护的应用程序。

已尝试以下方法,但仍然存在上述问题 1. 删除/创建服务帐号
2.重新创建json密钥文件
3.授予服务账号项目owner权限

if __name__ == '__main__':
    os.environ[
        "GOOGLE_APPLICATION_CREDENTIALS"] = '/Users/foo/bar.json'

    print make_iap_request('https://foo.com/', 'xxxxtheidforthatiapservice.apps.googleusercontent.com')

【问题讨论】:

  • 您是否尝试将服务帐户电子邮件地址添加到 IAP 授权屏幕(信息面板)并为其分配 IAP 角色?我只测试了用户身份,所以我不确定服务帐户是受支持的身份。

标签: python google-cloud-platform in-app-purchase google-oauth


【解决方案1】:

我认为您需要遵循Authenticating from a service account 程序:

使用 OpenID Connect (OIDC) 令牌对服务帐户进行身份验证 到受 Cloud IAP 保护的资源。

  1. 将服务帐号添加到受 Cloud IAP 保护的项目的 access list
  2. 生成JWT-based access token。这使用需要客户端 ID 的 target_audience 附加声明。寻找 您的客户 ID,请按照以下步骤操作:

    一个。转到 Cloud IAP 页面。

    b.找到您要访问的资源,然后单击 更多 > 编辑 OAuth 客户端

    edit OAuth client on the More menu

    c。在出现的凭据页面上,记下客户端 ID。

  3. 为受 Cloud IAP 保护的客户端 ID 请求 OIDC 令牌。

  4. Authorization: Bearer 标头中包含 OIDC 令牌,以向受云 IAP 保护的资源发出经过身份验证的请求。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    您必须运行作为服务帐户身份验证的脚本,该服务帐户用于以编程方式访问受 IAP 保护的应用程序。您可以通过运行脚本directly from VM which uses that service account as default 来执行此操作,或者您需要下载 SA 凭据并在本地执行此操作Obtaining an OIDC token from a local service account key file

    除此之外,您还需要将IAP-secured Web App User 角色分配给该受 IAP 保护的特定应用所需的服务帐户。

    之后,重新运行脚本。

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多