QingStor™ 对象存储对接第三方图普科技鉴黄服务

QingStor™ 对象存储已经支持对接第三方数据处理服务,并接入了图普科技鉴黄服务。

QingStor™ 对象存储利用内部的异步数据处理框架,当有指定的对象上传成功时,会自动生成事件消息并触发各种数据处理。例如当用户开启了图普鉴黄服务,则会调用鉴黄 API 对指定的上传对象进行鉴黄识别,在识别流程结束后,识别结果将被回传,并推送到用户指定的通知地址中。

在操作层面,用户只需要在 QingStor™ 对象存储的控制界面中,一键选择开启服务并完成配置,服务即可自动开始运行。
开启图普鉴黄式例:

1. 在 console 中点击进入对象存储用户的某个具体 bucket 页面,点击 tab【数据处理】。

2. 列表中找到“图普鉴黄”,点击右侧按钮【点击开启】,在输入框“接收结果地址” 中写入用户自己的 notifiy_url ,以及“文件名匹配规则“中输入鉴黄目标的 glob patterns 。


以以上示例图的开启配置为例,每当有 jpg, jpeg, png 为后缀的对象上传成功后,将会对其进行鉴黄,并把结果推送到 http://example.notify.com 。

结果示例:

{
    "bucket": "fakebucket",
    "object": "porn.jpeg",
    "result": {
        "54bcfc6c329af61034f7c2fc": {
            "fileList": [
                {
                    "label": 2,
                    "name": "porn.jpeg",
                    "rate": 0.9836746454238892,
                    "review": false
                }
            ]
        },
        "code": 0,
        "message": "success",
        "nonce": "0.2297668219538047",
        "reviewCount": 0,
        "statistic": [
            0,
            0,
            1
        ],
        "timestamp": 1498647797834.0
    }
}

以上返回结果表示图片 “porn.jpeg”  被鉴定为正常图片的概率为 98%, 且不需要人工 review 。

参考: 图普鉴黄服务说明文档 。

控制台支持隧道规则复制、优惠券分类展示及消费记录查询的升级

隧道规则支持复制功能

路由器/VPC 支持 GRE、IPSec 等隧道规则,以打通两个路由器/VPC 的私有网络,或与外部路由器连通。分区部署时,我们通常希望将一个区域的隧道规则复制到另一个区域。控制台增加了对该功能的支持,在隧道规则列表中,可以点击“复制隧道规则”按钮,选择要复制的隧道、目的区域和路由器/VPC,即可在该目标中创建相同的隧道规则。

优惠券增加分类展示

青云的用户可以通过多种方式获得优惠券,并通过优惠券抵扣消费金额。控制台对优惠券的获得方法、展示形式以及提示做了展示上的优化。用户可以在优惠券页面的提示中,看到各类型的优惠券获得办法:

优惠券的列表也会将所获得的优惠券,按发放时间列出,并提供类型、生效时间、过期时间等指标:

另外,如果用户存在可用的优惠券,在控制台顶部用户消费记录、充值页面中也会提示,提醒并方便用户查看。

消费记录支持复杂查询

控制台对消费记录的查询做了升级:针对资源类型的查询,支持跨月查询,并可以一次输入多个资源 ID 查询。这方便了用户按季度、半年、一年一次性查询消费情况:

QingCloud MySQL Plus上线AppCenter

QingCloud MySQL Plus是关系型数据库 MySQL 的升级版本,提供金融级高可靠的MySQL 集群服务。

MySQL Plus的主要特点:

  • 主从开启 Semi-sync,严格保证节点间的数据一致性;
  • 使用 Raft 协议管理集群主从节点,故障时可实现秒级主从切换,保障业务连续性;
  • 提供了 InnoDB 和 TokuDB 两大事务引擎;
  • 集群为一主多从架构,默认两个从节点,最大支持六个从节点。

MySQL Plus可广泛适用于以下应用场景:

  • 金融及交易型事务等对数据一致性有极高要求的场景;
  • 高并发访问场景;
  • 大规模日志处理等大数据分析场景。

