我们正在与 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
谢谢, 阿米特
在模块源代码行中不能使用除 refs 之外的任何内容(如标签等)。例如,它不允许变量。
这样做的原因是在变量之前先查看模块源。如果您尝试使用 git 存储库中的子目录 - 就像它的样子,您有两个选择:
使用本地执行配置程序来克隆存储库 - 尽管我从未这样做过,并且需要进行测试以确保正确的顺序
将模块放入它自己的存储库中(正确答案)
当 Terraform 从 Git 存储库检索模块源代码时,它会直接运行
git
命令,以便能够获取您在周围环境中拥有的凭据,这通常允许您运行 git
直接进行,无需明确提供凭据。 Terraform 通常不应直接处理您的 Git 凭据。
如果您在自动化系统中运行 Terraform,那么您可能需要 配置不同的凭据存储方法以授予 Git 访问凭据的权限。
要安全地访问 Bitbucket 管道或类似 CI/CD 环境中的私有存储库,您可以使用 SSH 密钥而不是 PAT 令牌。这是一个改进的方法:
使用
ssh-keygen
生成 SSH 密钥对
将公钥添加到 Bitbucket 存储库的访问密钥中以授权访问。
将私钥安全地存储在 AWS SSM Parameter Store 或云提供商提供的等效安全存储服务中。
在 CI/CD 管道执行期间,使用 shell 命令或 CI/CD 工具的本机功能从安全存储中检索私钥。这允许您的构建环境安全地针对存储库进行身份验证,而无需在 Terraform 配置中暴露敏感令牌。 此方法可确保在自动化工作流程中安全、可扩展且干净地处理凭证,从而增强 DevOps 实践的安全性和可维护性。