通过数据流从GCS存储桶读取Tensorflow文件:SSL没有替代证书主题名称与目标主机名

时间:2018-02-18 14:09:35

标签: python tensorflow ssl-certificate google-cloud-storage google-cloud-dataflow

我正在运行cloudml flowers sample的略微修改版本来对我自己的图像进行分类,我在预处理部分遇到问题。在指向我自己的图像时,似乎无法联系到另一个项目:

  
    

返回pywrap_tensorflow.ReadFromStream(self._read_buf,length,status):文件" /usr/lib/python2.7/contextlib.py",第24行,退出 self.gen.next()File" /usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/errors_impl.py" ;,第466行,in raise_exception_on_not_ok_status pywrap_tensorflow.TF_GetCode(status ))UnavailableError:执行HTTP请求时出错(HTTP响应代码0,错误代码51,错误消息' SSL:没有替代证书主题名称与目标主机名匹配' $ BUCKET.com.storage.googleapis.com& #39;')阅读$ BUCKET.com / image.jpg

  

(我用$ BUCKET替换了实际的存储桶名称。)

我从vm运行脚本,我在requirements.txt文件中安装了所需的软件包:

  
    

阿帕奇束[GCP] == 0.6.0

         

枕== 4.0.0

         

tensorflow == 1.4.1

  

到目前为止我尝试/做过的事情:

  • 验证我可以从sample.sh文件中运行原始花朵预处理而无需修改
  • 将默认项目的计算引擎服务帐户(" default-project-id" -compute@developer.gserviceaccount.com)的访问权限更改为"存储对象查看器"对于拿着水桶的项目。对相应的@ cloudservices.gserviceaccount.com
  • 也做了同样的事情
  • 验证了其他项目拥有的存储桶中图像的路径名是否正确
  • 从存储桶中读取具有.com名称但仍在另一个项目中时(访问其他项目的计算引擎服务帐户也设置为&# 34;存储对象查看器")抛出类似的错误,只有它现在" PermissionDenied"而不是"不可用"。

  • 使用我的默认gcloud auth我可以在本地运行预处理而没有错误。

      
        

    python trainer / preprocess.py \      --input_dict" $ DICT_FILE" \      --input_path $ INPUT_PATH_EVAL \      --output_path $ OUTPUT_PATH_EVAL \

      
  • 我已经查看了解决方案here,只是这是一个较旧版本的张量流,不应该是1.4的问题,如果是这种情况我可能仍然能够到达我不是的常规非域名桶。

那么在运行这个例子的项目之间我是否缺少了什么?

1 个答案:

答案 0 :(得分:2)

Google(TensorFlow)API不支持双通配符格式,例如*.*.storage.googleapis.com。他们只支持一个通配符证书,例如*.storage.googleapis.com。在您的情况下,当您使用“$ BUCKET.com.storage.googleapis.com”时,证书中会出现多个给定类型的身份(例如,多个DNS名称)。有关详细信息,请参阅{ {3}}。

由于权限问题而引发了权限拒绝错误。因此,在这种情况下,您没有足够的权限访问其他项目的存储桶,但该服务可用。有关详细信息,请参阅RFC standard  和Request Endpoints文件。

最简单的解决方案是通过Google Cloud API将文件复制到Google存储中,然后从中获取图像。