Security “什么是”呢;bytesToSign";谷歌云安全产品中的signBlob?

Security “什么是”呢;bytesToSign";谷歌云安全产品中的signBlob?,security,google-cloud-platform,Security,Google Cloud Platform,我正在阅读有关云身份和访问管理的文档。我已经弄明白了除了尸体 { "bytesToSign": string } 文件上说这应该是 The bytes to sign. A base64-encoded string. 天哪,真有帮助!谁能解释一下什么是bytesToSign?我在那里放什么?服务帐户私钥?(GCP)API方法允许您使用给定服务帐户的系统管理私钥对一组数据进行加密“签名” 更多信息: 权限 为了使用服务帐户对Blob进行签名,您需要确保您的帐户对所讨论的服务帐户具有ia

我正在阅读有关云身份和访问管理的文档。我已经弄明白了除了尸体

{
  "bytesToSign": string
}
文件上说这应该是

The bytes to sign.

A base64-encoded string.
天哪,真有帮助!谁能解释一下什么是
bytesToSign
?我在那里放什么?服务帐户私钥?

(GCP)API方法允许您使用给定服务帐户的系统管理私钥对一组数据进行加密“签名”

更多信息:

权限

为了使用服务帐户对Blob进行签名,您需要确保您的帐户对所讨论的服务帐户具有
iam.serviceCounts.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(在请求主体中)
例如,假设您要签署此文本:

这是一些我想签名的文本。

首先,您必须对字符串进行base64编码,它将成为:

SGVyZSBpcyBzb21lIHRleHQgdGhhdCBJIHdvdWxkIGxpa2UgdG8gc2lnbi4=

然后在主体中使用base64编码字符串发布到端点。例如,如果您的项目名为
my project
,并且您希望使用我的应用程序引擎默认服务帐户对blob进行签名,您将执行以下操作:

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

正文:

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

例如:

{
 "keyId": "f123aa7016e4565e49a489357aa384fa25a9e789",
 "signature": "t7FT+3b0AUzqmGHofHIa8MDcfuBOKQa4/DtK6Ovel22Y9pa5G4PduW5iYY9EMQpyXW3sZEZiyFRs3M9nGkLt/DKXITCW9Ta4nvLZwNj1ahFjkujr12iUzyU+NR9/Db2LWoI/g4j1e27E9O8zqXdi+BQpKkOYHUcfbH3xcTbEJnmjU/1zEHztNRXlihNPyOjSWsKhPdVnVzxYmi6Y3Bmgb3kCZe5hhUhANo9gavsakSogi0y5z625vHiW3roQkH2fEktcDkf49GlLJEHqRu+FaCcAwgpsEs/Nm+llgfhSuHKx1tcvslmTWOGAnYDKVg74oqg4FgfhiLqBWJYRrFRwxQ=="
}
您可以(但是将项目名称更改为您的项目,并将服务帐户名称更改为您的服务帐户)

这也可以通过以下方式实现,例如:

$ gcloud iam service-accounts sign-blob \
      --iam-account my-account@somedomain.com input.bin output.bin
有关此命令如何连接到更广泛的云基础设施的更多信息,请参阅:

您可以使用它向非Google服务声明您的身份。如果要断言您提供给外部应用程序的某些文本实际上来自您,则可以使用
signBlob
方法对文本进行签名,以使用私钥对文本进行签名,然后使用
get\u public\u certificates()
获取证书列表的方法,该列表可用于验证签名是否正确


更多信息:

多亏了@lukwam和@John Hanley,答案是我不需要使用
projects.serviceAccounts.signBlob
,也就是说,这是一个我不需要去的兔子洞。我收到一条
SigningError
消息,我需要为服务帐户分配角色,正如我在本文中详细介绍的那样。

这通常用于签署JWT以请求访问令牌。你想做什么?我想获取Firebase存储中文件的下载URL。我收到一条SigningError消息:“执行此操作需要权限iam.serviceAccounts.signBlob。”以下是我对另一个问题的回答,该问题涉及添加权限以使用
signBlob
:注释不用于扩展讨论;这段对话已经结束。
$ gcloud iam service-accounts sign-blob \
      --iam-account my-account@somedomain.com input.bin output.bin