华为云用户手册

  • 操作步骤 登录HECS(旧版)控制台,单击左上角的选择区域。 在云服务器列表中,单击待绑定虚拟IP地址的云服务器名称。 系统跳转至该云服务器详情页面。 选择“网卡”页签,单击“管理虚拟IP地址”。 在弹出的“管理虚拟IP地址”对话框中,勾选“绑定虚拟IP地址”。 设置IP地址。 选择的IP地址为虚拟IP地址。多个主备部署的云服务器可以在绑定虚拟IP地址时选择同一个虚拟IP地址,增强容灾性能。 单击“确定”。
  • 操作步骤 登录HECS(旧版)控制台,单击左上角的选择区域。 绑定扩展弹性网卡 在云服务器列表中,单击待删除网卡的云服务器名称。 系统跳转至该云服务器详情页面。 选择“网卡”页签,并单击“删除”。 对于该云服务器的主网卡(默认为网卡列表中显示的第一个网卡),用户不能执行删除操作。 在弹出的对话框中单击“确定”,删除网卡。 对于部分云服务器,不支持在线删除网卡功能,具体以界面显示为准。您需要先关机云服务器,然后再执行删除网卡操作。
  • 操作步骤 启动Microsoft Remote Desktop。 单击“Add Desktop”。 图1 Add Desktop 在“Add PC”页面,设置登录信息后。 PC name:输入需要登录的Windows实例的弹性公网IP地址。 User account:在下拉列表中选择“Add user account”。 弹出“Add user account”对话框。 输入Windows实例帐号“administrator”,并输入实例的登录密码,单击“Add”。 图2 输入登录信息 图3 保存填写的登录信息 在“Remote Desktop”页面,双击需要登录的Windows实例图标。 图4 登录Windows实例 确认信息后,单击“CONNECT”。 至此,您已经登录Windows实例。 图5 登录成功
  • 前提条件 云服务器状态为“运行中”。 已获取Windows云服务器用户名和密码,忘记密码请参考在控制台重置密码。 云服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP。 所在安全组入方向已开放3389端口,配置方式请参见配置安全组规则。 已安装Microsoft Remote Desktop for Mac或其他macOS系统适用的远程连接工具。下载Microsoft Remote Desktop for Mac。 微软官方已停止提供Remote Desktop客户端的下载链接,您可单击Microsoft Remote Desktop Beta下载Beta版本使用。
  • 云硬盘的类型 云耀云服务器使用的云硬盘类型有如下几种: 高IO:该类型云硬盘的最大IOPS可达5000,最低读写时延为1 ms,适用于主流的高性能、高可靠应用场景,例如企业应用、中小型开发测试以及Web服务器日志等。 超高IO:该类型云硬盘的最大IOPS可达33000,最低读写时延为1 ms,适用于超高IO,超大带宽的读写密集型应用场景,例如高性能计算应用场景,用来部署分布式文件系统,或者I/O密集型应用场景,用来部署各类NoSQL/关系型数据库。 这些类型的性能特点和价格有所不同,您可根据应用程序要求选择您所需的云硬盘。更多关于云硬盘规格、性能等信息,请参见磁盘类型及性能介绍。
  • Android设备上登录Linux云服务器 如果您使用Android设备,请确保已经安装了JuiceSSH。本示例中使用CentOS 7.6操作系统,通过用户名和密码进行认证。 启动JuiceSSH,单击“连接”。 图5 启动JuiceSSH 在“连接”页面单击图标。 图6 连接 在“新建连接”页面上,添加基本设置和高级设置的信息并保存。需要添加的信息如下: 昵称:指定登录会话的名称,如本例中,设置为“linux_test”。 类型:使用默认值“SSH”。 地址:输入需要登录的Linux实例的弹性公网IP地址。 按以下步骤设置认证: 单击“认证”,在下拉列表里单击“新建”。 在“新建认证”页面上,添加如下信息后,单击图标。 昵称:可选项,您可以根据需要设置一个身份名称,方便后续管理。如本示例中,设置为“linux_test”。 用户名:输入用户名“root”。 密码:单击“设置(可选)”后,输入实例的登录密码,单击“确定”。 图7 新建认证 端口:输入端口号“22”。 图8 端口号 在“连接”页面单击创建好的连接。 图9 单击连接 确认提示信息后,单击“接受”。 图10 确认提示信息 (可选)第一次连接时,JuiceSSH会提示您如何设置字体大小,如何弹出键盘等。确认信息后,单击“好的,我知道了!”。 图11 教程 至此,您已经成功登录Linux实例。 图12 登录Linux实例
  • IOS设备上登录Linux云服务器 如果您使用iOS设备,请确保已经安装了SSH客户端工具,以Termius为例。本示例中使用CentOS 7.6操作系统,使用用户名和密码进行认证。 启动Termius,单击New Host。 图1 New Host 在SSH页面上,输入连接信息后,单击 Save。需要输入的连接信息包括: Alias:指定Host名称,如本例中,设置为ecs01。 Hostname:输入需要连接的 Linux 实例的公网IP地址。 Use SSH:打开SSH登录配置。 Host:输入需要连接的Linux实例的公网IP地址。 Port:输入端口号22。 用户名:输入用户名root。 密码:输入实例登录密码。 图2 输入连接信息 单击右上角的“Save”,保存登录信息,在Hosts页面,单击连接的名称远程连接服务器。 图3 保存登录信息 当出现如图4所示页面时,您已经成功地连接了Linux云服务器。 图4 已连接
  • 本地使用Windows操作系统 如果本地主机为Windows操作系统,可以按照下面方式登录云服务器。 以下示例演示了SSH密码方式连接Linux实例的操作步骤。 图1 SSH密码方式连接Linux实例 下面步骤以PuTTY为例。 在以下路径中下载PuTTY和PuTTYgen。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 运行PuTTY。 单击“Session”。 Host Name (or IP address):输入云服务器的弹性公网IP。 Port:输入 22。 Connection Type:选择 SSH。 Saved Sessions:任务名称,在下一次使用putty时就可以单击保存的任务名称,即可打开远程连接。 图2 单击“Session” 单击“Window”,在“Translation”下的“Received data assumed to be in which character set:”选择“UTF-8”。 单击“Open”。 如果首次登录云服务器,PuTTY会显示安全警告对话框,询问是否接受服务器的安全证书。单击“是”将证书保存到本地注册表中。 建立到云服务器的SSH连接后,根据提示输入用户名和密码登录云服务器。 如果是公共镜像(包括CoreOS),首次登录时,登录用户名、密码如下: 用户名:root 密码:购买云服务器时,您设置的密码
  • 虚拟私有云 虚拟私有云(Virtual Private Cloud,以下简称VPC)为云服务器构建了一个逻辑上完全隔离的专有区域,您可以在自己的逻辑隔离区域中定义虚拟网络,为云服务器构建一个逻辑上完全隔离的专有区域。您还可以在VPC中定义安全组、VPN、IP地址段、带宽等网络特性,方便管理、配置内部网络,进行安全、快捷的网络变更。同时,您可以自定义安全组内与组间云服务器的访问规则,加强云服务器的安全保护。 虚拟私有云更多信息,请参见《虚拟私有云用户指南》。
  • 云服务器提供数据库访问服务 安全组默认拒绝所有来自外部的请求,如果您在云服器上部署了数据库服务,允许其他云服务器通过内网访问数据库服务,则您需要在部署数据库云服务器所在的安全组内,添加入方向规则,放通对应的端口,例如MySQL(3306)、Oracle(1521)、MS SQL(1433)、PostgreSQL(5432)、Redis(6379)。 表9 云服务器提供数据库访问服务 规则方向 优先级 策略 类型 协议端口 源地址 描述 入方向规则 1 允许 IPv4 自定义TCP: 3306 安全组:sg-A 允许安全组sg-A内云服务器访问MySQL数据库服务。 入方向规则 1 允许 IPv4 自定义TCP: 1521 安全组:sg-B 允许安全组sg-B内云服务器访问Oracle数据库服务。 入方向规则 1 允许 IPv4 自定义TCP: 1433 IP地址:172.16.3.21/32 允许私网IP地址为172.16.3.21的云服务器访问MS SQL数据库服务。 入方向规则 1 允许 IPv4 自定义TCP: 5432 IP地址:192.168.0.0/24 允许私网IP地址属于192.168.0.0/24网段的云服务器访问PostgreSQL数据库服务。 入方向规则 1 允许 IPv4 自定义TCP: 6379 IP地址组:ipGroup-A 允许私网IP地址属于IP地址组ipGroup-A范围内的云服务器访问PostgreSQL数据库服务。 本示例中源地址提供的配置仅供参考,请您根据实际需求设置源地址。
  • 限制云服务器访问外部网站 安全组的出方向规则一般默认全部放通,默认规则如表11所示。如果您需要限制服务器只能访问特定网站,则按照如下要求配置: 首先,您需要遵循白名单规则,在安全组出方向规则中添加指定的端口和IP地址。 表10 不同安全组内实例内网互通 规则方向 优先级 策略 类型 协议端口 源地址 出方向规则 1 允许 IPv4 自定义TCP: 80 IP地址:132.15.XX.XX 出方向规则 1 允许 IPv4 自定义TCP: 443 IP地址:145.117.XX.XX 其次,删除安全组出方向中原有放通全部流量的规则,如表11所示。 表11 安全组默认出方向规则 规则方向 优先级 策略 类型 协议端口 目的地址 描述 出方向规则 100 允许 IPv4 全部 0.0.0.0/0 针对全部IPv4协议,允许安全组内的实例可访问外部IP的所有端口。 出方向规则 100 允许 IPv6 全部 ::/0 针对全部IPv6协议,允许安全组内的实例可访问外部IP的所有端口。
  • 不同安全组内实例内网网络互通 同一个VPC内,位于不同安全组内的实例网络不通。如果您需要在同一个VPC内的实例之间共享数据,比如安全组sg-A内的云服务器访问安全组sg-B内的MySQL数据库,您需要通过在安全组sg-B中添加一条入方向规则,放通MySQL (3306)端口,允许来自安全组sg-A内云服务器的请求进入。 表8 不同安全组内实例内网互通 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 自定义TCP: 3306 安全组:sg-A
  • 从本地服务器远程登录云服务器 安全组默认拒绝所有来自外部的请求,如果您需要从本地服务器远程登录云服务器,那么需要根据您的云服务器操作系统类型,在安全组入方向添加对应的规则。 通过SSH远程登录Linux云服务器,需要放通SSH(22)端口,请参见表2。 通过RDP远程登录Windows云服务器,需要放通RDP(3389)端口,请参见表3。 表2 通过SSH远程登录Linux云服务器 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 自定义TCP: 22 IP地址:0.0.0.0/0 表3 通过RDP远程登录Windows云服务器 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 自定义TCP: 3389 IP地址:0.0.0.0/0 源地址设置为0.0.0.0/0表示允许所有外部IP远程登录云服务器,为了确保安全,建议您遵循最小原则,根据实际情况将源IP设置为特性的IP地址,配置示例请参见表4。 表4 通过特定IP地址远程登录云服务器 云服务器类型 规则方向 优先级 策略 类型 协议端口 源地址 Linux云服务器 入方向规则 1 允许 IPv4 自定义TCP: 22 IP地址:192.168.0.0/24 Windows云服务器 入方向规则 1 允许 IPv4 自定义TCP: 3389 IP地址:10.10.0.0/24
  • 在云服务器上搭建网站对外提供Web服务 安全组默认拒绝所有来自外部的请求,如果您在云服器上搭建了可供外部访问的网站,则您需要在安全组入方向添加对应的规则,放通对应的端口,例如HTTP(80)、HTTPS(443)。 表6 云服务器上搭建网站对外提供Web服务 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 自定义TCP: 80 IP地址:0.0.0.0/0 入方向规则 1 允许 IPv4 自定义TCP: 443 IP地址:0.0.0.0/0
  • 使用ping命令验证网络连通性 安全组默认拒绝所有来自外部的请求,如果您需要在云服器上使用ping命令验证网络的连通性,则您需要在安全组入方向添加对应的规则,放通ICMP端口。 表7 使用ping命令验证网络连通性 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 ICMP: 全部 IP地址:0.0.0.0/0 入方向规则 1 允许 IPv6 ICMP: 全部 IP地址:::/0
  • 在本地服务器远程连接云服务器上传或者下载文件 安全组默认拒绝所有来自外部的请求,如果您需要在本地服务器远程连接云服务器上传或者下载文件,那么您需要开通FTP(20、21)端口。 表5 在本地服务器远程连接云服务器上传或者下载文件 规则方向 优先级 策略 类型 协议端口 源地址 入方向规则 1 允许 IPv4 自定义TCP: 20-21 IP地址:0.0.0.0/0 您需要在弹性云服务器上先安装FTP服务器程序,再查看20、21端口是否正常工作。安装FTP服务器的操作请参见搭建FTP站点(Windows)、搭建FTP站点(Linux)。
  • 结果验证 安全组规则配置完成后,我们需要验证对应的规则是否生效。假设您在云耀云服务器上部署了网站,希望用户能通过HTTP(80端口)访问到您的网站,您添加了一条入方向规则,如表3所示。 表3 安全组规则 方向 协议/应用 端口 源地址 入方向 TCP 80 0.0.0.0/0 Linux云耀云服务器 Linux云耀云服务器上验证该安全组规则是否生效的步骤如下所示。 登录云耀云服务器。 运行如下命令查看TCP 80端口是否被监听。 netstat -an | grep 80 如果返回结果如图3所示,说明TCP 80端口已开通。 图3 Linux TCP 80端口验证结果 在浏览器地址栏里输入“http://云耀云服务器的弹性公网IP地址”。 如果访问成功,说明安全组规则已经生效。
  • 操作场景 安全组类似防火墙功能,是一个逻辑上的分组,用于设置网络访问控制。用户可以在安全组中定义各种访问规则,当云耀云服务器加入该安全组后,即受到这些访问规则的保护。 入方向:入方向规则放通入方向网络流量,指从外部访问安全组规则下的云耀云服务器。 出方向:出方向规则放通出方向网络流量。指安全组规则下的云耀云服务器访问安全组外的实例。 默认安全组规则请参见默认安全组和规则。常用的安全组规则配置示例请参见安全组配置示例。
  • Go语言 package demo import ( "bytes" "crypto" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/json" "encoding/pem" "fmt" "io/ioutil" ) type Message struct { Signature string `json:"signature"` Subject *string `json:"subject"` TopicUrn string `json:"topic_urn"` MessageId string `json:"message_id"` SignatureVersion string `json:"signature_version"` Type string `json:"type"` Message string `json:"message"` SubscribeUrl string `json:"subscribe_url"` UnsubscribeUrl string `json:"unsubscribe_url"` SigningCertUrl string `json:"signing_cert_url"` Timestamp string `json:"timestamp"` } func VerifyMessage(pemFile string, message string) bool { msg := Message{} err := json.Unmarshal([]byte(message), &msg) if err != nil { fmt.Println("Convert json to struct failed") return false } pemContent, err := ioutil.ReadFile(pemFile) if err != nil { fmt.Println("Read pem file failed") return false } certDerblock, _ := pem.Decode(pemContent) if certDerblock == nil { fmt.Println("Decode pem file failed") return false } cert, err := x509.ParseCertificate(certDerblock.Bytes) if err != nil { fmt.Println("Parse cert failed") return false } msgString := buildMessage(&msg) msgHash := crypto.SHA256.New() msgHash.Write([]byte(msgString)) msgHashSum := msgHash.Sum(nil) decodeSign, _ := base64.StdEncoding.DecodeString(msg.Signature) publicKey := cert.PublicKey.(*rsa.PublicKey) err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, msgHashSum, decodeSign) if err != nil { fmt.Println("Verify failed") return false } else { fmt.Println("Verify success") return true } } func buildMessage(msg *Message) string { if msg.Type == "Notification" { return buildNotificationMessage(msg) } else if msg.Type == "SubscriptionConfirmation" || msg.Type == "UnsubscribeConfirmation" { return buildSubscriptionMessage(msg) } return "" } func buildNotificationMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") // msg中存在Subject字段不存在的场景,需要特殊处理 if msg.Subject != nil { buf.WriteString("subject\n" + *msg.Subject + "\n") } buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } func buildSubscriptionMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") buf.WriteString("subscribe_url\n" + msg.SubscribeUrl + "\n") buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } 该示例代码已在go 1.15版本上测试通过。
  • HTTP(S)订阅确认消息的格式 添加HTTP(S)订阅终端以后,SMN会向订阅终端推送一条订阅确认的消息,下面将描述消息的HTTP Content,它是JSON格式的字符串,其中包括subscribe_url值,订阅确认需要GET请求subscribe_url地址进行确认,具体JSON字段说明如表2所示。 表2 HTTP(S)订阅确认消息的格式参数说明 参数 说明 type 消息类型,SubscriptionConfirmation。 signature 签名信息。 签名字段包括message,message_id,subscribe_url,timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 订阅确认消息的描述。 subscribe_url 订阅确认需要访问的URL。 signing_cert_url 用于消息签名的证书URL,不需要鉴权,可直接访问。 timestamp 消息第一次发送的时间戳。 HTTP(S)订阅确认消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "SubscriptionConfirmation", "message": "You are invited to subscribe to topic: urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic. To confirm this subscription, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "subscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • HTTP(S)取消订阅消息的格式 HTTP(S)订阅终端取消订阅确认后,终端将收到SMN推送的取消订阅确认消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表4所示。 表4 HTTP(S)取消订阅消息的格式参数说明 参数 说明 type 消息类型,UnsubscribeConfirmation。 signature 签名信息。 签名字段包括message,message_id,subscribe_url、timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 取消订阅确认消息的描述。 subscribe_url 再次订阅确认需要访问的URL。 signing_cert_url 用于消息签名的证书URL。 timestamp 消息第一次发送的时间戳。 HTTP(S)取消订阅消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "UnsubscribeConfirmation", "message": "You are unsubscribed from topic: urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic. To subscribe to this topic again, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "subscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • HTTP(S)推送消息的格式 HTTP(S)订阅终端订阅确认后,终端将收到SMN推送的消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表3所示。 表3 HTTP(S)推送消息的格式参数说明 参数 说明 type 消息类型,Notification。 signature 签名信息。 签名字段包括message,message_id,subject, timestamp,topic_urn和type,具体签名信息校验,如果subject不存在,则不参与校验,请参见校验消息签名。 subject 消息标题。 topic_urn 主题的唯一标识,表示消息归属的主题。 message_id 消息唯一标识。 signature_version 签名的版本信息,目前是V1。 message 订阅推送消息的描述。 unsubscribe_url 通过访问该链接可以取消终端订阅。 signing_cert_url 用于消息签名的证书URL。 timestamp 消息第一次发送的时间戳。 HTTP(S)推送消息样例如下: { "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhETA2A==", "topic_urn": "urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "Notification", "message": "{\"enterpriseProjectId\": \"0\", \"eventTime\": \"2019-08-12 22:40:55.040632\", \"chargingMode\": \"postPaid\", \"cloudserviceType\": \"xxx.service.type.bandwidth\", \"eventType\": 1, \"regionId\": \"region01\", \"tenantId\": \"057eefe55400d2742f8cc0017870ceef\", \"resourceType\": \"xxx.resource.type.bandwidth\", \"resourceSpecCode\": \"19_bgp\", \"resourceSize\": 10, \"resourceId\": \"e091f1b1-08ef-4e2b-a27e-f85e4c19026a\", \"resouceSizeMeasureId\": 15, \"resourceName\": \"elbauto_2019_08_13_06_40_46\"}", "unsubscribe_url": "https://console.xxx.com/smn/subscription/unsubscribe?subscription_urn=urn:smn:region01:0553db98c800d5192f9bc01232b89622:vpc_status_report_topic:653e212a43884f7188ca656c537e31ce", "signing_cert_url": "https://smn.cn-north-9.myhuaweicloud.com/smn/SMN_cn-north-9_94f60ccdfbee4588aa4d555935a56ba3.pem", "timestamp": "2019-08-12T22:40:56Z" }
  • 操作场景 接收SMN服务发送的HTTP(S)消息时,终端证书的CN名称请参考业界规范,部分特殊字符可能导致https消息发送失败。 描述SMN服务向HTTP(S)终端发送消息的格式,您可以通过消息头部信息中的消息类型来区分消息格式。消息格式包括:HTTP(S)订阅确认消息的格式、HTTP(S)推送消息的格式和HTTP(S)取消订阅消息的格式三种消息格式,HTTP/HTTPS协议均为POST方式。 当SMN服务向HTTP(S)终端发送消息时,头部包括请求X-SMN-MESSAGE-TYPE,X-SMN-MESSAGE-ID,X-SMN-TOPIC-URN,X-SMN-SUBSCRIPTION-URN,如表1所示。 表1 消息HTTP(S)头部参数说明 参数 说明 X-SMN-MESSAGE-TYPE 消息类型,消息类型分别有: SubscriptionConfirmation Notification UnsubscribeConfirmation X-SMN-MESSAGE-ID 消息唯一标识。 X-SMN-TOPIC-URN 主题的唯一标识,表示消息归属的主题。 X-SMN-SUBSCRIPTION-URN 订阅终端的唯一标识。 只在HTTP(S)推送消息和HTTP(S)取消订阅消息时,设置此字段。 关于HTTP(S)头部字段的说明: RFC 7230 章节3.2中规定,HTTP(S)头部的字段名称不区分大小写。 RFC 7540 章节8.1.2中规定,对于支持HTTP/2的服务端,头部字段信息需要统一改为全小写。 对于用户自定义的HTTP(S)头部字段,SMN也将采用上述的处理策略。 用户如果从HTTP(S)头部中获取相关字段,建议采用不区分大小写的方式。
  • JSON格式体说明 JSON格式主要用来处理用户想对不同的订阅者类型发送不同的消息,目前支持的协议Default、HTTP、HTTPS、email、FunctionGraph(函数)、FunctionGraph(工作流),其中Default是必须的,Email的内容将发给邮件类型的订阅者,其它协议依次如下所示: { "default": "Dear Sir or Madam, this is a default message.", "email": "Dear Sir or Madam, this is an email message.", "http": "{'message':'Dear Sir or Madam, this is an HTTP message.'}", "https": "{'message':'Dear Sir or Madam, this is an HTTPS message.'}", "sms": "This is an SMS message.", "functionstage": "Dear Sir or Madam, this is a functiongraph(function) message.", "functiongraph": "Dear Sir or Madam, this is a functiongraph(workflow) message." } 推荐将Default设置为通用的消息内容,对于特殊的订阅者类型再设置相应消息内容。 以下示例展现由于短信内容长度有限制,将短信设置为特殊的消息,其中HTTP、HTTPS、Email、FunctionGraph(函数)、FunctionGraph(工作流)类型的订阅收到"Dear Sir or Madam, this is a default message."的内容,而SMS类型的订阅者收到“This is an SMS message”。 { "sms": "This is an SMS message.", "default": "Dear Sir or Madam, this is a default message." }
  • JSON消息计算 选择不同的协议,生成的JSON格式消息的大小不同。JSON格式消息的字节数包含消息框中显示的花括号、双引号、空格、回车、协议名称和消息内容累计字节数。具体字节计算方式以输入消息“This is a default message.”为例。 消息:“This is a default message.”,消息本身包含26个字节。 输入消息,选择协议,生成JSON消息时,系统默认生成Default协议的消息。 { "default": "This is a default message.", "protocol1": "This is a default message.", "protocol2": "This is a default message.", …… } 1个Default协议加上用户选择的协议个数,记为N。 消息体包含的固定字节数: 每种协议的消息包含3个空格,共N个协议:3× N = 3N 每种协议的消息包含4个双引号,共N个协议: 4 × N = 4N 每种协议的消息包含1个冒号,共N个协议:1 × N = N 每种协议的消息包含1条消息内容This is a default message.,共N个协议:26 × N = 26N 逗号(N - 1)个:1 × (N - 1) = (N - 1) 回车(N + 1)个:1 ×(N + 1) = (N + 1) 花括号2个:1 × 2 = 2 协议名称 default 1个:7 × 1 = 7 选择的协议字节数: 协议名称 HTTP 1个:4 × 1 = 4 协议名称 HTTPS1个:5 × 1 = 5 协议名称 email 1个:5 × 1 = 5 协议名称 sms 1个:3 × 1 = 3 协议名称 functionstage 1个:13 × 1 = 13 协议名称 functiongraph 1个:13 × 1 = 13 合计:36N + 9 + 选择的协议字节数 例如,您选择了“HTTP”、“HTTPS”和“email”3个协议,生成的消息如下: { "default": "This is a default message.", "email": "This is a default message.", "http": "This is a default message.", "https": "This is a default message." } 加上Default,则N的值为4,生成的JSON消息字节数计算如下: 固定字节数:36 × 4 + 9 = 153 协议名称 HTTP 1个:4 × 1 = 4 协议名称 HTTPS 1个:5 × 1 = 5 协议名称 email 1个:5 × 1 = 5 合计:153 + 4 + 5 + 5 = 167
  • 查看访问日志 当您配置了消息传输日志,可以查看消息传输日志的详细信息。 日志显示格式如下: {"message_id":"$message_id","project_id":"$project_id","topic_urn":"$topic_urn","subscriber_urn":"$subscriber_urn","protocol_name":"$protocol_name","endpoint":"$endpoint","status":"$status","http_code":$http_code,"create_time":"$create_time","send_time":"$send_time"} 不支持修改日志格式。日志字段说明如表1所示。 表1 字段说明 参数 参数类型 描述 message_id String 消息ID。 project_id String 项目ID。 topic_urn String Topic的唯一的资源标识 subscriber_urn String 订阅者的唯一资源标识。 protocol_name String 不同协议对应不同的endpoint(接受消息的接入点)。目前支持的协议包括: “email”:邮件传输协议,endpoint为邮箱地址。 “sms”:短信传输协议,endpoint为手机号码。 “functiongraph” FunctionGraph(函数)传输协议,endpoint为一个函数 “functionstage”:。FunctionStage(工作流)传输协议,endpoint为一个函数工作流 “http”、“https”:HTTP/HTTPS传输协议,endpoint为URL。 endpoint String 接受消息的接入点。 status String 消息状态。目前包括以下状态: “DELIVERED”:已送达。 “FAIL_DELIVERED”:发送失败。 “REJECTS”:已拒绝。触发流控机制。 http_code Integer HTTP返回码,仅支持HTTP/HTTPS协议消息。 create_time String 消息创建时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。 send_time String 消息发送时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。
  • 日志示例 {"message_id":"1ae49922602a42fc83acb9689a2eb5f4","project_id":"5a9f32e4f1ec4bbe9695ff9da51c2925","topic_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo","subscriber_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740","protocol_name":"https","endpoint":"https://127.0.0.1:443/https","status":"DELIVERED","http_code":200,"create_time":"2022-11-01T00:00:00Z","send_time":"2022-11-01T00:00:10Z"} 以上日志示例对应的字段如下: 表2 日志示例对应的字段 参数 示例 message_id 1ae49922602a42fc83acb9689a2eb5f4 project_id 5a9f32e4f1ec4bbe9695ff9da51c2925 topic_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo subscriber_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740 protocol_name https endpoint https://127.0.0.1:443/https status DELIVERED http_code 200 create_time 2022-11-01T00:00:00Z send_time 2022-11-01T00:00:10Z
  • 不同协议消息说明 不同的订阅协议接收到的消息包含的内容可能有所不同。 邮件和HTTP(S)终端收到的消息包含:消息主题、消息内容和取消订阅的链接。 短信终端接收到的消息只包含消息内容。 FunctionGraph(函数)终端收到的消息包含消息属性、消息标题、消息内容、主题URN等信息。消息样例类似如下。字段说明如表1所示。 { "record": [{ "event_version": "1.0", "smn": { "message_attributes": "", "subject": "Welcome", "message_id": "e6fa59c6b3e0424c9c02cbed35b680e7", "topic_urn": "urn:smn:regionId:66e0f4622d6f4e3fb2db2e495298a61a:smn_123", "type": "notification", "message": "Hello", "timestamp": "2017-08-17T10:07:14Z" }, "event_source": "smn", "event_subscription_urn": "urn:cff:regionId:66e0f4622d6f4e3fb2db2e495298a61a:function:DEFAULT:mytest:latest" }] } 表1 字段说明 字段配置项 类型 说明 record JSON对象 消息列表 event_version String 版本 message_attributes String 消息属性 subject String 消息标题 message_id String 消息ID topic_urn String 主题URN type String 消息类型 message String 消息内容 timestamp String 时间戳 event_source String 消息来源 event_subscription_urn String 订阅URN FunctionGraph(工作流)终端收到的消息包含消息标题、消息内容、主题URN等信息。消息样例类似如下。字段说明如表2所示。 { "records":[{ "event_version":"1.0", "smn":{ "topic_urn":"urn:smn:regionId:995960e6a6094fdeb00b7c9991d35791:11-16", "type":"notification", "message":"Hello", "timestamp":"2017-11-27T09:53:41Z", "subject":"test_1127", "message_id":"27d6e9e1249240288b47817bf637192b" }, "event_source":"SMN", "event_subscription_urn":"urn:smn:regionId:995960e6a6094fdeb00b7c9991d35791:11-16:dcd78adcb194431587d4992c374f8465"}] } 表2 字段说明 字段配置项 类型 说明 records JSON对象 消息列表 event_version String 版本 topic_urn String 主题URN type String 消息类型 message String 消息内容 timestamp String 时间戳 subject String 消息标题 message_id String 消息ID event_source String 消息来源 event_subscription_urn String 订阅URN 父主题: 附录
  • 支持审计的关键操作列表 在您的账户中启用云审计服务后,SMN服务的API被调用时,日志文件可能会跟踪记录该操作,并依据时间和数据的变化将日志文件转储到对象存储桶。 如果您在没有登录的情况下调用SMN的取消订阅(Unsubscribe)操作,云审计则不会记录这些操作。例如,当您需要取消订阅时,在电子邮件通知中单击取消订阅的链接,此时会在未登录的情况下调用Unsubscribe,这种情况下您的取消订阅操作则不会被云审计记录。 云审计支持的消息通知服务操作列表如表1所示。 表1 云审计支持的SMN操作列表 操作名称 资源类型 事件名称 创建主题 topic createTopic 删除主题 topic deleteTopic 更新主题 topic updateTopic 更新主题策略 topic updateTopicAttribute 删除所有主题策略 topic deleteTopicAttributes 删除指定名称的主题策略 topic deleteTopicAttributeByName 添加订阅 subscription subscribe 删除订阅 subscription delsubscribe 创建消息模板 message_template createMessageTemplate 批量创建消息模板 message_template batchCreateMessageTemplate 更新消息模板 message_template updateMessageTemplate 删除消息模板 message_template deleteMessageTemplate 创建短信签名 sms createSmsSign 删除短信签名 sms deleteSmsSign 更新短信回调事件 sms updateSmsEvent 父主题: 记录消息通知服务
  • 操作场景 消息模板指消息的固定格式。如果您要发布的消息内容丰富,并且这条消息需要多次发布,每次发布时需要变更的内容极少,此时您可以套用已创建的消息模板向订阅者发送消息。 在相同的消息模板名称下面,可创建一个或多个不同协议类型的消息模板来适配不同协议的订阅者,但必须包含一个Default协议类型的模板。不同协议类型的消息模板可以设置不同的模板内容,使用{tag}占位符代替变量。如果没有预置的Default协议的模板,将不允许发送该模板。 使用模板格式发送消息时,需要选择模板名称,名称选定后,系统会按照Default、SMS、Email、HTTP、HTTPS、FunctionGraph(函数)、FunctionGraph(工作流)的协议顺序,将该模板名称下不同协议的所有模板内容中的{tag}标签列出,重复的{tag}只列出一次,并在右侧显示拥有该{tag}的协议名称。设置{tag}值之后,消息通知服务会自动替换模板的{tag}标签为对应的参数值。如果{tag}没有设置参数值,模板内容不做替换。消息通知服务会按照模板名称和订阅者协议类型获取模板内容,如果对应订阅协议的模板内容不存在,将使用Default模板内容发送。 在这一部分中,您可以按照模板格式进行消息推送至您设定的订阅终端地址。在发送模板消息之前,您需要先创建好消息模板,关于消息模板的详细信息请参见《消息通知服务用户指南》的“消息模板管理”章节。
共100000条