利用华为云OBS存储程序和数据库共同维护数据安全
【摘要】 云储存一般性问题很多应用存储,需要图片视频,是耗费存储空间的,一般都会选择云存储实体,自己业务系统保存url连接,这样平衡了业务数据库和大量文件的分离存储。这里面也有一个问题,那就是数据库被扒了,所有url也同时暴露了。 华为OBS存储特性– 对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,使...
云储存一般性问题
很多应用存储,需要图片视频,是耗费存储空间的,一般都会选择云存储实体,自己业务系统保存url连接,这样平衡了业务数据库和大量文件的分离存储。
这里面也有一个问题,那就是数据库被扒了,所有url也同时暴露了。
华为OBS存储特性
– 对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力,使用时无需考虑容量限制,并且提供多种存储类型供选择,满足客户各类业务场景诉求.
– 安全性:支持HTTPS/SSL安全协议,支持数据加密上传。同时OBS通过访问密钥(AK/SK)对访问用户的身份进行鉴权,结合IAM权限、桶策略、ACL、防盗链等多种方式和技术确保数据传输与访问的安全。
通过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)