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

AWS Bedrock Python SDK调用sts:AssumeRole遇权限拒绝问题求助

问题诊断与解决步骤

1. 先处理AWS_PROFILE报错问题(推荐本地开发使用)

你遇到的ProfileNotFound是因为本地AWS配置文件(~/.aws/config或~/.aws/credentials)中没有对应名称的配置项。解决方式:

  • 终端执行aws configure --profile <自定义profile名>,按提示输入真实的Access Key、Secret Key、区域(us-east-1)等信息
  • 或手动编辑~/.aws/credentials文件添加:
[<自定义profile名>]
aws_access_key_id = 你的真实AK
aws_secret_access_key = 你的真实SK

同时编辑~/.aws/config文件添加:

[profile <自定义profile名>]
region = us-east-1
output = json

如果不想用profile,也可以直接使用IAM角色(云环境)或正确的环境变量(不推荐硬编码),但本地开发优先推荐profile方式。

2. 修复IAM角色的信任关系与权限问题

当前核心错误是IAM用户无权限Assume目标角色,同时角色的受信实体配置错误:

步骤1:修正ChaterRole的信任策略

你将角色受信实体设为chatbot,但实际是让IAM用户来Assume该角色,需修改信任关系:

  • 进入AWS控制台→IAM→角色→找到ChaterRole→信任关系→编辑信任策略
  • 替换为以下内容(替换账号ID和IAM用户名为你的真实信息):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::028367088114:user/UserBedRock"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

步骤2:给IAM用户添加AssumeRole权限

为UserBedRock用户添加允许AssumeChaterRole的权限:

  • 进入IAM→用户→找到UserBedRock→权限→添加权限→创建内联策略
  • 选择JSON模式,输入以下策略(替换角色ARN为你的真实ARN):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::028367088114:role/ChaterRole"
    }
  ]
}
  • 命名策略(如AllowAssumeBedRockRole)并保存

步骤3:给ChaterRole添加Bedrock操作权限

确保角色本身具备调用Bedrock的权限:

  • 回到ChaterRole的权限页面→添加权限→附加策略→搜索并附加AmazonBedrockFullAccess(测试用,生产环境建议配置最小权限)

3. 代码调整注意事项

  • 删除你添加的假凭证环境变量(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),改用profile或正确的本地凭证
  • 取消注释os.environ["AWS_PROFILE"] = "<你的profile名>",确保本地已配置该profile
  • 确认BEDROCK_ASSUME_ROLE的ARN账号ID统一(你代码中写的是028367089014,错误提示中是028367088114,需修正为真实账号ID)

4. 测试角色Assume有效性

先运行以下代码验证是否能成功获取临时凭证:

import boto3
import os

os.environ["AWS_PROFILE"] = "<你的profile名>"
os.environ["AWS_DEFAULT_REGION"] = "us-east-1"

sts_client = boto3.client('sts')
response = sts_client.assume_role(
    RoleArn='arn:aws:iam::028367088114:role/ChaterRole',
    RoleSessionName='BedRockSession'
)

print("Assume角色成功,临时凭证:")
print(f"AccessKey: {response['Credentials']['AccessKeyId']}")

如果此代码执行成功,再运行Bedrock调用代码即可正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:47