将Gitlab CI变量传递给Google Cloud Secret Manager



我的gitlab CI中有一些变量,我想通过CI/CD piepeline传递给GCP secret manager

我发现了这个命令,它允许我创建一个单独的秘密:

gcloud secrets create secret-id --data-file="/path/to/file.txt"

但当涉及到多个变量时,就会变得非常复杂。

有没有办法通过gcloud command同时创建多个秘密?

解决方案1:

您可以添加自定义的shell脚本来执行此操作。

例如,对于您的GCPSecret env vars,您可以添加一个命名约定和相同的前缀:

# Your Gitlab env vars
export GCP_SECRET_ENV_NAME=secret_name
export GCP_SECRET_ENV_VALUE=secret_value

然后你可以添加这种脚本,并在所有的秘密变量上添加foreach:

#!/usr/bin/env bash
set -e
set -o pipefail
set -u
# Simulate your Gitlab secrets
export GCP_SECRET_ENV_NAME=secret_name
export GCP_SECRET_ENV_VALUE=secret_value
for var_name in "${!GCP_SECRET@}"; do
echo "##### var name"
echo $var_name
echo "##### var value"
echo "${!var_name}"
gcloud secrets create $var_name --data-file="${!var_name}"
done
  • 这个脚本从GCP_SECRET开始循环所有的秘密
  • 然后您可以访问env-var的键和值
  • 您可以在每个秘密变量上执行gcloud命令

解决方案2:

您还可以考虑Gitlab中的File类型变量:https://docs.gitlab.com/ee/ci/variables/#cicd-可变类型

来自文件:

Use File type CI/CD variables for tools that need a file as input.
File type variables:
Consist of a key, value and file.
Are made available in jobs as environment variables, with
The CI/CD variable key as the environment variable name.
The CI/CD variable value saved to a temporary file.
The path to the temporary file as the environment variable value.

解决方案3:

  • 使用类似Terraform的infra as code工具在Secret manager中直接创建没有版本(值(的机密
  • Secret manager中手动添加版本(值(

此解决方案对机密版本的自动化程度较低,但更安全,因为我们不在GitlabTerraformtfstate或其他位置设置机密和敏感值。

最新更新