嗨,我在一个项目的Secretmanager中有我的秘密,想知道如何将它们复制或迁移到其他项目。
有没有一种机制可以顺利完成。
根据John Hanley的评论编辑
我只需要自己处理类似的事情,并想出了一个简单的bash脚本来满足我的需求。我运行Linux。有一些先决条件:
- 下载适用于您的操作系统的gcloud cli
- 获取要迁移的机密列表(可以通过使用源项目
gcloud config set project [SOURCE_PROJECT]
设置gcloud,然后运行gcloud secrets list
来完成( - 然后,一旦你有了列表,就把它从文本上转换成格式
"secret_a" "secret_b" ...
- 每个秘密的最后一个版本都被获取,所以它不能在";被禁用";州,否则它将无法移动它
然后您可以运行:
$(gcloud config set project [SOURCE_PROJECT])
declare -a secret_array=("secret_a" "secret_b" ...)
for i in "${secret_array[@]}"
do
SECRET_NAME="${i}_env_file"
SECRET_VALUE=$(gcloud secrets versions access "latest" --secret=${SECRET_NAME})
echo $SECRET_VALUE > secret_migrate
$(gcloud secrets create ${SECRET_NAME} --project [TARGET_PROJECT] --data-file=secret_migrate)
done
rm secret_migrate
这个脚本所做的就是将项目设置为源项目,然后获取机密,并将其逐个保存到文件中,然后上传到目标项目。为每个秘密重写文件,并在最后删除。您需要用自己的数据替换机密数组(secret_array
(和项目名称([SOURCE_PROJECT]
、[TARGET_PROJECT]
(。
我在下面使用了这个版本,它还设置了一个不同的名称,并根据秘密名称进行标记:
$(gcloud config set project [SOURCE_PROJECT])
declare -a secret_array=("secret_a" "secret_b" ...)
for i in "${secret_array[@]}"
do
SECRET_NAME="${i}"
SECRET_VALUE=$(gcloud secrets versions access "latest" --secret=${SECRET_NAME})
echo $SECRET_VALUE > secret_migrate
$(gcloud secrets create ${SECRET_NAME} --project [TARGET_PROJECT] --data-file=secret_migrate --labels=environment=test,service="${i}")
done
rm secret_migrate
从今天起,GCP无法在项目之间移动Secret。
这是一个很好的功能请求,您可以在此处提交:https://b.corp.google.com/issues/new?component=784854&pli=1&模板=1380926
All"秘密";必须解密和编译才能由CPU处理,因为硬件解密对于商业用途来说是不现实的。因此,获取您的密码/配置(在纯文本中(就像登录到您的一个部署一样简单,该部署具有所谓的";秘密";(纯文本机密…(,然后键入"env"(一个用于列出大多数Linux系统上所有环境变量的命令(。
如果你的秘密是一个文本文件,只需使用程序"cat"读取该文件。我还没有找到直接从GCP读取这些工具的方法,因为";安全性";至关重要。
GCP有执行到正在运行的容器中的方法,但您也可以查看kubectl命令。我相信";普通文本";秘密在谷歌服务器上加密,然后在放入集群/吊舱时解密。