【问题标题】:What is "bytesToSign" in Google Cloud Security Products signBlob?谷歌云安全产品 signBlob 中的“bytesToSign”是什么?
【发布时间】:2019-04-19 03:01:55
【问题描述】:

我正在阅读 Cloud Identity and Access Management Method: projects.serviceAccounts.signBlob 的文档。我已经弄清楚了,除了身体,这是

{
  "bytesToSign": string
}

文档说这应该是

The bytes to sign.

A base64-encoded string.

天哪,太有帮助了!谁能解释bytesToSign 是什么?我在那儿放什么?服务帐号私钥?

【问题讨论】:

  • 这通常用于签署 JWT 以请求访问令牌。你想做什么?
  • 我正在尝试获取 Firebase 存储中文件的下载 URL。我收到一条 SigningError 消息:“执行此操作需要权限 iam.serviceAccounts.signBlob。”
  • 这是我对另一个问题的回答,关于添加使用权限的确切步骤signBlob:stackoverflow.com/questions/53344238/…

标签: security google-cloud-platform


【解决方案1】:

Google Cloud Platform (GCP) IAM API 方法 projects.serviceAccounts.signBlob 允许您使用给定服务帐户的系统管理私钥对数据块进行加密“签名”。

更多信息:Digital Signature

权限

要使用服务帐户对 blob 进行签名,您需要确保您的帐户对相关服务帐户具有 iam.serviceAccounts.signBlob 权限。最简单的方法是在项目或服务帐户上授予您的帐户服务帐户令牌创建者。此角色包含以下权限:

  • iam.serviceAccounts.get
  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.implicitDelegation
  • iam.serviceAccounts.list
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • resourcemanager.projects.get
  • resourcemanager.projects.list

使用 API

此 API 端点接受两个参数:

  • 服务帐户名称(在请求的 URL 中)
  • 您要加密签名的 blob(在请求正文中)

举个例子,假设你想签署这个文本:

Here is some text that I would like to sign.

首先,你必须对字符串进行base64编码,变成:

SGVyZSBpcyBzb21lIHRleHQgdGhhdCBJIHdvdWxkIGxpa2UgdG8gc2lnbi4=

然后,您将在正文中使用 base64 编码的字符串发布到端点。例如,如果您的项目名为 my-project,并且您想使用我的 App Engine 默认服务帐户对 blob 进行签名,您可以:

发帖:https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/my-project@appspot.gserviceaccount.com:signBlob?key={YOUR_API_KEY}

身体:

{
 "bytesToSign": "SGVyZSBpcyBzb21lIHRleHQgdGhhdCBJIHdvdWxkIGxpa2UgdG8gc2lnbi4="
}

如果成功,它将返回一个响应,其中包含用于对 blob 进行签名的 keyId 和作为已签名 blob 的 signature

例子:

{
 "keyId": "f123aa7016e4565e49a489357aa384fa25a9e789",
 "signature": "t7FT+3b0AUzqmGHofHIa8MDcfuBOKQa4/DtK6Ovel22Y9pa5G4PduW5iYY9EMQpyXW3sZEZiyFRs3M9nGkLt/DKXITCW9Ta4nvLZwNj1ahFjkujr12iUzyU+NR9/Db2LWoI/g4j1e27E9O8zqXdi+BQpKkOYHUcfbH3xcTbEJnmjU/1zEHztNRXlihNPyOjSWsKhPdVnVzxYmi6Y3Bmgb3kCZe5hhUhANo9gavsakSogi0y5z625vHiW3roQkH2fEktcDkf49GlLJEHqRu+FaCcAwgpsEs/Nm+llgfhSuHKx1tcvslmTWOGAnYDKVg74oqg4FgfhiLqBWJYRrFRwxQ=="
}

你可以try it here with the API Explorer(但是把项目名改成你的项目,把服务账户名改成你的服务账户)。

这也可以通过gcloud 来完成,例如:

$ gcloud iam service-accounts sign-blob \
      --iam-account my-account@somedomain.com input.bin output.bin

有关此命令如何与更广泛的云基础架构联系的更多信息,请参阅:

您可以使用它来向非 Google 服务声明您的身份。如果您想断言您提供给外部应用程序的某些文本实际上是来自您,那么您可以使用signBlob 方法对文本进行签名,然后使用您的私钥对文本进行签名,然后您可以使用@ 987654345@ 方法获取可用于验证签名的证书列表。

更多:Asserting identity to third-party services

【讨论】:

【解决方案2】:

感谢@lukwam 和@John Hanley,答案是我不需要使用projects.serviceAccounts.signBlob,也就是说,这是一个我不需要下去的兔子洞。我收到了SigningError 消息,我需要为服务帐户分配角色,正如我在此question and answer 中所详述的那样。

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2021-01-24
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多