项目按甲方要求,部署在政务网,各种需要在系统中播放的视频存放于内部华为云;然后,系统需要在互联网上访问。

经过一天捣鼓,终于搞定。过程中遇到了许多问题,有nginx代理的,docker域名解析的,华为云存储桶默认设定的访问策略不支持公共读和匿名访问,https站点无法访问http资源,等等。最大的困难在于,政务网的管理员对华为云好像也不上心,一问三不知,没有示例,全凭自己摸索和分析;而且,服务器操作系统是linux,华为云只有一个名曰obsutil的命令行工具,只能敲命令和访问策略。

过程和技术点如下:

一、首先华为云存储桶中的资源应该有个地址

利用华为云所谓的对象存储工具obsutil,浏览事先上传的资源,都是 obs://。。。这种格式,如图所示。这是什么地址?浏览器应该认不了这种地址吧。查了许多次政务云管理员推荐的华为云操作手册,认为应该会有个域名,询问政务云管理员,果然是有,格式为 桶名.华为云域名。不问还不说。老实说,单凭他们刚开始给的资料,真的是摸不着头脑。看看华为云操作手册,跟世界上所有的操作手册一样,晦涩难懂,欲言又止,90%是废话。

二、存储桶的访问策略

如上所述,访问桶中对象,可通过 https://桶名.华为云域名/对象这种地址。不过,服务器是linux,没有桌面,只有命令行。怎么测试能否访问这些资源呢?用wget。如下:

wget http://sthj.obsv3.huawei.inner-cloud.com/temp/test.txt

但结果提示:403,Forbidden。

如果将访问路径改为:

wget http://sthj.obsv3.huawei.inner-cloud.com/temp123/test.txt

则提示 404,Not Found。这说明,路径是正确的,可能是桶有什么安全策略,限制了。

解决如下:

1、设置桶属性

获取桶属性

./obsutil stat obs://sthj -acl

显示Acl为private,私有桶。改为public-read:

./obsutil chattri obs://sthj -acl=public-read

运行wget,仍然是403,forbidden。

2、设置桶策略

1)获取桶策略

将策略下载到/media/root/obsutil/temp/policy.json

./obsutil bucketpolicy obs://sthj -method=get -localfile=/media/root/obsutil/temp/policy.json

策略如下

{"Statement": [{"Sid": "Customized1681356038822","Effect": "Allow","Principal": {"ID": ["domain/de389423d54b4fdca58169087700018e:user/44fc93c699b141928a3afacda4ef127c","domain/de389423d54b4fdca58169087700018e:user/8146a1dc3b2c41ab9b4c75e120ef451f","domain/de389423d54b4fdca58169087700018e:user/633787e9f6854af28bbcfa3a453c8d60"]},"Action": ["*"],"Resource": ["sthj/*"]},{"Sid": "Customized1681356059187","Effect": "Allow","Principal": {"ID": ["domain/de389423d54b4fdca58169087700018e:user/44fc93c699b141928a3afacda4ef127c","domain/de389423d54b4fdca58169087700018e:user/8146a1dc3b2c41ab9b4c75e120ef451f","domain/de389423d54b4fdca58169087700018e:user/633787e9f6854af28bbcfa3a453c8d60"]},"Action": ["*"],"Resource": ["sthj"]}]
}

其中,sthj是桶名。"Effect"可选值为Allow或Deny;"Principal"为用户,如果为“*”则代表支持匿名;"Action"就是各种操作权限,如"GetObject"代表读。官方文章

2)修改桶策略文件

将桶下资源改为匿名可读(见第三项),如下:

{"Statement": [{"Sid": "Customized1681356038822","Effect": "Allow","Principal": {"ID": ["domain/de389423d54b4fdca58169087700018e:user/44fc93c699b141928a3afacda4ef127c","domain/de389423d54b4fdca58169087700018e:user/8146a1dc3b2c41ab9b4c75e120ef451f","domain/de389423d54b4fdca58169087700018e:user/633787e9f6854af28bbcfa3a453c8d60"]},"Action": ["*"],"Resource": ["sthj/*"]},{"Sid": "Customized1681356059187","Effect": "Allow","Principal": {"ID": ["domain/de389423d54b4fdca58169087700018e:user/44fc93c699b141928a3afacda4ef127c","domain/de389423d54b4fdca58169087700018e:user/8146a1dc3b2c41ab9b4c75e120ef451f","domain/de389423d54b4fdca58169087700018e:user/633787e9f6854af28bbcfa3a453c8d60"]},"Action": ["*"],"Resource": ["sthj"]},{"Sid": "Customized1681356038822publicread","Effect": "Allow","Principal": "*","Action": ["GetObject","RestoreObject","GetObjectVersion"],"Resource": ["sthj/*"]}]
}

