Google cloud platform 访问云构建yaml中的谷歌云秘密
我正试图从谷歌秘密管理器那里得到秘密。根据访问机密的文档,入口点应该是bash,但我有不同的入口点。试图找出如何在我的步骤“创建数据流模板”中获得秘密。似乎无法在步骤外部访问环境变量值Google cloud platform 访问云构建yaml中的谷歌云秘密,google-cloud-platform,google-cloud-build,google-secret-manager,cloudbuild.yaml,Google Cloud Platform,Google Cloud Build,Google Secret Manager,Cloudbuild.yaml,我正试图从谷歌秘密管理器那里得到秘密。根据访问机密的文档,入口点应该是bash,但我有不同的入口点。试图找出如何在我的步骤“创建数据流模板”中获得秘密。似乎无法在步骤外部访问环境变量值 steps: - id: 'Pull dataflow-python3 docker image & load secrets' name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest' entrypoint: 'bash'
steps:
- id: 'Pull dataflow-python3 docker image & load secrets'
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'bash'
args:
- '-c'
- |
git rev-parse --short HEAD > COMMIT_ID
commitId=$(cat COMMIT_ID)
echo "Project Id is $PROJECT_ID"
echo "Commit SHA is $COMMIT_SHA"
echo "Commit Id is ${commitId}"
echo "Secret key 'TEST' has value '$$TEST'"
secretEnv: ['TEST']
- id: "Activate virtual environment venv"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: '/bin/bash'
args: [ '-c', 'source /venv/bin/activate' ]
waitFor: ['-']
- id: "Create dataflow template"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'python'
args:
- -m
- main
- --job_name=test-df
- --project=$PROJECT_ID
- --region=us-east1
- --template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template
- --staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/
- --temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/
- --runner=DataflowRunner
- --setup_file='./setup.py'
- --autoscaling_algorithm=NONE
- --DUMMY=$$TEST
secretEnv: ['TEST']
waitFor: [
'Pull dataflow-python3 docker image & load secrets',
'Activate virtual environment venv'
]
availableSecrets:
secretManager:
- versionName: projects/my-project/secrets/TEST/versions/latest
env: 'TEST'
在数据流管道中传递的值
秘密值:
生成日志1:
生成日志2:
我在不同的配置中进行了测试,其行为与云内构建“一致”。事实上,您不能像替换变量那样使用
env
或secretnv
env
和secretnv
仅在命令的执行上下文中可用,而不在命令的配置中可用
这意味着:
- 如果运行使用环境变量的应用程序或脚本,则
和env
可以工作secretnv
- 如果在步骤的参数中使用
或env
,则该选项无效secretnv
但这很微妙 下面是执行BASH命令->工作的上下文
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "bash"
args:
- -c
- echo $$TEST
secretEnv: ['TEST']
这里是步骤echo->不工作的参数
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "echo"
args:
- $$TEST
secretEnv: ['TEST']
所以,要解决您的问题,请这样做
- id: "Create dataflow template"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'bash'
args:
- -c
- python main \
--job_name=test-df \
--project=$PROJECT_ID \
--region=us-east1 \
--template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
--staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
--temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
--runner=DataflowRunner \
--setup_file='./setup.py' \
--autoscaling_algorithm=NONE \
--DUMMY=$$TEST
secretEnv: ['TEST']
waitFor: [
'Pull dataflow-python3 docker image & load secrets',
'Activate virtual environment venv'
]
我在不同的配置中进行了测试,其行为与云中构建“一致”。事实上,您不能像替换变量那样使用
env
或secretnv
env
和secretnv
仅在命令的执行上下文中可用,而不在命令的配置中可用
这意味着:
- 如果运行使用环境变量的应用程序或脚本,则
和env
可以工作secretnv
- 如果在步骤的参数中使用
或env
,则该选项无效secretnv
但这很微妙 下面是执行BASH命令->工作的上下文
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "bash"
args:
- -c
- echo $$TEST
secretEnv: ['TEST']
这里是步骤echo->不工作的参数
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "echo"
args:
- $$TEST
secretEnv: ['TEST']
所以,要解决您的问题,请这样做
- id: "Create dataflow template"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'bash'
args:
- -c
- python main \
--job_name=test-df \
--project=$PROJECT_ID \
--region=us-east1 \
--template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
--staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
--temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
--runner=DataflowRunner \
--setup_file='./setup.py' \
--autoscaling_algorithm=NONE \
--DUMMY=$$TEST
secretEnv: ['TEST']
waitFor: [
'Pull dataflow-python3 docker image & load secrets',
'Activate virtual environment venv'
]
@guillaume blaquiere提供的代码可以工作,但问题的根本原因是
入口点
,如中所述:
在要指定密码的生成步骤中:
- 添加一个指向bash的入口点字段以在构建步骤中使用bash工具这是引用环境变量获取机密所必需的。
- 添加指定环境变量的secretNV字段
- 在args字段中,添加-c标志作为第一个参数在-c之后传递的任何字符串都被视为命令。有关使用-c运行bash命令的更多信息,请参阅bash文档
- 在args字段中指定机密时,请使用前缀为$$的环境变量指定它
entrypoint: 'python'
args:
- -m
entrypoint
不是bash
,并且第一个参数没有设置标志-c
纪尧姆的例子也是如此:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "echo"
args:
- $$TEST
secretEnv: ['TEST']
入口点不是bash
,但在他的第一个示例中是
另一方面,在提供的解决方案中,入口点是bash
,第一个参数是标志-c
,因此这将起作用:
- id: "Create dataflow template"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'bash'
args:
- -c
- python main \
--job_name=test-df \
--project=$PROJECT_ID \
--region=us-east1 \
--template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
--staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
--temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
--runner=DataflowRunner \
--setup_file='./setup.py' \
--autoscaling_algorithm=NONE \
--DUMMY=$$TEST
secretEnv: ['TEST']
waitFor: [
'Pull dataflow-python3 docker image & load secrets',
'Activate virtual environment venv'
]
解决方案是准确的,但原因是
入口点和第一个标志-c由@guillaume blaquiere提供的代码可以工作,但问题的根本原因是入口点,如中所述:
在要指定密码的生成步骤中:
- 添加一个指向bash的入口点字段以在构建步骤中使用bash工具这是引用环境变量获取机密所必需的。
- 添加指定环境变量的secretNV字段
- 在args字段中,添加-c标志作为第一个参数在-c之后传递的任何字符串都被视为命令。有关使用-c运行bash命令的更多信息,请参阅bash文档
- 在args字段中指定机密时,请使用前缀为$$的环境变量指定它
在您的示例中,您使用:
entrypoint: 'python'
args:
- -m
entrypoint
不是bash
,并且第一个参数没有设置标志-c
纪尧姆的例子也是如此:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: "echo"
args:
- $$TEST
secretEnv: ['TEST']
入口点不是bash
,但在他的第一个示例中是
另一方面,在提供的解决方案中,入口点是bash
,第一个参数是标志-c
,因此这将起作用:
- id: "Create dataflow template"
name: 'gcr.io/$PROJECT_ID/dataflow-python3:latest'
entrypoint: 'bash'
args:
- -c
- python main \
--job_name=test-df \
--project=$PROJECT_ID \
--region=us-east1 \
--template_location=gs://my-project-dataflow-templates/test-alerts-template/templates/send-alert-template \
--staging_location=gs://my-project-dataflow-templates/test-alerts-template/staging/ \
--temp_location=gs://my-project-dataflow-templates/test-alerts-template/temp/ \
--runner=DataflowRunner \
--setup_file='./setup.py' \
--autoscaling_algorithm=NONE \
--DUMMY=$$TEST
secretEnv: ['TEST']
waitFor: [
'Pull dataflow-python3 docker image & load secrets',
'Activate virtual environment venv'
]
解决方案是准确的,但原因是入口点
和第一个标志-c
是否有错误?@sethvargo我没有收到错误,传递到管道的值为“$TEST”。添加了屏幕快照,您期望有什么价值?您是否检查了存储在SecretManager中的值?(好吧,这是一个愚蠢的问题,但请仔细检查!)@guillaume blaquiere添加了屏幕截图$$
是否“转义”第一个美元您是否收到错误?@sethvargo我没有收到错误,传递到管道的值是“$TEST”。添加了屏幕快照,您期望有什么价值?您是否检查了存储在SecretManager中的值?(好吧,这是一个愚蠢的问题,但请仔细检查!)纪尧姆·布拉奎尔添加了屏幕截图$
是否“逃离”了第一块钱