You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:01