3、更新桶策略

以上只是改了桶策略文件,还要将此文件更新桶策略才有效:

./obsutil bucketpolicy obs://sthj -method=put -localfile=/media/root/obsutil/conf/policy.json

至此,可通过wget访问。但桶属性和桶策略,有啥区别呢?它们是不是共同控制桶的访问呢?不懂,没时间尝试。


2023.05.16
我猜测这个桶属性设为公共读以后,可以匿名罗列桶对象,但无法匿名访问这些对象。



2023.05.17
事实证明,以上猜测是真的。


三、内部域名的转发

但是,系统部署在政务网,华为云算是内部的私有云。对应的华为云域名,也是内部的,如果互联网需要访问这个华为云里面的东西,就需要在双网卡的服务器上用nginx做个转发,或曰反向代理。nginx配置如下:

location /obs/ {proxy_pass http://sthj.obsv3.huawei.inner-cloud.com/;proxy_redirect off;proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header   X-Real-IP         $remote_addr;
}

四、docker容器添加域名解析

但我们的nginx是运行在docker里的。上面这段配置写到nginx的配置文件后,该docker容器无法启动,提示不能解析域名sthj.obsv3.huawei.inner-cloud.com。其实不奇怪,docker就是一个容器,就像一个简单的操作系统,它里面没有相应的域名解析很正常。

参照网上教程Docker添加域名解析,删掉原nginx的docker容器,重新创建,在创建脚本中加入域名解析:

docker run \
--add-host=sthj.obsv3.huawei.inner-cloud.com:192.168.10.249 \
--name forward --privileged -it -p 80:80 \
-v /home/web/nginx/conf/forward.conf:/etc/nginx/nginx.conf:ro \
-v /home/web/nginx/html:/usr/share/nginx/html:rw \
-v /home/web/nginx/logs/forward:/var/log/nginx \
-d nginx:stable-alpine

nginx启动正常。

五、https站点无法访问http问题

忐忑不安地在浏览器中键入转发后的地址,结果显示无法访问,一盆冷水。不过,注意到转发地址为https。在https站点中,有个毛病,是无法连接http站点资源的。而华为云两种协议都支持,于是将nginx转发设置稍加修改,将http改为https。啊,月亮下去了,毛病出来了。

location /obs/ {proxy_pass https://sthj.obsv3.huawei.inner-cloud.com/;proxy_redirect off;proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header   X-Real-IP         $remote_addr;
}

obsutil工具使用说明:
对象存储服务工具指南(obsutil)


2023.05.15
将桶策略置为匿名访问,长久地直接暴露在互联网上,对于许多视频和图片而言,不合适。解决办法之一,是去掉匿名访问,分享地址带上签名,过期失效。

其原理,是根据AK(Access Key Id)和SK(Secret Access Key),结合过期时间点、请求的资源路径等,计算出一个签名。向华为云请求存储对象时,地址后面带上这个参数,在有效期内,即可访问。

这种有时间限制的签名,在微信应用开发时已经接触过了。华为云有一套API,可以做应用开发。像这个带签名访问,还给出了Java的例子。

另外,同一个对象,应用不同的过期时间点,相互不影响。比如,首先生成一个1小时后过期的URL,然后又创建一个半小时后过期URL,结果就是2个URL都有效,不会说新创建了一个,导致前面这个失效。

参考文章:
(华为云)URL中携带签名

