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

跨账户角色访问权限问题及Cross-account pass role异常排查

问题解决方案

一、切换跨账户角色后无法访问当前账户资源,目标角色不在IAM控制台显示

  • 跨账户角色A属于授权你的外部账户(而非你当前登录的账户),所以你当前账户的IAM控制台无法找到该角色,这是正常现象。
  • 切换跨账户角色后,会话权限完全由该角色的权限策略控制,默认无法访问原账户资源,解决方式:
    • 方式1:不切换角色,使用临时凭证访问跨账户资源
      用AWS CLI执行aws sts assume-role获取角色A的临时凭证,在需要访问跨账户资源的命令中通过--profile指定临时凭证配置,原会话保持原账户权限。
      示例CLI命令:
      # 获取临时凭证
      aws sts assume-role --role-arn arn:aws:iam::外部账户ID:role/角色A --role-session-name cross-account-session > temp-creds.json
      # 配置临时profile
      aws configure set aws_access_key_id $(jq -r '.Credentials.AccessKeyId' temp-creds.json) --profile cross-account
      aws configure set aws_secret_access_key $(jq -r '.Credentials.SecretAccessKey' temp-creds.json) --profile cross-account
      aws configure set aws_session_token $(jq -r '.Credentials.SessionToken' temp-creds.json) --profile cross-account
      # 使用临时profile访问跨账户资源
      aws kinesis describe-stream-summary --stream-name 外部账户数据流名 --profile cross-account
      
    • 方式2:修改跨账户角色A的权限(需登录角色A所在账户操作)
      1. 登录角色A所属的外部账户IAM控制台,找到角色A。
      2. 在权限策略中添加允许访问你原账户资源的语句,同时原账户的对应资源需要配置资源策略,允许角色A访问。

二、跨账户Firehose配置报错“Cross-account pass role is not allowed”

这个错误是因为Firehose需要的角色不符合跨账户权限传递规则,按以下步骤修复:

1. 在账户B创建Firehose专用角色

  • 信任策略需允许Firehose服务扮演该角色:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "firehose.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 权限策略需包含访问账户A Kinesis和写入账户B S3的权限:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kinesis:DescribeStreamSummary",
            "kinesis:GetShardIterator",
            "kinesis:GetRecords"
          ],
          "Resource": "arn:aws:kinesis:区域:账户A-ID:stream/你的数据流名称"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
          ],
          "Resource": "arn:aws:s3:::账户B-S3桶名/*"
        }
      ]
    }
    

2. 给账户A的Kinesis数据流添加资源策略

允许账户B的Firehose角色访问数据流:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::账户B-ID:role/Firehose专用角色名"
      },
      "Action": [
        "kinesis:DescribeStreamSummary",
        "kinesis:GetShardIterator",
        "kinesis:GetRecords"
      ],
      "Resource": "arn:aws:kinesis:区域:账户A-ID:stream/你的数据流名称"
    }
  ]
}

3. 确保执行CLI的账户B用户/角色有PassRole权限

添加权限策略,允许将Firehose专用角色传递给Firehose服务:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::账户B-ID:role/Firehose专用角色名",
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "firehose.amazonaws.com"
        }
      }
    }
  ]
}

4. 检查账户B的SCP和权限边界

确保账户B的服务控制策略(SCP)没有阻止iam:PassRole操作,同时Firehose专用角色没有设置限制权限的权限边界。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:32