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