Amazon web services 试图将地形国家集中起来,并将角色和政策弄得非常混乱
我有8个AWS账户,我正在迁移到terraform'd。将现有资源导入状态文件、完成定义直到计划为空的缓慢过程。长篇大论,但这是一个有效的过程 推荐的做法之一是将状态文件保留在回购之外,因此我将状态保存在S3中(使用DynamoDB中的锁) 在本地,通过为所有帐户设置我的Amazon web services 试图将地形国家集中起来,并将角色和政策弄得非常混乱,amazon-web-services,terraform,terraform-provider-aws,Amazon Web Services,Terraform,Terraform Provider Aws,我有8个AWS账户,我正在迁移到terraform'd。将现有资源导入状态文件、完成定义直到计划为空的缓慢过程。长篇大论,但这是一个有效的过程 推荐的做法之一是将状态文件保留在回购之外,因此我将状态保存在S3中(使用DynamoDB中的锁) 在本地,通过为所有帐户设置我的~/.aws/credentials文件,我可以在本地运行terraform,所有状态都进入bucket。但这是因为我在backend.tf文件中使用了profile=“management” 我想将地形形成转移到我们的管道中,
~/.aws/credentials
文件,我可以在本地运行terraform,所有状态都进入bucket。但这是因为我在backend.tf文件中使用了profile=“management”
我想将地形形成转移到我们的管道中,所以有多个共享凭证浮动不是很好。我们可以提供AWS_ACCESS_KEY、AWS_SECRET_ACCESS_KEY和AWS_DEFAULT_REGION作为管道中的环境变量。对于管理帐户,这很好,因此我们现在有管道来进行部署,我们很高兴
我们不能使用多个环境变量,因为Terraform不允许在后端定义中使用任何变量
因此,我正在尝试解决如何“共享”对状态文件的访问并锁定
我认为(我可能错了),但管理账户中存在的“地形化角色”的想法似乎是一种明智的做法,它允许指定用户承担该角色并与国家互动。但我不明白
所以,你能不能回顾一下我的情况,给我指出正确的方向,或者,请帮我解决这个问题
因此,management state.tf文件是(S3 bucket和DynamoDB表资源被截断)
有了这个,我的AWS管理控制台显示了这个角色,一切看起来都很好。它显示了策略验证满意的策略。它显示受信任的帐户
一切看起来都很好
因此,现在转到devops帐户(运行我们的管道和其他非生产任务)
正在工作的backend.tf(使用~/.aws/credentials
中的共享凭据)如下所示
terraform {
backend "s3" {
bucket = "management-state-bucket"
acl = "private"
encrypt = true
region = "eu-west-1"
dynamodb_table = "terraform_locks"
key = "devops.tfstate"
profile = "management"
}
因此,为了让它像在管道中一样工作,我隐藏了管理和devops帐户的~/.aws/credentials
条目,并使用envvarsaws\u ACCESS\u KEY=akain。。。AWS\u密码\u访问\u密钥=。。。AWS_DEFAULT_REGION=eu-west-1地形…
如果我还添加TF_LOG=trace
我可以看到正确的凭证提供程序正在使用中:2020/04/07 10:40:07[INFO]AWS身份验证提供程序已使用:“EnvProvider”
我已经尝试使用devops.tf中的管理凭据
access_key = "AKIAJ5..."
secret_key = "..."
这起作用了,所以现在要去掉证书
我原以为我可以为地形角色添加角色学习条目,但那不起作用
role_arn = "arn:aws:iam::5[SNIPPED]:role/Terraforming"
角色的ARN是该角色的管理控制台中显示的ARN。
该角色表示允许使用devops帐户(4xxx)。
所以我被难住了
任何帮助都将不胜感激。我的解决方案基于根帐户不能承担角色的新知识 因此,管理帐户需要一个用户(Terraformer)。此用户有一个策略,允许其担任OrganizationAccountAccessRole的devops角色,以及访问管理帐户中与状态相关的资源 此用户用于将terraform应用于非管理帐户
这对我来说简单多了。我的解决方案基于根帐户不能承担角色的新知识 因此,管理帐户需要一个用户(Terraformer)。此用户有一个策略,允许其担任OrganizationAccountAccessRole的devops角色,以及访问管理帐户中与状态相关的资源 此用户用于将terraform应用于非管理帐户 对我来说简单多了
role_arn = "arn:aws:iam::5[SNIPPED]:role/Terraforming"
2020/04/07 11:31:20 [INFO] AWS Auth provider used: "EnvProvider"
2020/04/07 11:31:20 [INFO] Attempting to AssumeRole arn:aws:iam::5[SNIPPED]:role/Terraforming (SessionName: "", ExternalId: "", Policy: "")
Error: The role "arn:aws:iam::5[SNIPPED]:role/Terraforming" cannot be assumed.
There are a number of possible causes of this - the most common are:
* The credentials used in order to assume the role are invalid
* The credentials do not have appropriate permission to assume the role
* The role ARN is not valid