利用华为云OBS存储程序和数据库共同维护数据安全

举报
神龙居市 发表于 2022/11/30 13:22:42 2022/11/30
【摘要】 云储存一般性问题很多应用存储,需要图片视频,是耗费存储空间的,一般都会选择云存储实体,自己业务系统保存url连接,这样平衡了业务数据库和大量文件的分离存储。这里面也有一个问题,那就是数据库被扒了,所有url也同时暴露了。 华为OBS存储特性– 对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,使...

云储存一般性问题

很多应用存储,需要图片视频,是耗费存储空间的,一般都会选择云存储实体,自己业务系统保存url连接,这样平衡了业务数据库和大量文件的分离存储。
这里面也有一个问题,那就是数据库被扒了,所有url也同时暴露了。

华为OBS存储特性

– 对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,使用时无需考虑容量限制,并且提供多种存储类型供选择,满足客户各类业务场景诉求.
– 安全性:支持HTTPS/SSL安全协议,支持数据加密上传。同时OBS通过访问密钥(AK/SK)对访问用户的身份进行鉴权,结合IAM权限、桶策略、ACL、防盗链等多种方式和技术确保数据传输与访问的安全。
image.png

通过OBS访问权限控制,可以做到业务数据保存的url,需要配合程序访问共同完成,这就避免了,被盗库、盗链问题。

添加和访问OBS对象

– 通过对象访问上传,具体内容和桶类型相关
这里使用了esdk_obs_.net_core的类库。
不知为何华为没有制作成nuget包,而只是源码形式公开

        /// <summary>
        /// obs上传图片
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="filename"></param>
        private static string UploadOBS(Stream stream, string filename, string bucketname = "obs-recyclable", string folder = "face")
        {
            string endpoint = "https://obs.cn-north-4.myhuaweicloud.com";
            var client = new ObsClient(_AK, _SK, endpoint);
            try
            {
                UploadStreamRequest sr = new UploadStreamRequest()
                {
                    UploadStream = stream,
                    BucketName = bucketname,
                    ObjectKey = $"{folder}/{filename}"

                };
                var response = client.UploadStream(sr);

                Console.WriteLine("PutObject response: {0}", response.StatusCode);
                return response.ObjectUrl;
            }
            catch (ObsException ex)
            {
                NLogHelper.Error("UploadOBS", ex);
            }
            catch (Exception exx)
            {
                NLogHelper.Error("UploadOBS", exx);
            }
            return String.Empty;
        }

– 正式访问可以通过获得临时Url,一定时效内可以访问

        /// <summary>
        /// 临时访问URL
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="bucketname"></param>
        /// <param name="folder"></param>
        /// <returns></returns>
        public static string GetTempUrl(string filename, string bucketname = "obs-recyclable", string folder = "face")
        {
            string endpoint = "https://obs.cn-north-4.myhuaweicloud.com";
            var client = new ObsClient(_AK, _SK, endpoint);
            try
            {
                var req = new CreateTemporarySignatureRequest()
                {
                    BucketName = bucketname,
                    Expires = 60 * 60,
                    Method = HttpVerb.GET,
                    ObjectKey = $"{folder}/{filename}", 
                    SubResource= SubResourceEnum.Website
                };
                var resp = client.CreateTemporarySignature(req);

                return resp.SignUrl;
            }
            catch (ObsException ex)
            {
                NLogHelper.Error("GetTempUrl", ex);
            }
            catch (Exception exx)
            {
                NLogHelper.Error("GetTempUrl", exx);
            }
            return String.Empty;
        }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。