使用 InSpec 和远程状态在分布式环境中处理 Terraform 提供者凭证
Handling Terraform provider credentials in distributed environment with InSpec and remote state
在这些用例中,是否有人对如何处理 AWS 的 Terraform 提供商凭据有任何绝妙的想法:
- 具有独立 AWS 账户的分布式环境 (prod/pre/qa/test/dev)
- 单个 AWS 账户中所有环境的 S3 后端远程状态
- 使用 InSpec 测试厨房。
我当前的工作流程需要根据操作更改 AWS_ACCESS_KEY
和 AWS_SECRET_KEY
:
terraform init
- 需要访问 S3 后端远程状态
terraform plan/apply
- 需要访问特定环境+远程状态
- 无法正常工作(一组凭据无法同时访问环境和远程状态)
kitchen converge
- 需要访问测试环境+远程状态
- 无法正常工作(同上原因)
kitchen verify
- 需要访问测试环境。
想法
- 我希望我可以将 S3 远程状态存储在各自的环境帐户中,但 Terraform
backend
配置中似乎不支持变量。
您将需要主账户能够承担每个环境账户的角色来执行更改,而远程主账户将保留所有状态。这是使用 terraform worspaces 的好方法假设你有两个工作区,prod 和 dev,你可以尝试这样的事情:
variable "workspace_roles" {
default = {
dev = "arn:aws:iam::<dev account id>:role/terra_role"
prod = "arn:aws:iam::<prodaccount id>:role/terra_role"
}
}
provider "aws" {
assume_role = var.workspace_roles[terraform.workspace]
}
在这些用例中,是否有人对如何处理 AWS 的 Terraform 提供商凭据有任何绝妙的想法:
- 具有独立 AWS 账户的分布式环境 (prod/pre/qa/test/dev)
- 单个 AWS 账户中所有环境的 S3 后端远程状态
- 使用 InSpec 测试厨房。
我当前的工作流程需要根据操作更改 AWS_ACCESS_KEY
和 AWS_SECRET_KEY
:
terraform init
- 需要访问 S3 后端远程状态terraform plan/apply
- 需要访问特定环境+远程状态- 无法正常工作(一组凭据无法同时访问环境和远程状态)
kitchen converge
- 需要访问测试环境+远程状态- 无法正常工作(同上原因)
kitchen verify
- 需要访问测试环境。
想法
- 我希望我可以将 S3 远程状态存储在各自的环境帐户中,但 Terraform
backend
配置中似乎不支持变量。
您将需要主账户能够承担每个环境账户的角色来执行更改,而远程主账户将保留所有状态。这是使用 terraform worspaces 的好方法假设你有两个工作区,prod 和 dev,你可以尝试这样的事情:
variable "workspace_roles" {
default = {
dev = "arn:aws:iam::<dev account id>:role/terra_role"
prod = "arn:aws:iam::<prodaccount id>:role/terra_role"
}
}
provider "aws" {
assume_role = var.workspace_roles[terraform.workspace]
}