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

STS凭证调用Sagemaker InvokeEndpoint失败,IAM凭证正常可用

STS凭证调用Sagemaker端点权限错误排查

问题描述

使用STS生成的凭证调用Sagemaker端点时,收到如下权限错误:

botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the InvokeEndpoint operation: User: arn:aws:sts::{REDACTED_AWS_ACCOUNT_ID}:federated-user/{REDACTED_USER_SUFFIX} is not authorized to perform: sagemaker:InvokeEndpoint on resource: arn:aws:sagemaker:us-west-2:{REDACTED_AWS_ACCOUNT_ID}:endpoint/{REDACTED_ENDPOINT} because no identity-based policy allows the sagemaker:InvokeEndpoint action

但使用同一权限策略的IAM凭证调用该端点却正常。相关配置如下:

权限策略

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:InvokeEndpoint"
      ],
      "Resource": [
        "arn:${ .aws_partition }:sagemaker:${ .aws_region }:${ .aws_account_id }:endpoint/${ .endpoint }",
      ]
    }
  ]
}

STS角色信任关系

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

当前使用Vault代理生成STS凭证,此前其他AWS服务使用同类方式生成的凭证正常。


核心原因与解决方法

1. 角色信任关系配置错误(最可能原因)

你当前角色的信任关系仅授权Sagemaker服务本身(sagemaker.amazonaws.com)扮演该角色,这是给Sagemaker内部作业(如训练、批量转换)使用的服务角色,并非给外部身份(如Vault、你的用户身份)Assume的角色。

当通过Vault生成STS凭证时,本质是Vault代表你的身份调用sts:AssumeRole,但该角色的信任关系未允许Vault或源身份执行此操作——导致生成的STS凭证对应的federated-user身份并未关联到带InvokeEndpoint权限的角色,自然触发权限错误。

修正方案

修改角色信任关系,添加允许Vault或源身份Assume的规则。例如,如果Vault通过特定IAM角色发起请求,将该角色ARN加入Principal:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::${你的AWS账号ID}:role/Vault使用的IAM角色名"
            },
            "Action": "sts:AssumeRole"
        },
        // 若需保留给Sagemaker服务使用,可保留原有规则
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

2. 策略变量未正确解析

权限策略中的${ .aws_partition }、${ .aws_region }等变量,需确认在生成STS凭证时是否被正确替换为实际值(如aws、us-west-2)。若变量未解析,策略中的Resource会是无效ARN,导致权限匹配失败。

而IAM用户使用时变量能正常生效,可能是因为IAM策略与STS角色策略的变量解析逻辑不同,或Vault生成凭证时未处理这些变量。

验证方法

临时使用硬编码ARN的策略测试:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sagemaker:InvokeEndpoint",
      "Resource": "arn:aws:sagemaker:us-west-2:你的AWS账号ID:endpoint/你的端点名称"
    }
  ]
}

若硬编码后STS凭证可正常调用,说明是变量替换问题。

3. STS凭证未正确关联目标角色

需确认生成STS凭证时,是否成功Assume了带InvokeEndpoint权限的角色。可调用sts:GetCallerIdentity查看凭证对应的身份信息:

  • 若返回的是arn:aws:sts::xxx:assumed-role/目标角色名/xxx,说明角色关联正常;
  • 若仅返回federated-user,说明未成功Assume目标角色,需检查Vault的STS生成配置是否正确指定了目标角色ARN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:02:53