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

如何解决AWS SageMaker Studio连接OpenSearch的超时问题

解决SageMaker代码编辑器连接OpenSearch超时问题

排查步骤与解决方案

1. 确认OpenSearch访问策略与访问类型

  • 检查OpenSearch域的访问策略,确保明确授权SageMaker执行角色ARN的访问权限,即使角色已有IAM全权限,OpenSearch自身策略仍需单独配置。示例策略片段:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::ACCOUNT_ID:role/SAGEMAKER_EXECUTION_ROLE"
          },
          "Action": "es:*",
          "Resource": "arn:aws:es:REGION:ACCOUNT_ID:domain/DOMAIN_NAME/*"
        }
      ]
    }
    
  • 确认OpenSearch域的访问类型为VPC访问,而非公网访问,VPC内访问需使用专属端点地址。

2. 修正opensearchpy客户端配置

  • 使用OpenSearch的VPC端点地址(格式类似vpc-DOMAIN_NAME-xxxxxx.REGION.es.amazonaws.com)创建客户端,而非公网地址。
  • 配置AWS签名认证,VPC内访问仍需签名验证,示例代码:
    from opensearchpy import OpenSearch, RequestsHttpConnection
    from requests_aws4auth import AWS4Auth
    import boto3
    
    region = 'us-east-1'
    service = 'es'
    credentials = boto3.Session().get_credentials()
    awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
    
    host = 'vpc-your-domain-xxxxxx.us-east-1.es.amazonaws.com' # 替换为你的VPC端点
    client = OpenSearch(
        hosts = [{'host': host, 'port': 443}],
        http_auth = awsauth,
        use_ssl = True,
        verify_certs = True,
        connection_class = RequestsHttpConnection
    )
    
    # 测试连接
    print(client.info())
    
  • 必须传入session_token参数,SageMaker执行角色使用临时凭证,缺失会导致认证失败或连接异常。

3. 检查安全组出站规则

  • 确认SageMaker所在安全组的出站规则允许HTTPS(443端口)流量到OpenSearch的安全组或VPC CIDR范围,自定义出站规则可能限制了VPC内的流量。

4. 验证子网路由表配置

  • 检查OpenSearch和SageMaker所在子网的路由表,确保包含VPC本地路由(允许VPC内私有IP通信),无限制跨子网流量的规则。

5. 测试基础网络连通性

  • 在SageMaker代码编辑器中执行网络测试命令,排查是网络层还是应用层问题:
    • 安装依赖:!apt-get install telnet curl -y
    • TCP连接测试:!telnet <OPENSEARCH_VPC_HOST> 443,超时则为网络层问题(安全组/路由表)
    • HTTPS请求测试:!curl -v https://<OPENSEARCH_VPC_HOST>,返回403则为权限/签名问题

6. 确认OpenSearch域状态

  • 通过boto3查询域状态,确保域处于Active状态,无维护或更新操作:
    import boto3
    os_client = boto3.client('opensearch')
    status = os_client.describe_domain(DomainName='your-domain-name')['DomainStatus']['DomainState']
    print(f"OpenSearch域状态: {status}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:03:14