在gitlab中存储API令牌的安全方法
我正在从事这个小型的在gitlab中存储API令牌的安全方法,gitlab,terraform,Gitlab,Terraform,我正在从事这个小型的terraform项目,该项目使用gcp(谷歌云平台)token.json,其中包含用于创建资源的安全凭据 Terraform文件由Gitlab CI/CD执行 我关心的是,下面的terraform文件(main.tf)使用了这个token.json # Configure the backend terraform { backend "gcs" { bucket = "tf_backend_gcp_banuka_jana
terraform
项目,该项目使用gcp
(谷歌云平台)token.json
,其中包含用于创建资源的安全凭据
Terraform文件由Gitlab CI/CD执行
我关心的是,下面的terraform
文件(main.tf)使用了这个token.json
# Configure the backend
terraform {
backend "gcs" {
bucket = "tf_backend_gcp_banuka_jana_jayarathna_k8s"
prefix = "terraform/gcp/boilerplate"
credentials = "./token.json" ----> file I need to keep securely
}
}
此token.json
与上面的main.tf
文件一起位于根文件夹中
这个文件是该文件所必需的,我想不出任何其他方法来存储它。此令牌甚至不能放入gitlab
变量,因为管道运行时无法将令牌的值传递到此main.tf
文件
我不想把token.json
也公开给公众。有没有办法在Gitlab中实现这一点?
甚至不能使用像git crypt
这样的工具,因为这样我怎么才能解密这个token.json
,并将它提供给main.tf
有没有办法将变量注入terraform
文件
谢谢- 将令牌作为变量存储在GitLab中(设置->CI/CD->变量),确保启用屏蔽
- 在terraform清单中为令牌定义一个变量
- 运行apply时,将令牌变量提供给terraform
variable "gce_token" {
type = string
}
main.tf
terraform {
backend "gcs" {
bucket = "tf_backend_gcp_banuka_jana_jayarathna_k8s"
prefix = "terraform/gcp/boilerplate"
credentials = var.gce_token
}
}
.gitlab-ci.yml
terraform apply -var="gce_token=$GCE_TOKEN"
您可以对文件进行base64编码并将其放入GitLab CI变量中
cat token.json | base64
然后,您可以在运行terraform apply之前对其进行解码并创建文件
terraform-apply:
stage: deploy
script:
- echo $GCE_TOKEN | base64 -d > token.json
- terraform apply
过了一会儿,当我在做同样的事情时,我遇到了同样的问题,我找到了解决办法 我们可以将
AWS
access key
和secret key
放在Gitlab
CI变量中,我们可以在terraform init
或terraform apply
或任何terraform命令之前导出它们:
before_script:
- export AWS_ACCESS_KEY_ID=${access_key}
- export AWS_SECRET_ACCESS_KEY=${secrect_key}
你的方法很好,但是terraform不允许为
后端使用变量。我忘记了这一点,发布了另一个我认为可行的解决方案。那么,我如何将这个解码的令牌集成到terraform
中的后端配置?我用一个GitLab CI片段更新了我的帖子。您的后端已经指向文件token.json,因此terraform应该从工作区中获取它。