Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在gitlab中存储API令牌的安全方法_Gitlab_Terraform - Fatal编程技术网

在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
变量.tf

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应该从工作区中获取它。