gpt4 book ai didi

google-cloud-platform - 尽管 GOOGLE_APPLICATION_CREDENTIALS 已成功设置为服务帐户 json,但 Sops 无法 gcp kms 解密 Circleci 上的文件

转载 作者:行者123 更新时间:2023-12-04 10:36:50 25 4
gpt4 key购买 nike

我正在尝试在我的本地 circleci 上配置一个作业(使用 docker 执行器,图像:google/cloud-sdk:latest),该作业需要解密 sops gcp kms 加密文件。我已经为 gcp kms 解密服务设置了一个谷歌服务帐户(我可以运行脚本,通过 circleci 作业运行,通过服务帐户解密 sops 文件在本地成功运行,所以我知道服务帐户设置是有效的) .以下是我的工作方式。

1- 我对 google 服务帐户 json 文件进行 base64 编码:base64 path/to/service_aacount_file.json

2- 我运行 circleci 作业,在 circleci 上设置 GCLOUD_SERVICE_KEY 环境变量,使用上一步的 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 设置为文件内容,而不是文件路径,但结果还是一样。

c- 尝试通过提供不带引号或单引号的文件路径来设置 GOOGLE_APPLICATION_CREDENTIALS,但仍然没有区别。

d- 尝试通过执行 echo 'export GOOGLE_APPLICATION_CREDENTIALS=path/to/service_account.json' >> $BASH_ENV 来设置 $BASH_ENV , 但同样的错误

请帮忙。

最佳答案

五个可行的选项:

  1. 尝试运行以下命令:gcloud auth application-default login
  2. 尝试使用此命令设置环境变量:echo 'export GOOGLE_APPLICATION_CREDENTIALS=/tmp/service-account.json' >> $BASH_ENV
  3. 另一件事是我看到 runjob.sh 在 root 下运行。可能是 gcp 凭据默认情况下在 sudo 下不可见。要么在没有 sudo 的情况下运行脚本,要么在有 sudo 的情况下运行前面的命令。
  4. 作为最后的手段(这些选项对我有用,在你的场景中可能会有所不同):{ echo 1;回声 1;回声; } | gcloud 初始化
  5. gcloud components update 这有时会在 sdk 过时时起作用。
  6. 配置集项目 [PROJECT_NAME]

您还可以使用以下方式检查事件帐户:gcloud auth list

关于google-cloud-platform - 尽管 GOOGLE_APPLICATION_CREDENTIALS 已成功设置为服务帐户 json,但 Sops 无法 gcp kms 解密 Circleci 上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60137075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com