如何在Terraform中通过角色名前缀获取AWS IAM角色ARN?
基于角色名前缀获取AWS IAM角色ARN的Terraform实现
你当前使用的aws_iam_role数据源要求精确匹配角色名,无法直接通过前缀筛选目标角色。要实现按前缀获取角色ARN,可以借助aws_iam_roles数据源先拉取指定范围内的所有角色,再通过前缀过滤出目标对象,具体代码如下:
# 拉取SSO角色所在路径下的所有IAM角色(路径格式通常为/aws-reserved/sso.amazonaws.com/[区域]/,按需替换区域) data "aws_iam_roles" "admin_sso_roles" { path_prefix = "/aws-reserved/sso.amazonaws.com/eu-west-1/" } # 过滤出名称以AWSReservedSSO_AdministratorAccess开头的角色 locals { target_admin_role = [ for role in data.aws_iam_roles.admin_sso_roles.roles : role if startswith(role.name, "AWSReservedSSO_AdministratorAccess") ] } # 输出目标角色的ARN(假设每个账号仅存在一个符合前缀的角色,直接取第一个结果) output "role_arn" { value = local.target_admin_role[0].arn }
注意事项:
- 确保Terraform使用的AWS身份拥有
iam:ListRoles权限,否则无法拉取角色列表 - 如果不确定角色的路径前缀,可以删除
path_prefix参数,但这样会拉取账号内所有IAM角色,过滤效率会降低 - 若存在多个符合前缀的角色,需要额外处理(比如增加判断逻辑或调整过滤条件),避免索引越界问题
内容的提问来源于stack exchange,提问作者vjwilson
相关产品推荐
相关产品推荐