用户可以登录 AppCenter 官网进行安装部署

【安全公告】Linux 内核 “Phoenix Talon” 漏洞风险通告

近日,启明星辰 ADLab 发现了 Linux 内核存在远程漏洞 “Phoenix Talon”,涉及 CVE-2017-8890、CVE-2017-9075、CVE-2017-9076、CVE-2017-9077,可影响几乎所有 Linux kernel 2.5.69 ~ Linux kernel 4.11 的内核版本、对应的发行版本以及相关国产系统。请可能被漏洞影响的用户仔细阅读本文,并做相应的处理。

我们第一时间对漏洞进行了分析研究,这四个相关的 CVE 均为 double free 相关。因此如果触发了这些漏洞,最直接的结果是导致系统宕机。如果被黑客利用,可能会导致 DOS 攻击或其它未知风险。具体的触发条件整理如下:

触发条件:
1. CVE-2017-8890
当使用传输层 TCP 协议,并在服务端 socket 设置了 MCAST_JOIN_GROUP 选项时,可能会在 TCP 的连接处理中触发 double free。
2. CVE-2017-9075,CVE-2017-9076,CVE-2017-9077
当使用传输层 SCTP/DCCP 协议及网络层 IPv6 协议,可能会在连接处理中触发 double free。

注意事项:
1. 经过对漏洞的分析,除 CVE-2017-8890 以外,只要用户未使用传输层 SCTP/DCCP 及网络层 IPv6 协议即不会受到影响;而对于 CVE-2017-8890,只要服务程序在建立 socket 时未使用 MCAST_JOIN_GROUP 功能选项也不会受到影响。所以对于未满足以上条件的用户,大家可以放心使用。
2. 如果您的服务程序有使用 MCAST_JOIN_GROUP 功能选项,或者有使用传输层 SCTP/DCCP 协议及网络层 IPv6 协议,请更新最新内核版本或通过 livepatch 进行补丁操作。

Patch 链接:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=657831ffc38e30092a2d5f03d385d710eb88b09a
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fdcee2cbb8438702ea1b328fb6e0ac5e9a40c7f8
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=83eaddab4378db256d00d295bda6ca997cd13a52

参考资料:
http://www.csdn.net/article/a/2017-06-16/15928962
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8890
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9075
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9076
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-9077

控制台开发者映像应用新增图标上传功能

控制台开发者模块新增映像应用图标上传功能。旧版本的映像应用没有图标,在列表中展示时无法带给用户深刻映象。开发者需要给应用做更明显的标记,让应用有更好的辨识度。新增的映像应用图标上传功能,解决了这一问题。以往的映像应用在 AppCenter 中显示的都是默认图标,辨识度很低。现在,映像应用同云应用一样拥有自己的图标。

创建映像应用,相比原来多了第三步[应用图标],用来上传开发者创建映像应用的图标。图标格式为 JPG 或 PNG,尺寸为 96×96 px。

对于以前创建的映像应用,可以在修改映像应用里上传App的图标。

上传好的图标可以在开发映像应用表格中看到,未上传图标的应用显示默认的图标。

此次更新后,审核通过后的映像应用会在 AppCenter 应用中展示对应的图标。

青云QingCloud实施“分级定价”优惠政策的通告

尊敬的用户:

自2017年7月1日起,基于“消费越多,单价越便宜”的原则,针对青云QingCloud“按秒计费“的资源,将实施“分级定价”优惠政策,同时原来的“充值返”优惠政策将在2017年6月30日终止。

根据2017年累计消费额,“分级定价”优惠政策可享受的优惠如下:

2017年消费额(人民币) 可享受的分级定价折扣
低于5万 无折扣
5-50万 5万之后的消费享受单价9折
50万至100万 50万之后的消费享受单价8.5折
高于100万 100万之后的消费享受单价8折

 

