Google Cloud Platform (GCP) IAM Метод API projects.serviceAccounts.signBlob
позволяет криптографически «подписывать» большой блок данных с помощью управляемого системойзакрытый ключ для данной учетной записи службы.
Дополнительная информация: Цифровая подпись
Разрешения
Чтобы подписать большие двоичные объекты с помощью служебной учетной записи, необходимоубедитесь, что ваша учетная запись имеет разрешение 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 по умолчанию, вы должны сделать:
POST: https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/my-project@appspot.gserviceaccount.com:signBlob?key={YOUR_API_KEY}
BODY:
{
"bytesToSign": "SGVyZSBpcyBzb21lIHRleHQgdGhhdCBJIHdvdWxkIGxpa2UgdG8gc2lnbi4="
}
В случае успеха он вернет ответ с keyId
, который использовался для подписи большого двоичного объекта, и signature
, который является подписанным большим двоичным объектом.
Пример:
{
"keyId": "f123aa7016e4565e49a489357aa384fa25a9e789",
"signature": "t7FT+3b0AUzqmGHofHIa8MDcfuBOKQa4/DtK6Ovel22Y9pa5G4PduW5iYY9EMQpyXW3sZEZiyFRs3M9nGkLt/DKXITCW9Ta4nvLZwNj1ahFjkujr12iUzyU+NR9/Db2LWoI/g4j1e27E9O8zqXdi+BQpKkOYHUcfbH3xcTbEJnmjU/1zEHztNRXlihNPyOjSWsKhPdVnVzxYmi6Y3Bmgb3kCZe5hhUhANo9gavsakSogi0y5z625vHiW3roQkH2fEktcDkf49GlLJEHqRu+FaCcAwgpsEs/Nm+llgfhSuHKx1tcvslmTWOGAnYDKVg74oqg4FgfhiLqBWJYRrFRwxQ=="
}
Вы можете попробовать его здесь с помощью API Explorer (но измените имя проекта на свой проект и измените имя учетной записи службы на свой сервисaccount).
Это также можно сделать с помощью gcloud , например:
$ gcloud iam service-accounts sign-blob \
--iam-account my-account@somedomain.com input.bin output.bin
Для получения дополнительной информации о том, как эта команда связана с более широкой облачной инфраструктурой, пожалуйста,см .:
Вы можете использовать это, чтобы подтвердить свою личность в службах, не принадлежащих Google.Если вы хотите утверждать, что какой-то текст, предоставленный вами внешнему приложению, на самом деле исходит от вас, то вы можете подписать текст методом signBlob
, чтобы подписать текст своим закрытым ключом, а затем вы можете использовать get_public_certificates()
метод получения списка сертификатов, который можно использовать для проверки этой подписи.
Подробнее: Подтверждение идентичности сторонним службам