Bitbucket 无法加载 google 云密钥文件
Bitbucket cannot load google cloud key file
Bitbucket 无法读取我使用 Google 云服务密钥的 base64 编码 json 文件。
我自己已经成功编码然后解码了同一个文件,Bitbucket 试图解码。
但是 Bitbucket 无法执行此操作并出现 base64: invalid input
错误。
这是完整的错误消息:
Status: Downloaded newer image for bitbucketpipelines/google-app-engine-deploy:0.6.1
INFO: Setting up environment.
echo "${KEY_FILE}" | base64 -d >> /tmp/key-file.json
base64: invalid input
gcloud auth activate-service-account --key-file /tmp/key-file.json --quiet --verbosity=warning
ERROR: (gcloud.auth.activate-service-account) Could not read json file /tmp/key-file.json: Unterminated string starting at: line 3 column 17 (char 49)
gcloud config set project wowzers --quiet --verbosity=warning
Updated property [core/project].
INFO: Starting deployment to GCP app engine...
gcloud app --quiet deploy app.yaml --version=14 --promote --stop-previous-version --verbosity=debug --quiet --verbosity=warning
ERROR: (gcloud.app.deploy) You do not currently have an active account selected.
据我所知,它在 "project_id": "
上失败了。
解码后的文件如下所示:
{
"type": "service_account",
"project_id": "project-318",
"private_key_id": "...",
...
}
我尝试先通过环境变量然后通过文件提供我的 base64 编码密钥文件。但是有同样的错误。当它无法提取 JSON 时,bitbucket 会写入此错误:
ERROR: (gcloud.auth.activate-service-account) Could not read json file /tmp/key-file.json: No JSON object could be decoded
原来来自 google 云的密钥文件包含换行符:\n
。
所以结果 base64 编码文件也如下所示:
HhsUUrAkupWJ6vdesSRHwNhnPpgxByYT7z7HVBEPsrUpjLWdX6TQm4pHNJydsC34F
RvVYyBAedgLhWPPGPvU6UBJww3aNxQnJS95ZvKDBuNr5CNTtAgh6EgsattRrZtawH
fjphVs82UWZZFq3JUeGwGdTs88XWu6ejaPYZknnD94W7pU6Ds8vJHGhAnBw9FtkrA
gjp4UFZN2Yg9KJFSrTfFA6dUsp2dPVN6VzVfpqJzGrxbFBjWQAp4zK5TXhJaN4zDr
.....
但是为了将它传递给 Bitbucket,您需要将其全部放在一行中:
HhsUUrAkupWJ6vdesSRHwNhnPpgxByYT7z7HVBEPsrUpjLWdX6TQm4pHNJydsC34FRvVYyBAedgLhWPPGPvU6UBJww3aNxQnJS95ZvKDBuNr5CNTtAgh6EgsattRrZtawHfjphVs82UWZZFq3JUeGwGdTs88XWu6ejaPYZknnD94W7pU6Ds8vJHGhAnBw9FtkrAgjp4UFZN2Yg9KJFSrTfFA6dUsp2dPVN6VzVfpqJzGrxbFBjWQAp4zK5TXhJaN4zDr....
在我手动删除新行符号后,它给出了成功消息:
Activated service account credentials for: [project]
我可以建议使用 GCP 的 KMS(密钥管理服务)。解密 base 64 非常容易,在 KMS 下,您需要具有适当的用户角色才能相应地解密它。使用 KMS 的步骤是下面的代码片段:
KEYRING=kubernetes-secrets
KEY=generic-type-encryption-key
gcloud kms keyrings create $KEYRING --location asia-east2
gcloud kms keys create $KEY --location asia-east2 \
--keyring $KEYRING \
--purpose encryption
gcloud kms encrypt --location asia-east2 \
--keyring $KEYRING \
--key $KEY \
--plaintext-file example.txt \
--ciphertext-file encrypted.example.txt
Bitbucket 无法读取我使用 Google 云服务密钥的 base64 编码 json 文件。
我自己已经成功编码然后解码了同一个文件,Bitbucket 试图解码。
但是 Bitbucket 无法执行此操作并出现 base64: invalid input
错误。
这是完整的错误消息:
Status: Downloaded newer image for bitbucketpipelines/google-app-engine-deploy:0.6.1
INFO: Setting up environment.
echo "${KEY_FILE}" | base64 -d >> /tmp/key-file.json
base64: invalid input
gcloud auth activate-service-account --key-file /tmp/key-file.json --quiet --verbosity=warning
ERROR: (gcloud.auth.activate-service-account) Could not read json file /tmp/key-file.json: Unterminated string starting at: line 3 column 17 (char 49)
gcloud config set project wowzers --quiet --verbosity=warning
Updated property [core/project].
INFO: Starting deployment to GCP app engine...
gcloud app --quiet deploy app.yaml --version=14 --promote --stop-previous-version --verbosity=debug --quiet --verbosity=warning
ERROR: (gcloud.app.deploy) You do not currently have an active account selected.
据我所知,它在 "project_id": "
上失败了。
解码后的文件如下所示:
{
"type": "service_account",
"project_id": "project-318",
"private_key_id": "...",
...
}
我尝试先通过环境变量然后通过文件提供我的 base64 编码密钥文件。但是有同样的错误。当它无法提取 JSON 时,bitbucket 会写入此错误:
ERROR: (gcloud.auth.activate-service-account) Could not read json file /tmp/key-file.json: No JSON object could be decoded
原来来自 google 云的密钥文件包含换行符:\n
。
所以结果 base64 编码文件也如下所示:
HhsUUrAkupWJ6vdesSRHwNhnPpgxByYT7z7HVBEPsrUpjLWdX6TQm4pHNJydsC34F
RvVYyBAedgLhWPPGPvU6UBJww3aNxQnJS95ZvKDBuNr5CNTtAgh6EgsattRrZtawH
fjphVs82UWZZFq3JUeGwGdTs88XWu6ejaPYZknnD94W7pU6Ds8vJHGhAnBw9FtkrA
gjp4UFZN2Yg9KJFSrTfFA6dUsp2dPVN6VzVfpqJzGrxbFBjWQAp4zK5TXhJaN4zDr
.....
但是为了将它传递给 Bitbucket,您需要将其全部放在一行中:
HhsUUrAkupWJ6vdesSRHwNhnPpgxByYT7z7HVBEPsrUpjLWdX6TQm4pHNJydsC34FRvVYyBAedgLhWPPGPvU6UBJww3aNxQnJS95ZvKDBuNr5CNTtAgh6EgsattRrZtawHfjphVs82UWZZFq3JUeGwGdTs88XWu6ejaPYZknnD94W7pU6Ds8vJHGhAnBw9FtkrAgjp4UFZN2Yg9KJFSrTfFA6dUsp2dPVN6VzVfpqJzGrxbFBjWQAp4zK5TXhJaN4zDr....
在我手动删除新行符号后,它给出了成功消息:
Activated service account credentials for: [project]
我可以建议使用 GCP 的 KMS(密钥管理服务)。解密 base 64 非常容易,在 KMS 下,您需要具有适当的用户角色才能相应地解密它。使用 KMS 的步骤是下面的代码片段:
KEYRING=kubernetes-secrets
KEY=generic-type-encryption-key
gcloud kms keyrings create $KEYRING --location asia-east2
gcloud kms keys create $KEY --location asia-east2 \
--keyring $KEYRING \
--purpose encryption
gcloud kms encrypt --location asia-east2 \
--keyring $KEYRING \
--key $KEY \
--plaintext-file example.txt \
--ciphertext-file encrypted.example.txt