- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为谷歌服务帐户生成签名的 JWT token
now = int(time.time())
expires = now + 900 # 15 mins in seconds, can't be longer.
payload = {
'iat': now,
'exp': expires,
'sub': 'somekey@someproject.iam.gserviceaccount.com',
'aud': 'aud'
}
body = {'payload': json.dumps(payload)}
name = 'projects/someproject/serviceAccounts/somekey@someproject.iam.gserviceaccount.com'
iam = googleapiclient.discovery.build('iam', 'v1', credentials=credentials)
request = iam.projects().serviceAccounts().signJwt(name=name, body=body)
resp = request.execute()
jwt = resp['signedJwt']
我面临的问题是关于凭证如果我使用
credentials = service_account.Credentials.from_service_account_info(gcp_json_credentials_dict)
工作正常。
但我正在尝试使用默认服务帐户
credentials, your_project_id = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
出现以下错误-
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://iam.googleapis.com/v1/projects/someproject/serviceAccounts/somekey@someproject.iam.gserviceaccount.com:signJwt?alt=json returned "Permission iam.serviceAccounts.signJwt is required to perform this operation on service account
最佳答案
首先,我将尝试解释您收到错误的原因:
需要 iam.serviceAccounts.signJwt 权限才能对服务帐户执行此操作。
A) 您的代码正在使用默认服务帐户的计算服务上运行。我将其称为 Identity-1。
B) 您的代码正在模拟身份 somekey@someproject.iam.gserviceaccount.com。我将其称为Identity-2。
您的代码需要使用 Identity-1 凭据的权限和模拟 Identity-2 的权限。
第 1 部分:
当您为计算服务使用默认服务帐户或为计算服务分配服务帐户时,两种形式的权限控制会生效。主控件是分配给服务帐户的 IAM 角色。限制器是为计算服务设置的 ** OAuth 范围**。
OAuth 范围不授予权限,OAuth 范围限制已通过 IAM 角色授予服务帐户的权限。这是我看到很多配置不正确的重要一点。我建议使用计算引擎 Access scopes 设置为 Allow full access to all Cloud APIs。然后修改/管理分配给分配给 Compute Engine 的服务帐户的 IAM 角色。
第 2 部分:
为了模拟另一个身份,在您的情况下 Identity-1 正在模拟 Identity-2,您的代码必须有权这样做。可以模拟两种类型的身份: a) 服务帐户; b) 用户身份。在您的情况下,您正在模拟另一个服务帐户。
如果您要模拟服务帐户,则需要通过 IAM 角色在 Identity-2 上授予正确的 IAM 权限,并将成员设置为 Identity-1。可以这样想:Identity-2 必须向 Identity-1 授予权限。
如果您要冒充用户身份,则需要设置 Google Workspace Domain-Wide Delegation of Authority。您模拟的帐号必须由 Google Workspace 管理。引用Google Workspace Domain-Wide Delegation of Authority设置了用户帐户模拟,这在您的情况下不是必需的。
现在您可能想知道,哪个身份需要模拟权? JWT 代表的身份。该身份由 JWT 声明 iss 声明。 您的 JWT 不包含 iss 声明。有关更多详细信息,请参阅此示例 link .您正在模拟的身份由声明 sub 指定。在 OAuth 中,iss 模拟 sub。
第 3 部分:
您还必须配置您的 Google Cloud 项目以支持您的目标。这需要启用两个 API:
解决方案:
gcloud 服务启用 iamcredentials.googleapis.com
gcloud 服务启用 cloudresourcemanager.googleapis.com
将 Compute Engine Access Scopes 设置为Allow full access to all Cloud APIs。这需要关闭 VM 并编辑 VM 配置。
将 iss 声明添加到您使用值 Identity-1 创建的 JWT。
授予包含权限 iam.serviceAccounts.signJwt 的 IAM 角色。一个很好的角色是 Service Account Token Creator to Identity-2。看这个link了解更多详情。
示例命令:
gcloud iam service-accounts add-iam-policy-binding [Identity-2] \
--member serviceAccount:[Identity-1\ \
--role roles/iam.serviceAccountTokenCreator
关于google-cloud-platform - 获取谷歌服务帐户的 signedJwt token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69627857/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!