Что такое «bytesToSign» в продуктах Google Cloud Security signBlob? - PullRequest
0 голосов
/ 16 ноября 2018

Я читаю документацию по облачной идентификации и управлению доступом Метод: projects.serviceAccounts.signBlob .Я понял это за исключением тела, которое

{
  "bytesToSign": string
}

В документации сказано, что это должно быть

The bytes to sign.

A base64-encoded string.

Черт возьми, как полезно!Кто-нибудь может объяснить, что такое bytesToSign?Что я там положу?Закрытый ключ учетной записи службы?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Благодаря @lukwam и @Джону Хэнли ответ был таков: мне не нужно было использовать projects.serviceAccounts.signBlob, то есть это была кроличья нора, в которую мне не нужно было спускаться. Я получал сообщение SigningError, и мне нужно было назначить роли учетным записям служб, как я подробно описал в этом вопросе и ответе .

0 голосов
/ 16 ноября 2018

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() метод получения списка сертификатов, который можно использовать для проверки этой подписи.

Подробнее: Подтверждение идентичности сторонним службам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...