执行细则

  1. “分级定价”优惠政策生效日期:2017年7月1日至2017年12月31日;
  2. 初始单价折扣的设定:2017年7月1日凌晨,计费系统自动统计用户从2017年1月1日至2017年6月30日的“按秒计费“资源的消费额,并参照规则设定该用户自2017年7月1日起可享有的初始单价折扣(折扣不向前追溯);
  3. 按天调整单价折扣:计费系统按天统计用户的消费是否达到下一个折扣台阶并在下一天作出相应的调整;
  4. “分级定价”优惠政策仅针对“按秒计费”的资源生效,原有预留实例和阶梯价格的计费方式不在此优惠政策范围内。

折扣示例

从2017年1月1日起,至2017年6月31日A公司在青云QingCloud“按秒计费”的累计消费额达到5万人民币,根据“分级定价”优惠政策,自2017年7月1日起,A公司“按秒计费”可享受单价9折优惠;至2017年10月1日16时,A公司在青云QingCloud“按秒计费”的累计消费额达到50万人民币,则自2017年10月2日起,A公司“按秒计费”可享受单价85折优惠,以此类推。

概念释义

  1. 什么是“按秒计费“?

“按秒计费“是青云QingCloud首创的计费方式,其前提是青云QingCloud所有资源获取都可在秒级内得到响应。用户在资源上的实际消费是从资源创建的时间点开始产生,且止于资源销毁的时间点,所有支出精确到“秒”,用户不会因购买资源时的时间周期而支出不必要的开销。

  1. “按秒计费“对用户有什么好处?

“按秒计费“可最大限度地满足用户在云中的弹性需求,让用户的成本最大限度的贴合实际的资源使用情况,同时达到更合理使用资源的目标。

2017年6月6日

 

控制台新增 IP/端口组复制、AppCenter 集群告警、子账号独立配额等功能

控制台新增了一些功能:IP/端口组跨区域复制、AppCenter 云应用集群的告警策略定义、子账号支持独立的配额设置、VPC 私有网络内负载均衡器支持绑定公网 IP 等。

IP/端口组是用于防火墙规则批量设置 IP段、端口段的配置,该配置在控制台支持了区域之间的复制功能:用户可以将一个设定好的 IP/端口组从区域 A 复制到区域 B。这个功能使得防火墙规则跨区域的共享更为方便。在 IP/端口组列表中选择要复制的项右键,或者复选多条配置,在操作栏选择“复制”按钮,即可指定要复制到的区域。

AppCenter 的云应用的集群支持给每个节点绑定告警策略。告警策略的规则可以设定主机的性能监控指标,以及所属应用的自定义监控项。在集群详情页可以看到“监控告警”的标签页,进入该标签页,即可选择一个集群节点,对其绑定告警策略。

在青云控制台,一个主账号可以建立多个子账号。默认情况下,子账号共享主账号的资源配额。控制台开放了子账号独立配额设置功能,用户可以用主账号登录,在选定子账号的详情页“配额”的标签页,设置其独立配额。设置之后,该子账号能创建的资源上限即为独立配额的上限。需要注意的是,子账号可以设置的配额,不能超过主账号具体资源的当前剩余配额。

在支持 SDN 2.0 的网络环境下,即北京3区、上海1区等新区域,VPC 私有网络中负载均衡器,开放了公网 IP 的绑定功能。绑定了公网 IP 的负载均衡器,即使在私有网络中,可以有独立的公网 IP 出口。用户可以像基础网络中的负载均衡器一样,用右键选中公网 IP 来绑定。

【安全公告】Samba 远程命令执行漏洞风险通告

2017 年 5 月 24 日,Samba 官方发布了 4.6.4 版本,修复了一个严重的远程代码执行漏洞,漏洞编号为 CVE-2017-7494,漏洞影响了 Samba 3.5.0 之后到 4.6.4/4.5.10/4.4.14 中间的所有版本。该漏洞可能会影响开启了 Samba 服务的 Linux 主机,请可能被漏洞影响的用户仔细阅读本文,并做相应的处理。

