代码之家  ›  专栏  ›  技术社区  ›  Lesha Pipiev

通过自定义代理向S3发送PUT对象请求

  •  0
  • Lesha Pipiev  · 技术社区  · 1 年前

    我们有一个服务,它作为代理服务器将文件上传到s3 in out Kubernetes服务。
    Golang上有控制台SDK应用程序,可以安装在Windows或MacOS下。
    有一个令牌服务,用于检索临时AWS凭据(accessKey、secretKey、sessionToken)。

    它的工作原理如下。

    通过SDK,使用:

    1. 选择一个文件,
    2. 单击“提交”,
    3. SDK应用程序正在从Token服务获取临时AWS凭据,
    4. 文件正在发送到代理服务(通过配置了临时凭据的AWS S3 SDK)
    5. 代理服务接收请求,进行一些日志记录,并将请求代理到S3。

    是否可以使用Scala/Java AWS s3 SDK将PUTObject请求发送到代理服务主机名,而不是发送到s3.amazonaws.com?

    我尝试过的:

      lazy val proxyConf: ProxyConfiguration = ProxyConfiguration.builder()
        .host("proxy-service-host")
        .port(80)
        .scheme("http")
        .build()
    
      lazy val httpClient: SdkAsyncHttpClient =
          NettyNioAsyncHttpClient.builder()
            .maxConcurrency(10)
            .proxyConfiguration(proxyConf)
            .build()
    
      lazy val credentials = AwsSessionCredentials.create("accessKey", "secretKey", "sessionToken")
    
      lazy val provider = StaticCredentialsProvider.create(credentials)
    
      lazy val config = S3Configuration.builder()
        .pathStyleAccessEnabled(true)
        .build();
    
      lazy val getAWSS3Client: S3AsyncClient = S3AsyncClient
        .builder()
        .serviceConfiguration(config)
        .credentialsProvider(provider)
        .httpClient(httpClient)
        .region(Region.of(sys.env.getOrElse("AWS_REGION", "us-west-2")))
        .build()
    

    但是得到:

    Could not connect to proxy
        at software.amazon.awssdk.http.nio.netty.internal.ProxyTunnelInitHandler.channelRead(ProxyTunnelInitHandler.java:111)
    
    0 回复  |  直到 1 年前