Ошибка развертывания облачной функции с использованием terraform - запрошена неверная учетная запись службы функции

Я хочу развернуть облачную функцию Google, и я хочу сделать это с помощью terraform. Я также хочу создать учетную запись службы, которая будет действовать как учетная запись службы по умолчанию для запуска этой функции, как описано на Идентификатор функции› Идентификатор функции. Идентификатор этой учетной записи службы - dataflowdemo.

Я создал учетную запись службы, которую хочу использовать для запуска своих развертываний (не такую, как учетная запись службы, упомянутая в предыдущем абзаце), идентификатор этой учетной записи службы deployer:

export PROJECT=myproject
gcloud iam service-accounts create --project $PROJECT deployer

Я загрузил ключевой файл, на который я могу ссылаться в '$ GOOGLE_APPLICATION_CREDENTIALS', как указано на странице Terraform Google Provider ›Добавление учетных данных:

export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/deployer.json
gcloud iam service-accounts keys create \
   --project $PROJECT \
   --iam-account deployer@${PROJECT}.iam.gserviceaccount.com $GOOGLE_APPLICATION_CREDENTIALS

и предоставили ему необходимые разрешения

gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/cloudfunctions.admin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/iam.serviceAccountAdmin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/iam.roleAdmin"

Код terraform довольно прост: он создает учетную запись службы dataflowdemo и указывает эту учетную запись службы в качестве учетной записи службы, отличной от используемой по умолчанию для облачной функции. Код доступен по адресу https://github.com/jamiekt/dataflowcademo/tree39b03e03e05e05e08e05e06e08e06e08e08e6 а>.

Я запускаю развертывание terraform следующим образом:

terraform init && terraform apply --auto-approve

и впоследствии он терпит неудачу:

Ошибка: googleapi: ошибка 400: запрошена недопустимая учетная запись службы функции: serviceAccount: [email protected]. Чтобы узнать, как подробная документация по устранению неполадок., badRequest

Я перешел по ссылке, указанной в сообщении об ошибке, в котором говорится:

Однако для использования учетной записи службы времени выполнения, отличной от используемой по умолчанию, разработчик должен иметь разрешение iam.serviceAccounts.actAs для этой нестандартной учетной записи. Это разрешение автоматически предоставляется пользователю, который создает учетную запись службы времени выполнения, отличную от используемой по умолчанию.

Программа развертывания функции (т.е. учетная запись службы deployer) - это та же учетная запись, которая создала функцию, поэтому я очень смущен, почему это не удается.

Кто-нибудь может сказать мне, где я ошибаюсь и что мне нужно сделать, чтобы это исправить?


person jamiet    schedule 26.11.2020    source источник


Ответы (1)


В вашем functions.tf файле вы определили свою учетную запись службы следующим образом

service_account_email = "serviceAccount:${google_service_account.sa.email}"

Удалите префикс serviceAccount:

service_account_email = "${google_service_account.sa.email}"
person guillaume blaquiere    schedule 27.11.2020
comment
спасибо, давай попробовать - person jamiet; 01.12.2020
comment
спасибо, что решил это. Мне также пришлось предоставить роли учетной записи развертывания / iam.serviceAccountUser. См. Фиксацию github.com/jamiekt/dataflowdemo/commit/ для получения дополнительной информации. - person jamiet; 01.12.2020