云服务器内容精选

  • 数据库安全审计支持数据库部署在哪些操作系统上? 您需要在数据库端、应用端或代理端安装Agent,将添加的数据库连接到数据库安全审计实例。 数据库安全审计的Agent可运行在Linux64位和Windows64位操作系统上,安装节点的操作系统说明如下所示。 数据库安全审计的Agent支持的Linux系统版本如表1所示。 表1 Agent支持的Linux系统版本说明 系统名称 系统版本 CentOS CentOS 7.0 (64bit) CentOS 7.1 (64bit) CentOS 7.2 (64bit) CentOS 7.3 (64bit) CentOS 7.4 (64bit) CentOS 7.5 (64bit) CentOS 7.6 (64bit) CentOS 7.8 (64bit) CentOS 7.9 (64bit) CentOS 8.0 (64bit) CentOS 8.1 (64bit) CentOS 8.2 (64bit) Debian Debian 7.5.0 (64bit) Debian 8.2.0 (64bit) Debian 8.8.0 (64bit) Debian 9.0.0 (64bit) Debian 10.0.0 (64bit) Fedora Fedora 24 (64bit) Fedora 25 (64bit) Fedora 29 (64bit) Fedora 30 (64bit) OpenSUSE SUSE 13 (64bit) SUSE 15 (64bit) SUSE 42 (64bit) SUSE SUSE 11 SP4 (64bit) SUSE 12 SP1 (64bit) SUSE 12 SP2 (64bit) Ubuntu Ubuntu 14.04 (64bit) Ubuntu 16.04 (64bit) Ubuntu 18.04 (64bit) Ubuntu 20.04 (64bit)(华为 云审计 实例:23.02.27.182148 及其之后的版本支持) EulerOS Euler 2.2 (64bit) Euler 2.3 (64bit) Euler 2.5 (64bit) OpenEuler OpenEuler 20.03 (64bit) Oracle Linux Oracle Linux 6.9 (64bit) Oracle Linux 7.4 (64bit) Red Hat Red Hat Enterprise Linux 7.4 (64bit) Red Hat Enterprise Linux 7.6 (64bit) NeoKylin NeoKylin 7.0 (64bit) Kylin Kylin Linux Advanced Server release V10 (64bit) Uniontech OS Uniontech OS Server 20 Enterprise (64bit) Huawei Cloud Euler Huawei Cloud Euler 2.0 (64bit) KylinSec KylinSec 3.4(64bit) Anolis OS 7.9(64bit) 8.4(64bit) 8.6(64bit) 数据库安全审计的Agent支持的Windows系统版本如下所示: Windows Server 2008 R2(64bit) Windows Server 2012 R2(64bit) Windows Server 2016(64bit) Windows Server 2019(64bit) Windows 7(64bit) Windows 10(64bit) DBSS Agent的运行依赖Npcap,如果安装过程中提示"Npcap not found,please install Npcap first",请安装Npcap后,再安装DBSS Agent。 Npcap下载链接:https://npcap.com/#download 图1 Npcap not found 父主题: 数据库安全审计功能类
  • 如何判断入网流量是否经过了Anti-DDoS流量清洗服务? Anti-DDoS仅对华为云内的EIP提供DDoS攻击防护。Anti-DDoS设备部署在机房出口处,如图1所示。 图1 网络拓扑架构图 如果入网流量来自公网,则会经过Anti-DDoS流量清洗服务;如果入网流量来自华为云内部,则不会经过Anti-DDoS流量清洗服务。 如果您从公网访问EIP,入网流量会先经过公网路由。您可以在EIP所在的虚拟机上查看访问的路由,如果有经过公网路由,则经过了Anti-DDoS流量清洗服务。 如果经过了Anti-DDoS流量清洗服务,当EIP受到DDoS攻击时,会有以下信息: Anti-DDoS流量清洗服务控制台会有流量清洗记录。 您会收到告警提醒消息(短信或Email)。 如果您从华为云内部访问EIP,入网流量不会经过公网路由,不经过公网路由,则不经过Anti-DDoS流量清洗服务。 例如:您在华为云两个不同的Region分别申请了一个EIP,那么两个EIP之间相互访问,则不经过Anti-DDoS流量清洗服务。 父主题: 基本功能类
  • 代码示例 使用Java调用 CDM 服务的REST API创建、启动、查询、删除CDM作业的代码示例如下: package cdmclient; import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class CdmClient { private final static String DOMAIN_NAME="云账号名"; private final static String USER_NAME="云用户名"; private final static String USER_PASSWORD="云用户密码"; private final static String PROJECT_ID="项目ID"; private final static String CLUSTER_ID="CDM集群ID"; private final static String JOB_NAME="作业名称"; private final static String FROM_LINKNAME="源连接名称"; private final static String TO_LINKNAME="目的连接名称"; private final static String IAM _ENDPOINT="IAM的Endpoint"; private final static String CDM_ENDPOINT="CDM的Endpoint"; private CloseableHttpClient httpclient; private String token; public CdmClient() { this.httpclient = createHttpClient(); this.token = login(); } private CloseableHttpClient createHttpClient() { CloseableHttpClient httpclient =HttpClients.createDefault(); return httpclient; } private String login(){ HttpPost httpPost = new HttpPost("https://"+IAM_ENDPOINT+"/v3/auth/tokens"); String json = "{\r\n"+ "\"auth\": {\r\n"+ "\"identity\": {\r\n"+ "\"methods\": [\"password\"],\r\n"+ "\"password\": {\r\n"+ "\"user\": {\r\n"+ "\"name\": \""+USER_NAME+"\",\r\n"+ "\"password\": \""+USER_PASSWORD+"\",\r\n"+ "\"domain\": {\r\n"+ "\"name\": \""+DOMAIN_NAME+"\"\r\n"+ "}\r\n"+ "}\r\n"+ "}\r\n"+ "},\r\n"+ "\"scope\": {\r\n"+ "\"project\": {\r\n"+ "\"name\": \"PROJECT_NAME\"\r\n"+ "}\r\n"+ "}\r\n"+ "}\r\n"+ "}\r\n"; try { StringEntity s = new StringEntity(json); s.setContentEncoding("UTF-8"); s.setContentType("application/json"); httpPost.setEntity(s); CloseableHttpResponse response = httpclient.execute(httpPost); Header tokenHeader = response.getFirstHeader("X-Subject-Token"); String token = tokenHeader.getValue(); System.out.println("Login successful"); return token; } catch (Exception e) { throw new RuntimeException("login failed.", e); } } /*创建作业*/ public void createJob(){ HttpPost httpPost = new HttpPost("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job"); /**此处JSON信息比较复杂,可以先在作业管理界面上创建一个作业,然后单击作业后的“作业JSON定义”,复制其中的JSON内容,格式化为Java字符串语法,然后粘贴到此处。 *JSON消息体中一般只需要替换连接名、导入和导出的表名、导入导出表的字段列表、源表中用于分区的字段。**/ String json = "{\r\n"+ "\"jobs\": [\r\n"+ "{\r\n"+ "\"from-connector-name\": \"generic-jdbc-connector\",\r\n"+ "\"name\": \""+JOB_NAME+"\",\r\n"+ "\"to-connector-name\": \"generic-jdbc-connector\",\r\n"+ "\"driver-config-values\": {\r\n"+ "\"configs\": [\r\n"+ "{\r\n"+ "\"inputs\": [\r\n"+ "{\r\n"+ "\"name\": \"throttlingConfig.numExtractors\",\r\n"+ "\"value\": \"1\"\r\n"+ "}\r\n"+ "],\r\n"+ "\"validators\": [],\r\n"+ "\"type\": \"JOB\",\r\n"+ "\"id\": 30,\r\n"+ "\"name\": \"throttlingConfig\"\r\n"+ "}\r\n"+ "]\r\n"+ "},\r\n"+ "\"from-link-name\": \""+FROM_LINKNAME+"\",\r\n"+ "\"from-config-values\": {\r\n"+ "\"configs\": [\r\n"+ "{\r\n"+ "\"inputs\": [\r\n"+ "{\r\n"+ "\"name\": \"fromJobConfig.schemaName\",\r\n"+ "\"value\": \"sqoop\"\r\n"+ "},\r\n"+ "{\r\n"+ "\"name\": \"fromJobConfig.tableName\",\r\n"+ "\"value\": \"city1\"\r\n"+ "},\r\n"+ "{\r\n"+ "\"name\": \"fromJobConfig.columnList\",\r\n"+ "\"value\": \"code&name\"\r\n"+ "},\r\n"+ "{\r\n"+ "\"name\": \"fromJobConfig.partitionColumn\",\r\n"+ "\"value\": \"code\"\r\n"+ "}\r\n"+ "],\r\n"+ "\"validators\": [],\r\n"+ "\"type\": \"JOB\",\r\n"+ "\"id\": 7,\r\n"+ "\"name\": \"fromJobConfig\"\r\n"+ "}\r\n"+ "]\r\n"+ "},\r\n"+ "\"to-link-name\": \""+TO_LINKNAME+"\",\r\n"+ "\"to-config-values\": {\r\n"+ "\"configs\": [\r\n"+ "{\r\n"+ "\"inputs\": [\r\n"+ "{\r\n"+ "\"name\": \"toJobConfig.schemaName\",\r\n"+ "\"value\": \"sqoop\"\r\n"+ "},\r\n"+ "{\r\n"+ "\"name\": \"toJobConfig.tableName\",\r\n"+ "\"value\": \"city2\"\r\n"+ "},\r\n"+ "{\r\n"+ "\"name\": \"toJobConfig.columnList\",\r\n"+ "\"value\": \"code&name\"\r\n"+ "}, \r\n"+ "{\r\n"+ "\"name\": \"toJobConfig.shouldClearTable\",\r\n"+ "\"value\": \"true\"\r\n"+ "}\r\n"+ "],\r\n"+ "\"validators\": [],\r\n"+ "\"type\": \"JOB\",\r\n"+ "\"id\": 9,\r\n"+ "\"name\": \"toJobConfig\"\r\n"+ "}\r\n"+ "]\r\n"+ "}\r\n"+ "}\r\n"+ "]\r\n"+ "}\r\n"; try { StringEntity s = new StringEntity(json); s.setContentEncoding("UTF-8"); s.setContentType("application/json"); httpPost.setEntity(s); httpPost.addHeader("X-Auth-Token", this.token); httpPost.addHeader("X-Language", "en-us"); CloseableHttpResponse response = httpclient.execute(httpPost); int status = response.getStatusLine().getStatusCode(); if(status == 200){ System.out.println("Create job successful."); }else{ System.out.println("Create job failed."); HttpEntity entity = response.getEntity(); System.out.println(EntityUtils.toString(entity)); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Create job failed.", e); } } /*启动作业*/ public void startJob(){ HttpPut httpPut = new HttpPut("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME+"/start"); String json = ""; try { StringEntity s = new StringEntity(json); s.setContentEncoding("UTF-8"); s.setContentType("application/json"); httpPut.setEntity(s); httpPut.addHeader("X-Auth-Token", this.token); httpPut.addHeader("X-Language", "en-us"); CloseableHttpResponse response = httpclient.execute(httpPut); int status = response.getStatusLine().getStatusCode(); if(status == 200){ System.out.println("Start job successful."); }else{ System.out.println("Start job failed."); HttpEntity entity = response.getEntity(); System.out.println(EntityUtils.toString(entity)); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Start job failed.", e); } } /*循环查询作业运行状态,直到作业运行结束。*/ public void getJobStatus(){ HttpGet httpGet = new HttpGet("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME+"/status"); try { httpGet.addHeader("X-Auth-Token", this.token); httpGet.addHeader("X-Language", "en-us"); boolean flag = true; while(flag){ CloseableHttpResponse response = httpclient.execute(httpGet); int status = response.getStatusLine().getStatusCode(); if(status == 200){ HttpEntity entity = response.getEntity(); String msg = EntityUtils.toString(entity); if(msg.contains("\"status\":\"SUCCEEDED\"")){ System.out.println("Job succeeded"); break; }else if (msg.contains("\"status\":\"FAILED\"")){ System.out.println("Job failed."); break; }else{ Thread.sleep(1000); } }else{ System.out.println("Get job status failed."); HttpEntity entity = response.getEntity(); System.out.println(EntityUtils.toString(entity)); break; } } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Get job status failed.", e); } } /*删除作业*/ public void deleteJob(){ HttpDelete httpDelte = new HttpDelete("https://"+CDM_ENDPOINT+"/cdm/v1.0/"+PROJECT_ID+"/clusters/"+CLUSTER_ID+"/cdm/job/"+JOB_NAME); try { httpDelte.addHeader("X-Auth-Token", this.token); httpDelte.addHeader("X-Language", "en-us"); CloseableHttpResponse response = httpclient.execute(httpDelte); int status = response.getStatusLine().getStatusCode(); if(status == 200){ System.out.println("Delete job successful."); }else{ System.out.println("Delete job failed."); HttpEntity entity = response.getEntity(); System.out.println(EntityUtils.toString(entity)); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Delete job failed.", e); } } /*关闭*/ public void close(){ try { httpclient.close(); } catch (IOException e) { throw new RuntimeException("Close failed.", e); } } public static void main(String[] args){ CdmClient cdmClient = new CdmClient(); cdmClient.createJob(); cdmClient.startJob(); cdmClient.getJobStatus(); cdmClient.deleteJob(); cdmClient.close(); } }
  • 数据库安全审计的审计数据可以保存多久? 数据库安全审计支持将在线和归档的审计数据至少保存180天的功能。未开启备份时,存储在审计实例上,原则上保存时间为180天,这取决于日志量大小。如果日志量较大,会以滚动删除的方式删除存放时间最久的日志以保证磁盘空间使用率。开启备份时,会同时保存在obs桶里,此时保存的时间会对应着obs存储的时间。 由于审计数据存放在日志数据库中,而日志数据库的硬盘容量可能影响保存时长。为了确保审计数据满足保存时长要求,建议您通过以下方式处理: 根据业务数据库审计数据实际情况,选择购买的数据库安全审计版本 审计数据容量较小:购买基础版 审计数据容量较大:购买专业版或高级版 数据库安全审计各版本的规格说明如所表1示。 备份审计日志 有关备份审计日志的详细操作,请参见备份数据库审计日志。 表1 数据库安全审计版本性能规格说明 版本 支持的数据库实例 系统资源要求 性能参数 入门版 最多支持1个数据库实例 CPU:4U 内存:16GB 硬盘:560GB 吞吐量峰值:1,000条/秒 入库速率:120万条/小时 1亿条在线SQL语句存储 15亿条归档SQL语句存储 基础版 最多支持3个数据库实例 CPU:4U 内存:16GB 硬盘:560GB 吞吐量峰值:3,000条/秒 入库速率:360万条/小时 4亿条在线SQL语句存储 50亿条归档SQL语句存储 专业版 最多支持6个数据库实例 CPU:8U 内存:32GB 硬盘:1,084GB 吞吐量峰值:6,000条/秒 入库速率:720万条/小时 6亿条在线SQL语句存储 100亿条归档SQL语句存储 高级版 最多支持30个数据库实例 CPU:16U 内存:64GB 硬盘:2,108GB 吞吐量峰值:30,000条/秒 入库速率:1,080万条/小时 15亿条在线SQL语句存储 600亿条归档SQL语句存储 数据库实例通过数据库IP+数据库端口计量。 如果同一数据库IP具有多个数据库端口,数据库实例数为数据库端口数。1个数据库IP只有1个数据库端口,即为一个数据库实例;1个数据库IP具有N个数据库端口,即为N个数据库实例。 例如:用户有2个数据库资产分别为IP1和IP2,IP1有一个数据库端口,则为1个数据库实例;IP2有3个数据库端口,则为3个数据库实例。IP1和IP2合计为4个数据库实例,选择服务版本规格时需要大于或等于4个数据库实例,即选用专业版(最多支持审计6个数据库实例)。 不支持修改规格。若要修改,请退订后重购。 云原生版仅支持在RDS控制台购买。 本表中的系统资源要求,是指购买数据库安全审计实例时会消耗的系统资源。购买时,用户的系统需要满足审计版本对应的配置。 本表中在线SQL语句的条数,是按照每条SQL语句的容量为1KB来计算的。 父主题: 数据库安全审计功能类
  • 配置阻断IP的防护规则需要注意哪些? 配置阻断IP的防护规则需注意以下几点: 建议优先配置精准的IP(如192.168.10.5),减少网段配置,避免误拦截。 对于反向代理IP(如内容分发网络(CDN)、DDoS高防、 Web应用防火墙 (WAF)的回源IP),请谨慎配置阻断的防护规则,建议配置放行的防护规则或白名单。 对于正向代理IP(如公司出口IP),影响范围较大,请谨慎配置阻断的防护规则。 配置“地域”防护时,需考虑公网IP可能更换地址的情况。 父主题: 功能类
  • 数据库安全服务实例所属VPC是否可以更改? 不可以。实例所属的VPC是由私网网段、路由表和至少一个子网组成,拥有独立的安全组和网络ACL来保障云资源安全,详情请参见什么是虚拟私有云。 若有VPC的变更需求,可通过申请退订变更或提交工单提交工单申请VPC对接: 退订变更:对想要变更的VPC对应实例参照如何退订数据库安全服务?进行退订,退订后在目标VPC重新购买数据库安全审计(建议)。 VPC对接:通过提交工单提交工单申请目标VPC人工对接。 父主题: 数据库安全审计功能类
  • 当遭受超过5Gbps的攻击时如何处理? Anti-DDoS为普通用户免费提供2Gbps的DDoS攻击防护,最高可达5Gbps(视华为云可用带宽情况)。系统会对超过5Gbps的受攻击公网IP进行黑洞处理,正常访问流量会丢弃,建议用户购买DDoS原生高级防护或DDoS高防,提升防护能力。 有关Anti-DDoS流量清洗、DDoS原生高级防护和DDoS高防的详细介绍,请参见什么是DDoS防护?。 父主题: 基本功能类