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

AWS OpenSearch Serverless连接报错:'Session'对象无'token'属性

问题:迁移至AWS OpenSearch Serverless创建索引时出现'Session' object has no attribute 'token'错误

我们正准备从Elasticsearch迁移至AWS OpenSearch Serverless,尝试在新环境中创建索引。能成功获取aws_session_token,但无法连接OpenSearch,报错'Session' object has no attribute 'token'。怀疑是boto会话配置问题或botocore需额外配置,也不排除权限缺失可能,但暂不认为是该原因。需求是成功创建OpenSearch测试索引。

配置代码如下:

botoclient = boto3.client('sts', region_name = region, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key,verify = False)
response = botoclient.get_session_token()
aws_session_token = response["Credentials"]["SessionToken"]

session1 = boto3.Session(
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key,
    aws_session_token=aws_session_token
)

auth = AWSV4SignerAuth(session1, region, service)

botosession = OpenSearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = auth,
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection,
    pool_maxsize = 20
)

index_name = 'python-test-index'
index_body = {
  'settings': {
    'index': {
      'number_of_shards': 4
    }
  }
}

response1 = botosession.indices.create(index_name, body=index_body)
print('\nCreating index:')
print(response1)
解决方案

核心问题

AWSV4SignerAuth要求传入botocore的Session对象,而非boto3的Session对象。boto3.Session没有token属性,而botocore.session.Session才具备该属性,这是报错的直接原因。

修复步骤

  1. 替换会话对象:改用botocore Session并注入临时凭证

    from botocore.session import Session
    
    # 初始化botocore会话
    botocore_session = Session()
    # 设置STS获取的临时凭证
    botocore_session.set_credentials(
        aws_access_key_id=aws_access_key_id,
        aws_secret_access_key=aws_secret_access_key,
        token=aws_session_token
    )
    
    # 传入botocore会话到认证器
    auth = AWSV4SignerAuth(botocore_session, region, service)
    
  2. 简化凭证流程(可选):如果环境已配置AWS默认凭证链(环境变量、IAM角色等),可直接从boto3 Session中提取botocore会话:

    session = boto3.Session()
    # 提取内部botocore会话
    auth = AWSV4SignerAuth(session._session, region, service)
    
  3. 权限确认:确保IAM身份拥有以下必要权限:

    • aoss:CreateIndex
    • aoss:DescribeIndex
    • sts:GetSessionToken(若使用临时凭证)
  4. 版本适配:升级相关依赖至稳定版,避免版本兼容问题:

    pip install --upgrade opensearch-py botocore boto3
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:15