如何为IAM角色绑定AWS托管策略并通过Terragrunt实现多环境配置
改造实现方案
1. 新增Terraform模块输入变量
在你Terraform模块根目录的variables.tf文件中新增如下变量定义:
variable "iam_managed_policy_arn" { type = string description = "AWS托管IAM策略的ARN,绑定到GitHub Actions角色" }
如果后续需要同时绑定多个托管策略,可将变量类型调整为list(string)。
2. 替换原有IAM策略绑定资源
修改main.tf文件,删除原有的aws_iam_role_policy.GitHubActions资源块,新增托管策略绑定资源:
resource "aws_iam_role" "GitHubActions" { name = var.GithubAction_role assume_role_policy = <<EOF { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRoleWithWebIdentity", "Principal":{ "Federated": "${aws_iam_openid_connect_provider.github_oidc_github_actions.arn}" } } EOF } # 新增托管策略绑定资源,替换原内联策略 resource "aws_iam_role_policy_attachment" "github_actions_managed_policy" { role = aws_iam_role.GitHubActions.name policy_arn = var.iam_managed_policy_arn }
如果使用多策略的列表变量,只需给该资源加上for_each = toset(var.iam_managed_policy_arn),并将policy_arn改为each.value即可。
3. 分环境配置Terragrunt输入参数
开发环境terragrunt.hcl配置
在开发环境的terragrunt.hcl的inputs块中传入AdministratorAccess的ARN:
terraform { source = "../module/vpc" } include { path = find_in_parent_folders() } inputs = { # 保留其他原有输入参数 iam_managed_policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess" # 若使用AWS中国区,ARN前缀改为arn:aws-cn:iam::aws:policy/... }
测试环境terragrunt.hcl配置
在测试环境的terragrunt.hcl的inputs块中传入AmazonEC2FullAccess的ARN:
terraform { source = "../module/vpc" } include { path = find_in_parent_folders() } inputs = { # 保留其他原有输入参数 iam_managed_policy_arn = "arn:aws:iam::aws:policy/AmazonEC2FullAccess" # 若使用AWS中国区,ARN前缀改为arn:aws-cn:iam::aws:policy/... }
改造完成后执行terragrunt plan验证变更,预期会销毁原有的内联IAM策略,同时为角色绑定对应环境的托管策略,无其他变更即可正常apply。
内容的提问来源于stack exchange,提问作者bibi
相关产品推荐
相关产品推荐

