跨账户角色访问权限问题及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所在账户操作)
- 登录角色A所属的外部账户IAM控制台,找到角色A。
- 在权限策略中添加允许访问你原账户资源的语句,同时原账户的对应资源需要配置资源策略,允许角色A访问。
- 方式1:不切换角色,使用临时凭证访问跨账户资源
二、跨账户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
相关产品推荐
相关产品推荐

