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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:20