Terraform 模块 - 使用 PAT 添加 git 源(作为环境变量)

问题描述 投票:0回答:3

我们正在与 BitBucket 合作,并决定将我们的模块移动到不同的存储库。 现在我想使用 PAT 来克隆存储库。

示例:

module "vpc" {
  source            = "git::ssh://git@<URL>/<Project>/<Repo>.git//bla/bla2"
  module_enabled    = var.create_vpc
  region            = var.region
  deploy_name       = var.deploy_name
  vpc_cidr          = var.vpc_cidr
  subnet_prefixes   = var.subnet_prefixes
  ssh_source_ranges = var.ssh_source_ranges
  environment       = var.environment
  subnet_names      = var.subnet_names
  //  app_names              = "${var.app_names}"
  //  natgw_private_ip       = "${module.natgw.private_ip}"
  //  nat_subnets            = "${var.nat_subnets}"
}

我需要使用环境变量将 PAT 添加到 git URL

我尝试做类似的事情:

 "git::ssh://${blabla}@<URL>/<Project>/<Repo>.git//bla/bla2"

并收到此错误: “模块源中不允许插值”

更新#1: 只是为了澄清 - 没有 PAT 变量的 URL 工作正常

更多信息: TF 版本:0.12.20

谢谢, 阿米特

bitbucket terraform
3个回答
3
投票

在模块源代码行中不能使用除 refs 之外的任何内容(如标签等)。例如,它不允许变量。

这样做的原因是在变量之前先查看模块源。如果您尝试使用 git 存储库中的子目录 - 就像它的样子,您有两个选择:

  1. 使用本地执行配置程序来克隆存储库 - 尽管我从未这样做过,并且需要进行测试以确保正确的顺序

  2. 将模块放入它自己的存储库中(正确答案)


0
投票

当 Terraform 从 Git 存储库检索模块源代码时,它会直接运行

git
命令,以便能够获取您在周围环境中拥有的凭据,这通常允许您运行
git 
直接进行,无需明确提供凭据。 Terraform 通常不应直接处理您的 Git 凭据。

如果您在自动化系统中运行 Terraform,那么您可能需要 配置不同的凭据存储方法以授予 Git 访问凭据的权限。


0
投票

要安全地访问 Bitbucket 管道或类似 CI/CD 环境中的私有存储库,您可以使用 SSH 密钥而不是 PAT 令牌。这是一个改进的方法:

  1. 使用

    ssh-keygen

    生成 SSH 密钥对
  2. 将公钥添加到 Bitbucket 存储库的访问密钥中以授权访问。

  3. 将私钥安全地存储在 AWS SSM Parameter Store 或云提供商提供的等效安全存储服务中。

  4. 在 CI/CD 管道执行期间,使用 shell 命令或 CI/CD 工具的本机功能从安全存储中检索私钥。这允许您的构建环境安全地针对存储库进行身份验证,而无需在 Terraform 配置中暴露敏感令牌。 此方法可确保在自动化工作流程中安全、可扩展且干净地处理凭证,从而增强 DevOps 实践的安全性和可维护性。

© www.soinside.com 2019 - 2024. All rights reserved.