служба gcloud iam-создание ключей учетных записей выдает недопустимую ошибку подписи jwt

#jwt #key #gcloud #service-accounts

#jwt #Клавиша #gcloud #сервис-учетные записи

Вопрос:

Есть ли какая-либо разница между ключом, который я создаю с помощью приведенной ниже команды gcloud iam, и переходом через консоль для создания ключа json? Каждый результат приводит к файлу .json, который, за исключением очевидных различий в значениях private_key_id и private_key, идентичен. Вот команды gcloud, которые я использую:

 gcloud iam service-accounts create my-sa-name
gcloud projects add-iam-policy-binding my-project-id --member="serviceAccount:my-sa-name@my-project-id.iam.gserviceaccount.com" --role="roles/owner"
gcloud iam service-accounts keys create key.json --iam-account=serviceAccount:my-sa-name@my-project-id.iam.gserviceaccount.com
 

Однако, когда я пытаюсь использовать тот, который был удален через командную строку, я получаю:

 google.auth.exceptions.RefreshError: ('invalid_grant: Invalid JWT Signature.', '{"error":"invalid_grant","error_description":"Invalid JWT Signature."}')
 

Как ни странно, если я захожу в консоль, создаю ключ для той же учетной записи службы и помещаю файл, который загружается на мой компьютер, вместо файла из командной строки, все работает нормально.

Как я использую ключ, который вы спрашиваете? Я использую функциональные фреймворки для локального запуска и отладки облачной функции, которая будет получать доступ к облачному хранилищу, поэтому мой код использует клиентскую библиотеку google.cloud.storage (python 3.8). Я запускаю локальный процесс с переменной среды GOOGLE_APPLICATION_CREDENTIALS, заданной в качестве местоположения / имени файла ключа json. Я знаю, что все это работает нормально, потому что загруженный на консоль ключ работает нормально.

Я также пытался использовать gcloud auth service-account —key-file=key.json, и это также дает мне недопустимую ошибку подписи JWT.

К счастью, я не заблокирован, потому что я могу использовать созданный вручную ключ, но мне бы ОЧЕНЬ хотелось автоматизировать все возможные шаги здесь…

Итак … кто-нибудь может это объяснить? Видел это, понял и знаю, как это исправить?

Комментарии:

1. Нет, разницы нет. То, что вы делаете, должно работать. Перечитывание.

2. Ах, значение учетной записи в ...keys create не получает serviceAccount: префикс

3. Должно быть --iam-account="my-sa-name@my-project-id.iam.gserviceaccount.com"

Ответ №1:

 gcloud iam service-accounts keys create key.json 
--iam-account=my-sa-name@my-project-id.iam.gserviceaccount.com
 

Одним из способов прояснить это является:

 ACCOUNT="[[YOUR-ACCOUNT]]"
PROJECT="[[YOUR-PROJECT]]"
EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

gcloud iam service-accounts create ${ACCOUNT} 
--project=${PROJECT}

gcloud projects add-iam-policy-binding ${PROJECT} 
--member="serviceAccount:${EMAIL}" 
--role="roles/owner"

gcloud iam service-accounts keys create ${ACCOUNT}.json 
--iam-account=${EMAIL} 
--project=${PROJECT}