如何为带随机后缀的IAM角色配置精准STS AssumeRole信任策略?
解决AWS IAM信任策略无法通过通配符指定Principal的问题
问题概述
需要允许hi-role1-、hi-role2-前缀且带随机后缀的IAM角色,通过STS AssumeRole访问hi-role3角色,但AWS不允许在Principal字段中使用通配符,当前宽松配置允许同账号所有角色访问,需收紧权限范围。
可行解决方案
方案1:利用IAM条件键匹配ARN前缀
AWS IAM条件支持通配符,可通过aws:PrincipalArn结合StringLike条件,限定仅匹配指定前缀的角色ARN能执行AssumeRole操作。修正后的信任策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowTrustedRolesToAssume", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:PrincipalAccount": "12345" }, "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::12345:role/hi-role1-*", "arn:aws:iam::12345:role/hi-role2-*" ] } } } ] }
注意:需修正ARN格式为标准写法(arn:aws:iam::账号ID:role/角色名,原配置中多了一个无效斜杠)。
方案2:通过IAM标签筛选可信角色
给所有hi-role1-、hi-role2-前缀的角色添加统一标签(例如TrustedRole: yes),然后在信任策略中通过标签匹配限定访问:
- 给目标角色添加标签(Terraform示例):
resource "aws_iam_role" "hi_role1" { name = "hi-role1-${random_string.suffix.result}" # 其他角色配置... tags = { TrustedRole = "yes" } }
- 更新
hi-role3的信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowTaggedRolesToAssume", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:PrincipalAccount": "12345", "aws:PrincipalTag/TrustedRole": "yes" } } } ] }
方案3:部署时动态维护信任策略
由于角色通过Terraform和Spinnaker部署,可在部署流程中自动将新创建的hi-role1-、hi-role2-角色ARN添加到hi-role3的信任策略中:
- Terraform实现示例:
# 定义允许的角色ARN列表 variable "trusted_role_arns" { type = list(string) default = [] } resource "aws_iam_role" "hi_role3" { name = "hi-role3" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Sid = "AllowDynamicTrustedRoles" Effect = "Allow" Principal = { AWS = var.trusted_role_arns } Action = "sts:AssumeRole" } ] }) }
在部署hi-role1/hi-role2系列角色时,将它们的ARN传入trusted_role_arns变量,即可实现动态更新信任列表。
内容的提问来源于stack exchange,提问作者NetwrkNewbie
相关产品推荐
相关产品推荐

