Я пытаюсь настроить задание на моем локальном окружности (используя docker executor, изображение: google/cloud-sdk:latest
), и для этого задания требуется расшифровка зашифрованного файла sops gcp kms. Я настроил учетную запись службы Google для службы расшифровки gcp kms (я могу запустить сценарий, который будет запускаться через задание circleci, успешно локально, расшифровав файл sops через учетную запись службы, поэтому я знаю, что настройка учетной записи службы действительна) , Вот как я выполняю свою работу.
1 - я base64 кодирую учетную запись службы Google json файл: base64 path/to/service_aacount_file.json
2 - я запускаю работу circleci, устанавливая переменную среды GCLOUD_SERVICE_KEY на circleci, с закодированным в base64 содержимым из предыдущего шага: circleci local execute --env GCLOUD_SERVICE_KEY='<Base64EncodedServiceAccountJsonFileContent>' --job '<MyJob>'
3- Вот моя конфигурация circleci:
- run:
name: <MyJob>
command: |
apt-get install -y docker
apt-get install -y sudo
cd $(pwd)/path/to/jobcode
echo $GCLOUD_SERVICE_KEY | base64 -d > ${HOME}/<MyGoogleServiceAccountJsonFile.json>
export GOOGLE_APPLICATION_CREDENTIALS="${HOME}/<MyGoogleServiceAccountJsonFile.json>"
gcloud auth activate-service-account --key-file ${HOME}/<MyGoogleServiceAccountJsonFile.json>
echo $GOOGLE_APPLICATION_CREDENTIALS
ls -halt $GOOGLE_APPLICATION_CREDENTIALS
cat $GOOGLE_APPLICATION_CREDENTIALS
sudo ./<RunJob.sh>
4 - Я получаю следующую ошибку при выполнении задания:
Failed to get the data key required to decrypt the SOPS file.
Group 0: FAILED
projects/<MyProject>/locations/<MyLocation>/keyRings/<MySopsKeyring>/cryptoKeys/<MyKey>: FAILED
- | Cannot create GCP KMS service: google: could not find
| default credentials. See
| https://developers.google.com/accounts/docs/application-default-credentials
| for more information.
Recovery failed because no master key was able to decrypt the file. In
order for SOPS to recover the file, at least one key has to be successful,
but none were.
5- Далее из вывода консоли:
a- Я вижу, что учетная запись службы была успешно активирована: Activated service account credentials for: [<MyServiceAccount>@<MyProject>.iam.gserviceaccount.com]
b- GOOGLE_APPLICATION_CREDENTIALS Переменная окружения установлена для учетной записи службы json: /path/to/service_account.json
c - вышеуказанный файл был правильно декодирован в base64 и содержит действительные json:
{
"client_x509_cert_url": "<MyUrl>",
"auth_uri": "<MyAuthUri>",
"private_key": "<MyPrivateKey>",
"client_email": "<ClientEmail>",
"private_key_id": "<PrivateKeyId>",
"client_id": "<ClientId>",
"token_uri": "<TokenUri>",
"project_id": "<ProjectId>",
"type": "<ServiceAccount>",
"auth_provider_x509_cert_url": "<AuthProviderCertUrl>"
}
6- Некоторые другие вещи, которые я пробовал:
a- Попытка установки имени проекта Google в переменных среды, но все еще та же ошибка.
b- Попытка установки GOOGLE_APPLICATION_CREDENTIALS для содержимого файла вместо путь к файлу, но aga с тем же результатом.
c - Попытка установки GOOGLE_APPLICATION_CREDENTIALS путем предоставления пути к файлу без кавычек или одинарных кавычек, но все равно без разницы.
d - Попытка установки $ BASH_ENV с помощью echo 'export GOOGLE_APPLICATION_CREDENTIALS=path/to/service_account.json' >> $BASH_ENV
, но та же ошибка
Пожалуйста, помогите.