漏洞利用条件:
1. 服务器打开了文件/打印机共享端口 445,让其能够在公网上访问
2. 共享文件拥有写入权限
3. 恶意攻击者需猜解 Samba 服务端共享目录的物理路径

注意事项:
1. 请检查青云的防火墙规则,如果打开了 445 等危险端口,建议关闭。其他危险端口参见 【安全公告】Windows 勒索软件病毒风险通告
2. 青云的防火墙在默认情况下不会开启这些有风险的端口。所以如果您没有变更过防火墙,请放心使用。

修复办法:
如果您启用了 Samba 服务,并开放了 445 端口,那么可以考虑通过以下办法修复:
1. 安装补丁或者升级到 Samba 4.6.4/4.5.10/4.4.14 任意版本。
2. 如果暂时不能升级版本或安装补丁,可以使用临时解决方案:在 smb.conf 的 [global] 节点下增加 “nt pipe support = no” 选项,然后重新启动 Samba 服务。

参考资料:
【漏洞预警】Samba远程代码执行漏洞,影响7年前版本
【高危预警】Samba远程代码执行漏洞(CVE-2017-7494)分析

QingStor 对象存储新增 Logstash Input/Output 插件

QingStor Logstash Input/Output 插件为首届 QingStor Satellites 活动中成功孵化出的项目,在 QingStor Satellites 活动中,QingStor 团队会选择一些有意义的开源项目为课题,并作为导师指导高校学生逐步完成项目。

QingStor Logstash Input/Output 插件的开发者为 Tacinight,来自兰州大学信息科学与工程学院 DSLab 研究生一年级的同学 赵益民(下图即为赵益民同学近照)。

QingStor Logstash Input/Output 插件已经通过 QingStor 官方审核,并被收纳为 QingStor 官方的 Logstash 插件,后续将由 QingStor 官方与赵益民同学一起进行维护。

下文为简要使用文档。更多详细信息请参见 https://github.com/yunify/logstash-input-qingstor 和 https://github.com/yunify/logstash-output-qingstor

Logstash 简介

Logstash 是一款轻量级的日志搜集和处理工具,可以方便的把分散的、多样化的日志收集起来,并进行自定义的处理,然后传输到指定的目标,比如输出到 Elasticsearch 或者写入文件。Logstash 整体可大致分为三部分,即数据输入(Input)、数据加工(Filter)、数据输出(Output),同时 Logstash 内置了多种输入输出插件,方便用户对接各种第三方服务。QingStor Logstash Input/Output 插件实现了对象存储服务和 Logstash 的对接,方便用户读取存储在对象存储的日志或者上传处理后的日志到对象存储。

安装

首先确保 Logstash 已正确安装,之后使用以下命令从 Ruby Gems 安装插件。

$ bin/logstash-plugin install logstash-input-qingstor
$ bin/logstash-plugin install logstash-output-qingstor

快速开始

使用插件之前请先在 青云控制台 申请 Access Key。

Input 和 Output 插件的基本配置项如下,查看更多可用选项可访问 GitHub 项目页面进行查阅。

input {
    qingstor {
        access_key_id => "your_access_key_id"
        secret_access_key => "your_secret_access_key"
        bucket => "input_bucket_name"
        region => "pek3a"
    }
}
output {
    qingstor {
        access_key_id => "your_access_key_id"
        secret_access_key => "your_secret_access_key"
        bucket => "output_bucket_name"
        region => "pek3a"
    }
}
设置完成之后启动 Logstash,即可从对象存储读取日志文件,然后按照固定大小或固定时间切分并归档,最后输出处理后的日志文件到对象存储。
$ ./bin/logstash -f qs_input_ouput.conf

致谢

最后对 QingStor Logstash Input/Output 插件的作者 Tacinight (赵益民同学) 表示感谢,同时我们也欢迎更多高校学生或第三方开发者参与到我们的开源项目中来。

QingStor 对象存储新增 .NET SDK

