【问题标题】:GitHub Actions for Terraform - How to provide "terraform.tfvars" file with aws credentialsTerraform 的 GitHub Actions - 如何为“terraform.tfvars”文件提供 aws 凭据
【发布时间】:2020-03-12 14:53:33
【问题描述】:
我正在尝试设置 GitHub Actions 以执行 terraform 模板。
我的困惑是 - 我如何提供具有 aws 凭据的 *.tfvars 文件。 (我无法签入这些文件)。
在需要 aws_access_key 和 aws_secret_key 的地方共享 terraform 命令(如 plan 或 apply)所期望的变量值的最佳做法是什么。
这是我的 GitHub 项目 - https://github.com/samtiku/terraform-ec2
这里有任何指导...
【问题讨论】:
标签:
terraform
terraform-provider-aws
github-actions
【解决方案1】:
您不需要通过 *.tfvars 文件提供所有变量。除了-var-file 选项,terraform 命令还提供了-var 参数,您可以使用它来传递秘密。
一般来说,秘密是通过环境变量传递给脚本的。 CI 工具为您提供了在项目配置中定义环境变量的选项。这是一个手动步骤,因为您已经注意到,机密不能存储在存储库中。
我没有特别使用 Github Actions,但是在设置环境变量之后,你需要做的就是运行 terraform 并从中读取秘密:
$ terraform -var-file=some.tfvars -var "aws-secret=${AWS_SECRET_ENVIRONMENT_VARIABLE}
这样,存储库代码中就不会存储任何秘密。如果你想在本地运行 terraform,你首先需要在你的 shell 中导出这些变量:
$ export AWS_SECRET_ENVIRONMENT_VARIABLE="..."
【解决方案2】:
虽然 Terraform 允许通过其配置参数向某些提供者提供凭据,以便在复杂情况下保持灵活性,但推荐的将凭据传递给提供者的方法是通过相关供应商的标准方法。
特别是对于 AWS,主要的标准机制是 a credentials file 或通过 environment variables。如果您将操作配置为遵循这些指南之一中的描述,则 Terraform 的 AWS 提供商将自动查找这些凭证并以与 AWS CLI 相同的方式使用它们。
听起来环境变量将是在 GitHub 操作中更简单的方法,在这种情况下,您可以直接设置必要的环境变量,AWS 提供商应该会自动使用它们。如果您使用的是 S3 状态存储后端,那么它也会自动使用标准 AWS 环境变量。
如果您的系统包含多个 AWS 账户,那么您可能希望查看 Terraform 文档指南 Multi-account AWS Architecture,了解有关如何对其建模的一些想法。该指南建议的摘要是为您的 AWS 用户及其关联凭证预留一个特殊账户仅,然后将您的其他账户配置为允许通过角色进行跨账户访问,然后您可以使用一组凭证来运行 Terraform,但配置 AWS 提供者的每个实例以承担提供者实例应与之交互的任何帐户的适当角色。