GCP kms加密env var并通过cloudbuild.yaml将加密密钥传递给谷歌应用引擎

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCP kms加密env var并通过cloudbuild.yaml将加密密钥传递给谷歌应用引擎相关的知识,希望对你有一定的参考价值。

我正在尝试在部署到Google App Engine的RoR应用程序中加密Cloud SQL中的数据库env vars。遵循这个文档https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials

但是,运行gcloud builds submitgcloud app deploy时出错。两者都出错了:

失败状态:UNKNOWN:错误响应:[4] DEADLINE_EXCEEDED / build步骤0“gcr.io/cloud-builders/gcloud”失败:退出状态1。

然后我检查gcloud builds described显示应用程序未能部署,但是,DATABASE_PASS显示工作/排队。我已将gcloud sdk中的Cloud Build组件增加到1000并测试超时:在cloudbuild.yaml;中,这两个选项都没有改进。

在使用Cloud Build之前,我的应用程序正在运行,但我正在删除凭据和使用加密凭据进行CI / CD管道的需要。另外,想在我的app.yaml中加密多个env var。

 <cloudbuild.yaml>
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['app','deploy','app-beta.yaml']

- name: 'us.gcr.io/project_ID/image_name'
  #args: [ 'app', 'deploy', 'app-beta.yaml' ]
  secretEnv: [ "DATABASE_PASS" ]


secrets:
- kmsKeyName: projects/Project_id/locations/global/keyRings/Misc/cryptoKeys/Random
  secretEnv: 
      DATABASE_PASS:< base64 encoded encryption> 

<app.yaml> 
runtime: custom

env: flex

service: authentication

resources:
  cpu: 2
  memory_gb: 2.5
  disk_size_gb: 10

beta_settings:
  cloud_sql_instances: '/cloudsql/project_id:us-central1:sqlname'

network:
  name: default

skip_files:
  - .ruby-gemset
  - .env
  - .bundle
  - .byebug_history
  - .vscode/
  - .idea/
  - storage/
  - vendor/
  - log/
  - tmp/

#liveness_check:
#path: '/liveness-check'
#   initial_delay_sec: 300
#   check_interval_sec: 30
#   timeout_sec: 4
#   failure_threshold: 2
#   success_threshold: 2
#
# readiness_check:
#   path: '/readiness-check'
#   check_interval_sec: 5
#   timeout_sec: 4
#   failure_threshold: 2
#   success_threshold: 2
#   app_start_timeout_sec: 300

env_variables:
  SECRET_KEY_BASE: 'SECRET_KEY'
  RAILS_ENV: 'redacted'
  RACK_ENV: 'redacted'
  SERVICE_NAME: 'redacted'
  REDIS_HOST: '10.0.0.3'
  REDIS_PORT: 6379
  TOTP_SECRET: 'TOTP_SECRET'
  DATABASE_USER: 'postgres'
  DATABASE_PASS: 'DATABASE_PASS'
  DATABASE_NAME: 'postgres'
  DATABASE_HOST: '/cloudsql/project_id:us-central1:sqlname'
  RAILS_LOG_TO_STDOUT: enabled
  RAILS_SERVE_STATIC_FILES: enabled
  LANG: en_US.UTF-8
答案

我发现了问题,一个是当我使用gcloud kms加密时。我没有加密任何东西。所以传递一个空值。我会把我的解决方案放在博客上并加上它的超链接。

以上是关于GCP kms加密env var并通过cloudbuild.yaml将加密密钥传递给谷歌应用引擎的主要内容,如果未能解决你的问题,请参考以下文章

将内容上传到 GCP 存储桶的 KMS 权限出现 403 错误

使用自定义服务帐户在 GCP 中创建 VM 时,KMS 权限出现 400 错误

解密aws kms密钥时出现Nodejs异步问题

GCP 中的 KMS 和秘密管理器有啥区别?

如何在redshift中查询kms加密数据

如何使用 Python Jupyter Notebook 通过 KMS 加密从 S3 读取文件