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

含多主体与条件的AWS角色信任策略正确性及文档咨询

问题解答

你当前生成的信任策略不正确,会导致AWS Backup服务无法正常扮演该角色,原因如下:

IAM策略的单个Statement内,所有配置项(Principal、Action、Condition)是逻辑与的关系——即该Statement下的所有Principal都必须满足Condition的要求才能匹配规则。你的策略把AWS账户根用户和Backup服务放在同一个Statement中并附加了sts:ExternalId条件,这意味着Backup服务尝试调用sts:AssumeRole时也必须提供指定的ExternalId,但AWS服务本身无法传入自定义的ExternalId参数,因此会被拒绝访问。

正确的策略写法

必须将两种需求拆分为两个独立的Statement,分别定义规则:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountAccessWithExternalId",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::444555666:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "444-555-666-777-888"
                }
            }
        },
        {
            "Sid": "AllowAWSBackupServiceAccess",
            "Effect": "Allow",
            "Principal": {
                "Service": "backup.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

对应的Terraform HCL代码示例:

resource "aws_iam_role" "target_role" {
  name = "cross-account-backup-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Sid       = "AllowCrossAccountAccessWithExternalId"
        Effect    = "Allow"
        Principal = {
          AWS = "arn:aws:iam::444555666:root"
        }
        Action = "sts:AssumeRole"
        Condition = {
          StringEquals = {
            "sts:ExternalId" = "444-555-666-777-888"
          }
        }
      },
      {
        Sid       = "AllowAWSBackupServiceAccess"
        Effect    = "Allow"
        Principal = {
          Service = "backup.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })
}

AWS策略逻辑说明

IAM采用基于语句的评估机制:

  • 每个Statement是独立的判断单元,只要有一个Statement的Effect为Allow且所有匹配条件都满足,请求就会被允许;仅当所有Statement都不匹配,或匹配的都是Deny时,请求才会被拒绝。
  • 单个Statement内部的所有元素(Principal、Action、Condition等)是逻辑与的关系,必须全部满足才能触发该Statement的规则。

内容的提问来源于stack exchange,提问作者user2728349

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:24:32