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

如何为带随机后缀的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),然后在信任策略中通过标签匹配限定访问:

  1. 给目标角色添加标签(Terraform示例):
resource "aws_iam_role" "hi_role1" {
  name = "hi-role1-${random_string.suffix.result}"
  # 其他角色配置...
  tags = {
    TrustedRole = "yes"
  }
}
  1. 更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:55:11