Назад | Перейти на главную страницу

Невозможно экспортировать ключ сервисного аккаунта в Terraform #GCP

Я загрузил ключ учетной записи службы GCP в свою локальную систему. В Terraform я установил GOOGLE_APPLICATION_CREDENTIALS как путь к этому файлу в части сценария запуска моего экземпляра бастиона. Ниже приведен фрагмент:

variable "credentials"{

default="C:/GCP/service-account-key.json"

}

. . . . . .


metadata= {

startup-script=<<SCRIPT

export GOOGLE_APPLICATION_CREDENTIALS="${file("${var.credentials}")}"

SCRIPT

}

Позже я написал сценарий #! / Bin / bash для сохранения этих учетных данных в другом файле, как показано ниже:

#!/bin/bash

printf "$GOOGLE_APPLICATION_CREDENTIALS" > /home/ubuntu/credentials

Но когда я открываю указанный выше файл учетных данных, он усекается, как показано ниже, и весь ключ отсутствует:

{

  type: service_account,

  project_id: acn-devopsgcp,

  private_key_id: xxxxx,

  private_key: -----BEGIN  

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

Вы должны настроить переменную GOOGLE_APPLICATION_CREDENTIALS

https://cloud.google.com/docs/authentication/

Вы можете скачать файл JSON из учетной записи службы.

В разделе «IAM и администратор»> «Учетные записи служб» щелкните 3 точки учетной записи службы, которую вы хотите использовать, и выберите «Создать ключ»> JSON> Создать.

Это сгенерирует / загрузит файл JSON.

Если этот экземпляр-бастион является экземпляром Google Cloud Compute Engine (GCE), вам не нужно передавать ключи JSON виртуальной машине.

Вы должны использовать сервисный аккаунт, от имени которого работает экземпляр GCE - любой инструмент, который использует GCP API / SDK (например, gsutil или gcloud) будет использовать эту учетную запись службы по умолчанию, если не предоставлены учетные данные с использованием переменных среды.

Каждый проект GCP предоставляется с учетной записью службы «вычислений по умолчанию», или вы можете создать ее специально для рассматриваемого экземпляра с помощью Terraform и при необходимости предоставить разрешения через IAM.


Однако, конкретно отвечая на ваш вопрос, ваш ключ не развертывается из-за вложенных двойных кавычек. Ваш ключ JSON содержит двойные кавычки, которые, если их не экранировать, завершат кавычку, начинающуюся строку.

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

#!/bin/bash

cat <<EOF > /etc/gce_credentials.json
${file("${var.credentials}")}
EOF

export GOOGLE_APPLICATION_CREDENTIALS=$(cat /etc/gce_credentials.json)