政务网中使用内部华为云相关推荐

  1. 不变中谋变 华为云的坚持和赌注

    "Cloud Only",当以ICT起家的华为说出这个词时,你也许觉得它的分量有点重.不过,在3月21日于福州开幕的华为中国生态伙伴大会2019上,华为公司董事.企业BG总裁阎力大 ...

  2. 【观察】华为云连续四年蝉联政务云第一,背后是“长跑选手”实力的印证

    申耀的科技观察 读懂科技,赢取未来! 财经作家吴晓波在<激荡2020--疫情特别演讲>中提到:"如果说下水道是一座城市的良心,那么今天一座城市的云能力,则决定了这座城市的应急能力 ...

  3. 中软国际华为携手赋能合作伙伴做大云市场

    9月21日,耕云计划--华为云大讲堂伙伴专场南京站活动在南京金鹰皇冠假日酒店成功举办.此次活动是耕云计划华为云大讲堂开讲的首站,也是中软国际华为云江苏伙伴孵化中心在南京挂牌后积极配合渠道策略,组织的首 ...

  4. “3+3”看华为云FusionInsight如何引领“数据新基建”持续发展

    摘要:一个统一的现代化的数据基建需要三类架构来实践三种不同的应用场景. 近期,美国知名科技企业风投机构A16Z总结出一套通用的技术架构服务,分为以下三种场景. 一.数据基建架构全景 数据流向显示,左侧 ...

  5. 华为云何去何从:《听从你心,无问西东》

    作者@玛尼呸 在2018年 12 月18日在心声社区发帖吐糟华为内部对于云业务的定位.内部管理混乱等问题,阐述了大量事实依据,反馈了很多实际问题,希望公司予以重视并改进.此贴引起公司管理层重视,1月1 ...

  6. 阿里云、腾讯云、华为云:从内卷到外卷

    近年来,在各行各业的飞速发展以及数字经济的高歌猛进下,国内电商.社交.游戏.视频等多个行业的企业纷纷开始扬帆出海,企图通过拓展海外业务来寻求更广阔的增量市场.无独有偶,随着越来越多的中国企业加快了出海 ...

  7. 视频会议进入云时代,为何企业需要华为云会议

    随着互联网技术的发展和工作习惯的变化,视频会议已经成为了企业沟通协作的重要方式.无论是内部培训.项目研讨.商务洽谈,还是政务交流.远程医疗.在线教育,视频会议都能够提供高效.便捷.安全的解决方案.但是 ...

  8. 放弃私有云?华为云回应一切

    放弃私有云?华为云回应一切 原创 张帅 雷锋网 5月15日 来自专辑 产业深度 时值当下,对华为云放弃私有云的回应,更像是华为如何做云计算的自白. 文 | 张帅 国内私有云第一的华为,居然要放弃私有云 ...

  9. 华为云桌面远程办公,真香!

    我们知道,华为云桌面经过10多年市场积累,已经与110多个国家的4000多客户开展了商用合作,实现多个重点行业突破. 为什么华为云桌面会受到越来越多的政企客户的青睐? 首先,华为云桌面具有灵活性强的特 ...

最新文章

  1. Spring3+MyBatis3整合无法输出SQL语句问题的解决
  2. 非常精美的纸艺术作品欣赏(上篇)
  3. ubuntu 18.04 LTS 国内源安装docker
  4. html使两个按钮重叠,div按钮重叠HTML
  5. 计算机科学技术的教育应用论文,浅谈计算机科学技术在计算机教学中的应用论文...
  6. VC命令行编译参数介绍
  7. 免费使用3天!52CV GPU云大促,疫情期间做深度学习的首选!
  8. Pandas Groupby ApplyAgg
  9. Item 22: 当使用Pimpl机制时,在实现文件中给出特殊成员函数的实现
  10. Mybatis批量保存Clob类型时ORA-01461: can bind a LONG value only for insert into a LONG column报错解决方法
  11. 详细理解中缀表达式并实现
  12. 世界地图展开图,来自 Simon's World Map
  13. 互联网+大赛作品_“颂中国力量 绘美好梦想”全市中小学生互联网+书画大赛作品展示(四)...
  14. 各类图片素材网址汇总,让网站的banner有灵魂!!
  15. linux补齐命令,Linux中10个有用的命令行补齐命令
  16. Python爬虫汉字乱码问题
  17. Unity-网络开发(三)
  18. c语言123不合法浮点数,c语言程序设计练习.doc
  19. 液晶屏MIPI接口与LVDS接口区别(总结)
  20. 【PHP入门篇】 WAMPServer集成环境安装与使用--慕课网【学习总结】

热门文章

  1. Html Table 表格 画斜线
  2. 服装行业如何做软文营销推广产品?
  3. “壮士断腕”无人驾驶能够拯救苹果的内忧外困吗?
  4. struts中的javascript - seinbar的专栏
  5. php 汉王云名片_汉王云名片识别(SM)组件开发详解
  6. Mapwingis添加图层,实现label
  7. IEEE 802.3av 10Gbits EPON 中文翻译(一)
  8. 14道初级程序员进阶中高级的必经环节
  9. 先电iaas云平台搭建(openstack)————搭建过程
  10. github新手入门