AWS Glue跨账号访问RDS Postgres角色配置问题求助
解决AWS Glue作业跨账号AssumeRole失败问题
排查与修复步骤
1. 确认Glue执行角色的权限策略有效性
- 检查权限策略中
sts:AssumeRole的资源是否是目标账号数据库角色的完整ARN,格式必须为arn:aws:iam::目标账号ID:role/角色名 - 用IAM控制台的策略模拟器验证:模拟Glue执行角色执行
sts:AssumeRole动作,指定目标角色ARN,确认无权限拒绝。同时排查是否有冲突的Deny策略。
2. 验证目标数据库角色的信任关系
- 目标角色的信任策略必须明确允许Glue执行角色进行assume,示例片段:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Glue所在账号ID:role/Glue执行角色名" }, "Action": "sts:AssumeRole" } ] }
- 若目标角色是账号级信任,需确认Glue所在账号未被排除,且无
Condition限制(如IP、标签等)。
3. 检查Glue作业的角色配置
- 确认Glue作业控制台中已选中正确的执行角色,避免误选其他角色。
- 确认Glue执行角色的信任关系包含
glue.amazonaws.com,确保Glue服务能承担该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 修正脚本中AssumeRole的调用逻辑
- 确保脚本中
sts.assume_role()的RoleArn是目标角色完整ARN,RoleSessionName符合规则(2-64字符,无特殊符号)。示例Python代码:
import boto3 sts_client = boto3.client('sts') response = sts_client.assume_role( RoleArn='arn:aws:iam::目标账号ID:role/数据库角色名', RoleSessionName='GlueCrossAccountSession' ) # 用临时凭证访问RDS postgres_client = boto3.client( 'rds', aws_access_key_id=response['Credentials']['AccessKeyId'], aws_secret_access_key=response['Credentials']['SecretAccessKey'], aws_session_token=response['Credentials']['SessionToken'] )
- 不要硬编码凭证,依赖Glue执行角色的默认凭证链即可。
5. 排查权限边界与SCP限制
- 检查Glue执行角色是否设置了权限边界,需确保边界包含
sts:AssumeRole动作和目标角色ARN。 - 检查账号级服务控制策略(SCP),确认未拒绝
sts:AssumeRole动作或限制目标角色范围。
6. 等待IAM策略生效
- IAM策略变更可能有5-10分钟延迟,若刚修改完策略,等待后再测试Glue作业。
内容的提问来源于stack exchange,提问作者Kassu25
相关产品推荐
相关产品推荐