QingStor 对象存储到目前为止已经发布了包括 Go、Ruby、Swift、Java、JavaScript、PHP、Python、Scala 等八种语言的 SDK,为了方便 .NET 平台的用户使用 QingStor 对象存储服务,现特新增 .NET SDK。

QingStor .NET SDK 通过开源的 QingStor 对象存储的 API Specifications(OpenAPI 格式,亦称 Swagger 2.0 格式)及 SDK 生成工具 Snips 来生成相应的SDK接口和公共基础部分,在 Snips 的帮助下使其能够在短时间内开发出符合生产环境使用的SDK。

下文为简要使用文档,更多详细信息请参见 https://github.com/yunify/qingstor-sdk-net

1. 安装

可通过以下三种安装方式任意一种安装。

  • 直接下载源码并将其添加至项目:
$ git clone https://github.com/yunify/qingstor-sdk-net.git
  • 直接添加 DLL 引用:
在 GitHub 的 Release 页面 下载相应版本的 DLL,然后将其添加至项目引用。由于此 SDK 
依赖于 Json.NET,可以添加该 SDK 对应版本的 Newtonsoft.Json.dll 引用或者使用 
NuGet来安装它:
Install-Package Newtonsoft.Json
  • 通过包管理器(NuGet)安装:
例如在 Visual Studio 2013 中,打开 NuGet 程序包管理器搜索 QingStor_SDK_NET 
或者在控制台中键入以下命令(其中,QingStor_SDK_NET45 表示 .NET Framework 4.5 
平台下的SDK):
Install-Package QingStor_SDK_NET45

2. 初始化服务

发起请求前首先建立初始化服务:

using QingStor_SDK_NET.Common;
using QingStor_SDK_NET.Service;

CConfig Config = new CConfig("Config.yaml");
CQingStor Service = new CQingStor(Config);

上面代码初始化了一个 QingStor Service。

3. 获取账户下的 Bucket 列表

CListBucketsOutput ListBuckets = Service.ListBuckets(null);

// Print the HTTP status code.
// Example: 200
Console.Write(ListBuckets.StatusCode);

// Print the bucket count.
// Example: 5
Console.Write(ListBuckets.count);

4. 创建 Bucket

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone

CBucket Bucket = Service.Bucket("bucket-name", "pek3a");
CPutBucketOutput PutBucketOutput = Bucket.Put();

5. 获取 Bucket 中存储的 Object 列表

CListObjectsOutput ListObjectsOutput = Bucket.ListObjects(null);

// Print the HTTP status code.
// Example: 200
Console.Write(ListObjectsOutput.StatusCode);

// Print the key count.
// Example: 0
Console.Write(ListObjectsOutput.keys.Length);

6. 创建一个 Object

CPutObjectInput PutObjectInput = new CPutObjectInput();
PutObjInput.Body = new FileStream("/tmp/Screenshot.jpg", FileMode.Open);
CPutObjectOutput PutObjectOutput = Bucket.PutObject("Screenshot.jpg", PutObjectInput);

// Print the HTTP status code.
// Example: 201
Console.Write(PutObjectOutput.StatusCode);

7. 删除一个 Object

CDeleteObjectOutput DeleteObjectOutput = BucketObj.DeleteObject("Screenshot.jpg");

// Print the HTTP status code.
// Example: 204
Console.Write(DeleteObjectOutput.StatusCode);

8. 设置 Bucket ACL

CGranteeType Grantee = new CGranteeType() { id = "usr-id", type = "user" };
CACLType ACL = new CACLType() { grantee = Grantee, permission = "FULL_CONTROL" };
CPutBucketACLInput PutBucketACLInput = new CPutBucketACLInput();
PutBucketACLInput.acl = new CACLType[] { ACL };
CPutBucketACLOutput PutBucketACLOutput = Bucket.PutACL(PutBucketACLInput);

// Print the HTTP status code.
// Example: 200
Console.Write(PutBucketACLOutput.StatusCode);