华为云用户手册

  • 前提条件 已开启容器防护,相关操作请参见开启容器节点防护。 已确认apiserver审计功能未开启,确认步骤如下: 登录到kube-apiserver所在的节点。 查看kube-apiserver.yaml文件或者已经启动的kube-apiserver进程。 进入/etc/kubernetes/manifest目录,查看kube-apiserver.yaml中是否存在--audit-log-path和--audit-policy-file,不存在即表示apiserver审计功能未正常开启。 执行ps命令,查看kube-apiserver的进程命令行中是否存在--audit-log-path和--audit-policy-file,不存在即表示apiserver审计功能未正常开启。
  • 开启apiserver审计功能 将以下yaml内容复制并保存至yaml文件,并将yaml文件命名为“audit-policy.yaml”。 该yaml内容为k8s审计功能的配置文件,您可以直接使用或者根据实际业务情况编写。 apiVersion: audit.k8s.io/v1 # This is required. kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: - "RequestReceived" rules: # The following requests were manually identified as high-volume and low-risk, # so drop them. # Kube-Proxy running on each node will watch services and endpoint objects in real time - level: None users: ["system:kube-proxy"] verbs: ["watch"] resources: - group: "" # core resources: ["endpoints", "services"] # Some health checks - level: None users: ["kubelet"] # legacy kubelet identity verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None userGroups: ["system:nodes"] verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None users: ["system:apiserver"] verbs: ["get"] resources: - group: "" # core resources: ["namespaces"] # Some system component certificates reuse the master user, which cannot be accurately distinguished from user behavior, # considering that subsequent new functions may continue to add system operations under kube-system, the cost of targeted configuration is relatively high, # in terms of the overall strategy, it is not recommended (allowed) for users to operate under the kube-system, # so overall drop has no direct impact on user experience - level: None verbs: ["get", "update"] namespaces: ["kube-system"] # Don't log these read-only URLs. - level: None nonResourceURLs: - /healthz* - /version - /swagger* # Don't log events requests. - level: None resources: - group: "" # core resources: ["events"] # Don't log leases requests - level: None verbs: [ "get", "update" ] resources: - group: "coordination.k8s.io" resources: ["leases"] # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, # so only log at the Metadata level. - level: Metadata resources: - group: "" # core resources: ["secrets", "configmaps"] - group: authentication.k8s.io resources: ["tokenreviews"] # Get responses can be large; skip them. - level: Request verbs: ["get", "list", "watch"] resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for known APIs - level: RequestResponse resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for all other requests. - level: Metadata 将audit-policy.yaml文件上传至/etc/kubernetes/路径下。 进入/etc/kubernetes/manifests目录,将以下内容填写至配置文件kube-apiserver.yaml中,开启apiserver审计功能。 --audit-policy-file=/etc/kubernetes/audit-policy.yaml --audit-log-path=/var/log/kubernetes/audit/audit.log --audit-log-maxsize=100 --audit-log-maxage=1 --audit-log-maxbackup=10 --audit-policy-file:指定审计功能所使用的配置文件。 --audit-log-path:指定用来写入审计事件的日志文件路径。不指定此标志会禁用日志后端。 --audit-log-maxsize:定义审计日志文件轮转之前的最大大小(兆字节)。 --audit-log-maxage:定义保留旧审计日志文件的最大天数。 --audit-log-maxbackup:定义要保留的审计日志文件的最大数量。 将上述启动参数填写至配置文件kube-apiserver.yaml时,注意与kube-apiserver.yaml中的启动参数格式保持一致,且不能存在制表符(tab)。 (可选)如果您的kube-apiserver是以Pod形式存在,请按如下步骤将审计日志持久化到主机上。 在kube-apiserver.yaml中找到volumeMounts字段,按如下配置挂载数据卷。 volumeMounts: - mountPath: /etc/kubernetes/audit-policy.yaml name: audit readOnly: true - mountPath: /var/log/kubernetes/audit/ name: audit-log readOnly: false 在kube-apiserver.yaml中找到volumes字段,按如下配置挂载。 volumes: - name: audit hostPath: path: /etc/kubernetes/audit-policy.yaml type: File - name: audit-log hostPath: path: /var/log/kubernetes/audit/ type: DirectoryOrCreate
  • 支持扫描和修复的漏洞类型 HSS各版本支持扫描和修复的漏洞类型请参见表 HSS各版本支持扫描和修复的漏洞类型。 表中的标识含义如下: √表示支持 ×表示不支持 表2 HSS各版本支持扫描和修复的漏洞类型 漏洞类型 功能 基础版 专业版 企业版 旗舰版 网页防篡改版 容器版 Linux系统漏洞 自动扫描漏洞(默认每周一次) √ √ √ √ √ √ 漏洞策略配置 × √ √ √ √ √ 漏洞白名单 × √ √ √ √ √ 手动扫描漏洞 × √ √ √ √ √ 漏洞一键修复 × √ (不支持全量修复,批量单次最多50条) √ (不支持全量修复,批量单次最多50条) √ √ √ Windows系统漏洞 自动扫描漏洞(默认每周一次) √ √ √ √ √ × 漏洞策略配置 × √ √ √ √ × 漏洞白名单 × √ √ √ √ × 手动扫描漏洞 × √ √ √ √ × 漏洞一键修复 × √ (不支持全量修复,批量单次最多50条) √ (不支持全量修复,批量单次最多50条) √ √ × Web-CMS漏洞 自动扫描漏洞(默认每周一次) × √ √ √ √ √ 漏洞策略配置 × √ √ √ √ √ 漏洞白名单 × √ √ √ √ √ 手动扫描漏洞 × √ √ √ √ √ 漏洞一键修复 × × × × × × 应用漏洞 自动扫描漏洞(默认每周一次) × × √ √ √ √ 漏洞策略配置 × × √ √ √ √ 漏洞白名单 × × √ √ √ √ 手动扫描漏洞 × × √ √ √ √ 漏洞一键修复 × × × × × × 应急漏洞 (默认未开启自动扫描,您可以在漏洞策略配置中设置扫描周期并开启自动扫描) 自动扫描漏洞(默认未开启) × √ √ √ √ √ 漏洞策略配置 × √ √ √ √ √ 漏洞白名单 × × × × × × × 手动扫描漏洞 × √ √ √ √ √ 漏洞一键修复 × × × × × × HSS支持扫描Web-CMS漏洞、应用漏洞、应急漏洞,不支持修复。您可以参考漏洞详情页面提示的修复建议,登录到您的服务器手动修复漏洞。 漏洞策略配置中可配置项包含自动扫描周期、自动扫描范围,关于自动扫描周期和扫描范围配置请参见自动扫描漏洞;漏洞白名单配置请参见管理漏洞白名单。
  • 漏洞扫描原理 各类型漏洞的扫描原理如表 漏洞扫描原理所示。 表1 漏洞扫描原理 漏洞分类 原理说明 Linux漏洞 通过与漏洞库进行比对,检测Linux操作系统官方维护的软件(非绿色版、非自行编译安装版;例如:kernel、openssl、vim、glibc等)是否存在的漏洞,将存在风险的结果上报至管理控制台,并为您提供漏洞告警。 Windows漏洞 通过同步微软官方的补丁公告,判断服务器上的补丁是否已经更新,并推送微软官方补丁,将存在风险的结果上报至管理控制台,并为您提供漏洞告警。 Web-CMS漏洞 通过对Web目录和文件进行检测,识别出Web-CMS漏洞,将存在风险的结果上报至管理控制台,并为您提供漏洞告警。 应用漏洞 通过检测服务器上运行的软件及依赖包发现是否存在漏洞,将存在风险的漏洞上报至控制台,并为您提供漏洞告警。 应急漏洞 通过软件版本比对和POC验证的方式,检测服务器上运行的软件和依赖包是否存在漏洞,将存在风险的漏洞上报至控制台,并给您提供漏洞告警。
  • HSS支持的操作系统 主机安全服务通过Agent为主机监测安全风险、防御外部入侵,因此只有Agent可正常运行在主机上,主机安全服务才能为主机提供服务。主机安全服务的Agent可运行的操作系统如表 Agent支持的操作系统所示。 已停止服务的Linux系统版本或者Windows系统版本,与Agent可能存在兼容性问题,建议重装或者升级为Agent支持的操作系统版本,以便获得主机安全服务更好的服务体验。 若服务器安装了McAfee软件、360安全卫士、腾讯管家等第三方安全防护软件,请先停止第三方安全防护软件的防护功能,待Agent安装完成后再开启。 CentOS 6.x版本由于Linux官网已停止更新维护,主机安全服务也不再支持CentOS 6.x及以下的系统版本,谢谢您的理解!
  • 联营商品信息填写标准 商家可对照《联营商品发布&修改操作指导图文》相关内容进行联营商品信息填写。 完善发布信息时,请对照以下标准检查发布项,不符合标准将被驳回! 请确认联营认证已通过,如下图,并联系联营认证时的华为接口人获取最新报价单,报价单错误将影响商品信息正确性,请务必保证报价单准确性。 根据报价单填写联营商品信息,可参考指导视频:联营商品信息填写标准(对照报价单)。 如需发布不涉及服务监管的SaaS类的商品,请确保此商品已通过联营商品Kit测试。 发布项 审核标准 商品接入类型 需与联营认证报价单中的“产品上架方式”一致。 商品名称 需与联营认证报价单中的“产品名称”一致。 商品LOGO 建议用正方形结构,且四周要留白约15px(使用偏瘦长的上下或者左右结构可能导致LOGO展示过小,如果必须使用,请将LOGO顶头顶尾排列,保证icon视觉面积大小统一); 上传的图片要保证LOGO的清晰度。任何变形、残缺或者不清晰将无法通过审核。 生产接口地址 SaaS类商品生产接口地址需要部署在华为云上。 如生产接口经解析为非华为云地址,请邮件发送至partner@huaweicloud.com说明原因,内容包含:公司名称、上架的商品名称、说明解析非华为云的原因、使用华为云的资源截图。 商品主图与视频 图片分辨率不小于800*600,长宽比为4:3,长宽比将影响商品最终展示效果。 主图内容需与商品相关,请勿使用无意义的插图。 视频第一帧不能为黑白单色,否则将影响商品展示效果。 未经授权请勿发布以下内容:华为商标、第三方商标、合作宣传、个人隐私数据(人脸、姓名)等。如已有授权,请邮件发送《授权函》、公司名称、上架的商品名称至partner@huaweicloud.com报备。 商品说明 需包含商品的核心功能和服务,如存在多个规格,请逐个说明。 客户案例 需体现此合作项目存在的挑战及痛点、解决方案、项目结果等;如无,请勿填写。 商品简介、商品说明、 商品亮点、客户案例等文字内容 1.请勿存在广告法敏感词,如:国家级、最佳、极致、世界第一等。 2.请勿存在无效外链、二维码,如为商品宣传需要,请打码上传。 3.请勿出现无故换行、空行的文字排版。 4.请勿出现通过其他方式获取商务等描述,如:商务申请或详细价格请咨询xxx。 5.请勿未经授权发布以下内容:华为商标、第三方商标、合作宣传、个人隐私数据(人脸、姓名)等。如已有授权,请邮件发送《授权函》、公司名称、上架的商品名称至partner@huaweicloud.com报备。 商品服务协议 下载填写处下方的《联营服务支持条款》模板,按照模板要求填写,请勿使用个人模板。 服务与支持 包含服务内容、服务时间、服务电话、服务邮箱4项内容。 软件著作权证书 软著名称需与商品名称一致,著作权人需与发布主体一致;如不一致,需将承诺函与软著一起上传。 如软著正在申请中,可提供承诺函。 所有场景承诺函模板,在上传软著处下载。 商品标签 若选择鲲鹏、混合云、loT商品认证标签,需同步上传与商品名称相符且对应的认证证书,详见商品发布注意事项。 商品规格 需注意规格名称、属性名称、数量范围、价格都需与报价单一致,如下图。 如需勾选试用,请联系华为接口人邮件报备,接口人反馈通过后方可勾选。 货物劳务名称:请咨询华为接口人,按照联营认证结论填写。 支持使用平台:选择集成联营kit后,分发到其它平台端使用(SaaS类商品) ① Welink开放平台 ② 工业软件云(工业软件SaaS服务中心)
  • 开票要求 请开具电子版或纸质版增值税专用发票,优先选择电子版。 如开具电子专票,请将开票清单及电子发票发送至发票团队公邮: hwinvoice@huawei.com (仅接收PDF或OFD格式电子发票原件,不接收照片、 扫描件),如有疑问可联系028-62844628。 如开具纸质专票,请打印开票清单连同纸质发票一起邮寄至以下地址: 发票邮寄地址:四川省成都市高新西区西源大道1899号华为成都账务共享中心 发票接收人:华为成都财务发票团队 发票接收人电话:028-62844628 纸质发票上需要有商家公司的签字或盖章。 一个申付单可开具多张发票,请将一个申付单中的所有发票合并发送,否则将导致付款延迟。 例如:某账期金额1000元,申付单号为A,商家开具2张500元的发票,2张发票需备注申付单号A,并且一起发送或寄出,当申付金额与发票总金额一致时,华为才可发起付款。 请参照下表《开票信息》填写发票。 表1 开票信息 开票信息 对应值 发票类型 增值税专用发票 单位名称(户名) 华为云计算技术有限公司 税号 91520900MA6J6CBN9Q 说明: 如果商家完成了”三证合一”变更,请在开具的增值税专用发票上的销货单位处使用变更后的纳税人识别号。 地址 贵州省贵安新区黔中大道交兴功路华为云数据中心 电话 15817463372 说明: 此电话号码仅供开票使用,请勿电话咨询此号码,有问题提工单处理。 开户行及账号 中国工商银行股份有限公司深圳华为支行 4000056019100216486 发票内容 请按销售的商品对应的税务类型开具; 如账单中有多个商品,可在发票里添加多个劳务名称。 税率 请按开票清单中的税率开具。 注意: 包周期的软件商品税率为6%。 备注 请在备注中填写申付单号和对账期次。 说明: 申付单号可在开票通知中获取。 开票清单中标*的内容为必填项,请注意补充空白项。 在发票备注栏填写申付单号和对账期次。申付单号可在开票清单查看。 开票金额请按照开票清单中的账期金额填写,如对金额有疑问可咨询邮箱partner@huaweicloud.com。 开票内容:税率为13%写软件,税率为6%写服务费(请根据实际情况,按销售的商品属性来开具)。 纸质发票上需要有商家公司的签字或盖章,电子发票和开票清单不需要。 请勿合并申付单开票,同一申付单号可对应多张发票,但一张发票不可对应多个申付单号。 请确保开票清单中的供应商联系电话与邮件有效,如开具发票存在问题,工作人员将联系供应商负责人核实。 发票中的纳税人身份需与商业信息认证身份一致,如有变更,请联系客服协助处理。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 操作须知 下面所有操作都对权限要求,默认rwuser用户具备所需权限,如果通过客户自定义用户进行管理,则需要关注是否具备操作权限。 使用具备权限的用户(可使用rwuser)连接到数据库实例。 通过createUser创建所需的用户,通过设置合适的角色来控制对应用户的权限。其中需要注意的是"passwordDigestor" 参数必须是 "server",否则命令会执行失败,增加这个约束是为了避免安全隐患。
  • 示例 创建用户时不同数据库赋予不同角色 使用db.createUser()在products数据库中创建accountAdmin01用户。 use products db.createUser( { user: "accountAdmin01", pwd: "Changeme_123", customData: { employeeId: 12345 }, roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"] }, { w: "majority" , wtimeout: 5000 } ) 以上操作赋予用户accountAdmin01以下角色: 在admin数据库中角色为clusterAdmin和readAnyDatabase。 在products数据库中角色为readWrite。 创建用户时同一数据库赋予多个角色 以下操作创建一个在products数据库中角色为readWrite和dbAdmin的用户,用户名为accountUser。 use products db.createUser( { user: "accountUser", pwd: "Changeme_123", roles: [ "readWrite", "dbAdmin" ] } ) 创建用户时不赋予角色 以下操作在admin数据库中创建一个用户名为reportsUser的用户,但是没有赋予用户角色。 use admin db.createUser( { user: "reportsUser", pwd: "Chagneme_123", roles: [ ] } ) 创建管理员用户并赋予角色 下面的操作将在admin 数据库中创建名为appAdmin的用户,并赋予该用户对config数据库的读写访问权限,使用户可以更改分片群集的某些设置,如分片均衡器设置。 use admin db.createUser( { user: "appAdmin", pwd: "Changeme_123", roles: [ { role: "readWrite", db: "config" }, "clusterAdmin" ] } ) 创建有身份验证限制的用户 以下操作将在管理员数据库中创建一个名为restricted的用户。该用户只能从IP地址192.0.2.0连接到IP地址198.51.100.0时才能进行身份验证。 use admin db.createUser( { user: "restricted", pwd: "Changeme_123", roles: [ { role: "readWrite", db: "reporting" } ], authenticationRestrictions: [ { clientSource: ["192.0.2.0"], serverAddress: ["198.51.100.0"] } ] } ) 仅使用SCRAM-SHA-256证书创建用户 下面的操作将创建一个只有SCRAM-SHA-256凭据的用户。 use reporting db.createUser( { user: "reportUser256", pwd: "Changeme_123", roles: [ { role: "readWrite", db: "reporting" } ], mechanisms: [ "SCRAM-SHA-256" ] } ) 如果设置了authenticationMechanisms参数,mechanisms字段只能包含authenticationMechanisms参数中指定的值。
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 连接代码 SSL开启 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
  • 示例 更新用户信息 products数据库中的用户appClient01,其信息如下: { "_id" : "products.appClient01", "token" : NumberLong("8424642624807814713"), "user" : "appClient01", "db" : "products", "customData" : { "empID" : "12345", "badge" : "9156" }, "roles" : [ { "role" : "readWrite", "db" : "products" }, { "role" : "read", "db" : "inventory" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } 下面操作会替换用户的自定义数据和角色数据: use products db.updateUser( "appClient01", { customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ] } ) products数据库中的用户appClient01,经过更新后信息如下: { "_id" : "products.appClient01", "token" : NumberLong("8424642624807814713"), "user" : "appClient01", "db" : "products", "customData" : { "employeeId" : "0x3039" }, "roles" : [ { "role" : "read", "db" : "assets" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } 更新用户以仅使用SCRAM-SHA-256凭证 reporting数据库中的用户reportUser256,其信息如下: { "_id" : "reporting.reportUser256", "token" : NumberLong("2827251846225877395"), "user" : "reportUser256", "db" : "reporting", "roles" : [ ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } 以下操作会将当前同时拥有 SCRAM-SHA-256 和 SCRAM-SHA-1 全权证书的用户更新为只拥有 SCRAM-SHA-256 全权证书的用户。 如果密码未与mechanisms一起指定,则只能将mechanisms更新为用户当前SCRAM机制的子集。 如果密码与mechanisms一起指定,则可以指定任何受支持的SCRAM机制。 对于SCRAM-SHA-256,passwordDigestor必须是默认值 "server"。 db.updateUser( "reportUser256", { mechanisms: [ "SCRAM-SHA-256" ] } ) reporting数据库中的用户reportUser256,经过更新后信息如下: { "_id" : "reporting.reportUser256", "token" : NumberLong("2827251846225877395"), "user" : "reportUser256", "db" : "reporting", "roles" : [ ], "mechanisms" : [ "SCRAM-SHA-256" ] }
  • 完整示例 #!/usr/bin/python import pymongo import random import os # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV username = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') mongodbUri = 'mongodb://" + username + ":" + password + "@10.66.187.127:27017/admin' mongodbUri = 'mongodb://%s:%s@10.66.187.127:27017/admin' client = pymongo.MongoClient(mongodbUri % (username, password )) db = client.somedb db.user.drop() element_num=10 for id in range(element_num): name = random.choice(['R9','cat','owen','lee','J']) sex = random.choice(['male','female']) db.user.insert_one({'id':id, 'name':name, 'sex':sex}) content = db.user.find() for i in content: print i 更多PyMongo接口请参考官方文档。 父主题: 基于Python开发
  • 用户管理 DDS上用户的权限都是基于角色管理,通过给用户赋予不同的角色来进行差异化的权限控制。 为了给文档数据库实例提供管理服务,您在创建数据库实例时,文档数据库服务会自动为实例创建admin、monitor和backup账户。如果试图删掉、重命名、修改这些账户的密码和权限,会导致出错。 对于数据库管理员账户rwuser,以及您所创建的账户,允许修改账户的密码。 创建用户 更新用户 删除用户 父主题: 管理数据库权限
  • 迁移准备 权限准备: 当使用 DRS 将本地数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1所示: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库的权限设置: 需要确保源数据库MongoDB的账号具备表1的权限,若权限不足,需要在源数据库端创建高权限的账号。 目标数据库的权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库的网络设置: 本地MongoDB数据库实时迁移至本云DDS的场景,一般可以使用VPN网络和公网网络两种方式进行迁移,您可以根据实际情况为本地MongoDB数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移,该方式下的数据迁移过程较为方便和经济。 目标数据库的网络设置: 若通过VPN访问,请先开通VPN服务,确保源数据库和目标DDS网络互通。 若通过公网网络访问,目标DDS不需要进行设置。 安全规则准备: 源数据库的白名单设置: 若通过公网网络进行迁移,源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。在设置网络白名单之前需要获取DRS迁移实例,具体方法如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 若通过VPN网络进行迁移,源库需要将DRS迁移实例的私有IP添加到其网络白名单内,确保源端和目标端网络互通。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 步骤3:用户登录并验证权限 用户创建完成后,可以使用新用户的用户名及身份凭证登录华为云验证权限,即“DDS ReadOnlyAccess”权限。更多用户登录方法请参见用户登录华为云方法。 在华为云登录页面,单击左下角的“IAM用户”。 图10 IAM用户登录 在“IAM用户登录”页面,输入账号名、用户名及用户密码,使用新创建的用户登录。 账号名为该IAM用户所属华为账号的名称。 用户名和密码为账号在IAM创建用户时输入的用户名和密码。 如果登录失败,您可以联系您的账号主体,确认用户名及密码是否正确,或是重置用户名及密码,重置方法请参见忘记IAM用户密码。 登录成功后,进入华为云控制台,请先切换至授权区域。 图11 切换至授权区域 在“服务列表”中选择文档数据库服务,进入DDS主界面,单击右上角“购买数据库实例”,若提示权限不足,表示“DDS ReadOnlyAccess”已生效。 在“服务列表”中选择除文档数据库服务外的任一服务,如“弹性云服务器”,若提示权限不足,表示“DDS ReadOnlyAccess”已生效。
  • 迁移准备 权限准备: 当使用 DRS 将其他云MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表1的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库需要开放公网访问。 源数据库的网络设置: 源数据库MongoDB实例需要开放公网域名的访问。 目标数据库的网络设置:目标端不需要进行设置。 安全规则准备: 源数据库安全组规则设置: 源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。 在设置网络白名单之前,需要先获取DRS迁移实例的弹性公网IP,具体操作如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 关闭脚本运行功能 启用javascriptEnabled选项security.javascriptEnabled,可以在mongod 服务端运行javascript脚本,存在安全风险。禁用javascriptEnabled选项,mapreduce、group命令等将无法使用。如果您的应用中没有mapreduce等操作的需求,为了安全起见,建议关闭javascriptEnabled选项。详情请参见参数调优。
  • 检查角色的合理性 DDS支持“基于角色”的方法授予账号对数据和命令的访问权限。建议管理员结合业务需要,遵从最低授权原则,创建合适的自定义角色,对账号进行授权。如果发现账号权限过大,请结合业务需要,对账号权限进行更新或者删除。 表1 DDS高权限角色的描述 序号 检查项 描述 1 检查在用户表中存在userAdmin角色的用户 当在admin数据库定义了userAdmin角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。 2 检查在用户表中存在userAdminAnyDatabase角色的用户 当定义了userAdminAnyDatabase角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。 3 检查拥有anyAction动作权限的角色 当定义了anyAction动作权限的角色,该角色用户拥有对应数据库的任何操作,不利于权限的管理。 4 检查拥有anyResource动作权限的角色 当定义了anyResource动作权限的角色,该角色用户拥有对应数据库的所有操作资源,不利于权限的管理。 5 检查拥有changeCustomData动作权限的角色 当定义了changeCustomData动作权限的角色,该角色用户拥有对应数据库所有用户自定义信息的更改权限,不利于权限的管理。 6 检查拥有changePassword动作权限的角色 当定义了changePassword动作权限的角色,该角色用户即可拥有对应数据库所有用户密码的更改权限,不利于权限的管理。 7 检查拥有createRole动作权限的角色 当定义了createRole动作权限的角色,该角色用户即可拥有对应数据库中任意创建角色的权限,不利于权限的管理。 8 检查拥有createUser动作权限的角色 当定义了createUser动作权限的角色,该角色用户即可拥有对应数据库中任意创建用户的权限,不利于权限的管理。 9 检查拥有dropRole动作权限的角色 当定义了dropRole动作权限的角色,该角色用户即可拥有对应数据库中删除任意角色的权限,不利于权限的管理。 10 检查拥有dropUser动作权限的角色 当定义了dropUser动作权限的角色,该角色用户即可拥有对应数据库中删除任意用户的权限,不利于权限的管理。 11 检查拥有grantRole动作权限的角色 当定义了grantRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户授予任意角色的权限,不利于权限的管理。 12 检查拥有revokeRole动作权限的角色 当定义了revokeRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户取消任意角色的权限,不利于权限的管理。 13 检查拥有authSchemaUpgrade动作权限的角色 当定义了authSchemaUpgrade动作权限的角色,该角色用户即可拥有执行authschemaupgrade的权限,不利于权限的管理。authschemaupgrade命令可以修改用户认证转换格式。 14 检查拥有closeAllDatabases动作权限的角色 当定义了closeAllDatabases动作权限的角色,该角色用户即可拥有执行closeAllDatabases命令的权限,关闭所有数据库并释放MongoDB占用的内存,不利于权限的管理。 15 检查拥有dropDatabase动作权限的角色 当定义了dropDatabase动作权限的角色,该角色用户即可拥有执行dropDatabase命令的权限,删除任意的数据库,不利于权限的管理。 16 检查拥有getParameter动作权限的角色 当定义了getParameter动作权限的角色,该角色用户即可拥有执行getParameter命令的权限,任意查看命令行选项的值,不利于权限的管理。 17 检查拥有setParameter动作权限的角色 当定义了setParameter动作权限的角色,该角色用户即可拥有执行setParameter命令的权限,任意修改命令行选项的值,不利于权限的管理。 18 检查拥有shutdown动作权限的角色 当定义了shutdown动作权限的角色,该角色用户即可拥有执行shutdown命令的权限,清除所有数据库资源,然后终止进程,不利于权限的管理。 19 检查拥有getCmdLineOpts动作权限的角色 当定义了getCmdLineOpts动作权限的角色,该角色用户即可拥有执行getCmdLineOpts命令的权限,获得argv和parsed两个字段,argv包含用于调用mongod或mongos命令字符串,parsed包含所有运行时选项,不利于权限的管理。 20 检查拥有internal动作权限的角色 当定义了internal动作权限的角色,该角色用户即可拥有对应数据库进行任何操作的权限,不利于权限的管理。 21 检查拥有readWrite角色的用户 当定义了readWrite角色的用户,该角色用户即可拥有对应数据库进行读的权限加上更改数据的权限,不利于权限的管理。 22 检查拥有backup角色的用户 当定义了backup角色的用户,该角色用户即可拥有在admin数据库mms.bak文档中insert、update的权限,不利于权限的管理。 23 检查拥有clusterAdmin角色的用户 当定义了clusterAdmin角色的用户,该角色用户即可拥有最高集群管理的权限,这个角色包括了clusterManager,clusterMonitor,hostManager角色的权限,不利于权限的管理。 24 检查拥有clusterManager角色的用户 当定义了clusterManager角色的用户,在集群上管理和监视操作,该角色用户可以有权管理分别被用来共享、复制的设置本地数据库的权限,不利于权限的管理。 25 检查拥有clusterMonitor角色的用户 当定义了clusterMonitor角色的用户,该角色用户即可拥有为监视工具提供只读的权限,不利于权限的管理。 26 检查拥有dbAdmin角色的用户 当定义了dbAdmin角色的用户,该角色用户即可拥有对应数据库管理员的权限,不利于权限的管理。 27 检查拥有dbAdminAnyDatabase角色的用户 当定义了dbAdminAnyDatabase角色的用户,该角色用户即可拥有和dbAdmin角色一样的权限,除了适用于集群内所有数据库这个特性,这个角色也为整个集群提供listDatabases操作,不利于权限的管理。 28 检查拥有dbOwner角色的用户 当定义了dbOwner角色的用户,该角色用户即可拥有执行数据库所有管理操作的权限,这个角色合并了readWrite,dbAdmin,userAdmin角色的权限,不利于权限的管理。 29 检查拥有hostManager角色的用户 当定义了hostManager角色的用户,该角色用户即可拥有监视和管理服务器的权限,不利于权限的管理。 30 检查拥有readAnyDatabase角色的用户 当定义了readAnyDatabase角色的用户,该角色用户即可拥有读任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。 31 检查拥有readWriteAnyDatabase角色的用户 当定义了readWriteAnyDatabase角色的用户,该角色用户即可拥有读写任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。 32 检查拥有restore角色的用户 当定义了restore角色的用户,该角色用户即可拥有还原备份所需的权限,不利于权限的管理。 33 检查拥有root角色的用户 当定义了root角色的用户,该角色用户即可拥有所有资源的所有操作,包括readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabases,clusterAdmin,restore角色的权限,不利于权限的管理。 34 检查拥有userAdmin角色的用户 当定义了userAdmin角色的用户,该角色用户即可拥有授权任意用户的权限,包括它们自己的,不利于权限的管理。 35 检查拥有userAdminAnyDatabase角色的用户 当定义了userAdminAnyDatabase角色的用户,该角色用户即可拥有授权所有数据库任意用户的权限,包括它们自己的,不利于权限的管理。
  • 迁移准备 权限准备: 当使用 DRS 将ECS自建MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表1: 表1 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表1的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库所在的region需要和目标DDS所在的region保持一致。 源数据库可以与目标DDS实例在同一个VPC,也可以不在同一个VPC。 当不在同一个VPC的时候,要求源数据库实例和目标端DDS实例所处的子网处于不同网段,此时需要通过建立对等连接实现网络互通。 具体操作请参见《虚拟私有云用户指南》中“VPC对等连接”章节。 当在同一VPC的时候,网络默认是互通的。 安全规则准备: 同一VPC场景下,默认网络是连通的,不需要单独设置安全组。 不同VPC场景下,通过建立对等连接就可以实现网络互通,不需要单独设置安全组。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后,手动添加到目标DDS中。
  • 前提条件 根据业务需求规划租户的名称,不得与当前集群中已有的角色或者Yarn队列重名。 如果租户需要使用存储资源,则提前根据业务需要规划好存储路径,分配的完整存储路径在HDFS目录中不存在。 规划当前租户可分配的资源,确保每一级别父租户下,直接子租户的资源百分比之和不能超过100%。 已完成IAM用户同步(在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM用户同步)。 图1 IAM用户同步
  • 操作步骤 在集群详情页,单击“租户管理”。 图2 租户管理 MRS 3.x及之后版本请参考使用说明。 单击“添加租户”,打开添加租户的配置页面,参见以下表格内容为租户配置属性(以MRS 3.x版本集群为例)。 表1 租户参数一览表 参数名 描述 名称 指定当前租户的名称,长度为3到50,可包含数字、字母和下划线。 租户类型 可选参数值为“叶子租户”和“非叶子租户”。当选中“叶子租户”时表示当前租户为叶子租户,无法再添加子租户。当选中“非叶子租户”时表示当前租户可以再添加子租户。 计算资源 为当前租户选择动态计算资源。系统将自动在Yarn中以租户名称创建任务队列。计算资源不选择“Yarn”时,系统不会自动创建任务队列。 配置模式 计算资源选择“Yarn”时,“配置模式”可选“基础”或“高级”。 基础:需配置“默认资源池容量 (%)”,配置当前租户在“default”资源池中使用的计算资源百分比。 高级:需配置如下参数。 权重:资源分配权重,取值范围从0到100。租户资源占比=租户权重/同级别租户总权重之和。 最小资源:保证租户能获得的资源(有抢占支持)。取值可以是父租户资源的百分比或绝对值。当租户作业量比较少时,资源会自动借给其他租户,当租户能使用的资源不满足最小资源时,可以通过抢占来要回之前借出的资源。 最大资源:租户最多能使用的资源,租户不能得到比最大资源设定更多的资源。取值可以是父租户资源的百分比或绝对值。 预留资源:租户资源预留资源。即使租户资源内没有作业,预留的资源也不能给别的租户资源使用。取值可以是父租户资源的百分比或绝对值。 默认资源池容量 (%) 配置当前租户在“default”资源池中使用的计算资源百分比。“配置模式”为“基础”时配置。 储存资源 为当前租户选择存储资源。系统将自动在“/tenant”目录中以租户名称创建文件夹。第一次创建租户时,系统自动在HDFS根目录创建“/tenant”目录。存储资源不选择“HDFS”时,系统不会在HDFS中创建存储目录。 文件/目录数上限 HDFS中创建存储文件/目录数上限。 存储空间配额 配置当前租户使用的HDFS存储空间配额。取值范围为“1”到“8796093022208”。单位为MB或GB。此参数值表示租户可使用的HDFS存储空间上限,不代表一定使用了这么多空间。如果参数值大于HDFS物理磁盘大小,实际最多使用全部的HDFS物理磁盘空间。 说明: 为了保证数据的可靠性,HDFS中每保存一个文件则自动生成1个备份文件,即默认共2个副本。HDFS存储空间表示所有副本文件在HDFS中占用的磁盘空间大小总和。例如“存储空间配额”设置为“500MB”,则实际只能保存约500/2=250MB大小的文件。 存储路径 配置租户在HDFS中的存储目录。系统默认将自动在“/tenant”目录中以租户名称创建文件夹。例如租户“ta1”,默认HDFS存储目录为“tenant/ta1”。第一次创建租户时,系统自动在HDFS根目录创建“/tenant”目录。支持自定义存储路径。 服务 配置当前租户关联使用的其他服务资源,支持HBase。单击“关联服务”,在“服务”选择“HBase”。在“关联类型”选择“独占”表示独占服务资源,选择“共享”表示共享服务资源。 描述 配置当前租户的描述信息。 单击“确定”保存,完成租户添加。 保存配置需要等待一段时间,界面右上角弹出提示“租户创建成功。”,租户成功添加。 创建租户时将自动创建租户对应的角色、计算资源和存储资源。 新角色包含计算资源和存储资源的权限。此角色及其权限由系统自动控制,不支持通过“角色管理”进行手动管理。 使用此租户时,请创建一个系统用户,并分配Manager_tenant角色以及租户对应的角色。具体操作请参见创建用户。
  • 前提条件 连接数据库的弹性云服务器必须和GeminiDB Mongo实例之间网络互通,可以使用curl命令连接GeminiDB Mongo实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo3.10版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 连接代码 SSL开启 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
  • 前提条件 连接数据库的弹性云服务器必须和GeminiDB Mongo实例之间网络互通,可以使用curl命令连接GeminiDB Mongo实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • 使用非SSL方式连接实例的示例代码 package main import ( "fmt" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" "os" ) func main(){ c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "http://ip:port", // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 username = os.Getenv("EXAMPLE_USERNAME_ENV"), password = os.Getenv("EXAMPLE_PASSWORD_ENV"), Username: username, Password: password, }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","db0","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println("the result is: ",response.Results) } }
  • 使用默认SSL证书连接实例的示例代码 package main import ( "fmt" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" "os" ) func main(){ c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "https://ip:port", // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 username = os.Getenv("EXAMPLE_USERNAME_ENV"), password = os.Getenv("EXAMPLE_PASSWORD_ENV"), Username:username, Password:password, InsecureSkipVerify: true, // true表示不验证服务端的信息,可能存在被攻击的风险,建议设为false,具体请参见使用CCM私有证书连接实例的示例代码。 }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","databases","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println(response.Results) } }
  • 使用CCM私有证书连接实例的示例代码 package main import ( "fmt" "io/ioutil" "crypto/tls" "crypto/x509" _ "github.com/influxdata/influxdb1-client" // this is important because of the bug in go mod client "github.com/influxdata/influxdb1-client/v2" "os" ) func main(){ pool := x509.NewCertPool() caCertPath := "/data/CA/agent/ca.crt" caCrt, err := ioutil.ReadFile(caCertPath) if err != nil { fmt.Println("ReadFile err:", err) return } pool.AppendCertsFromPEM(caCrt) // 此处是将ca.crt证书内嵌到程序中,也可以使用sudo cp {client}/ca.crt /etc/ssl/certs命令将证书添加到本机上。 c, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "https://ip:port", // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 username = os.Getenv("EXAMPLE_USERNAME_ENV"), password = os.Getenv("EXAMPLE_PASSWORD_ENV"), Username: username, Password: password, TLSConfig: &tls.Config{ RootCAs: pool, InsecureSkipVerify: false, // false表示需要校验服务端的证书。 }, }) if err != nil { fmt.Println("Error creating InfluxDB Client: ", err.Error()) } q := client.NewQuery("select * from cpu","database","ns") if response, err := c.Query(q); err == nil && response.Error() == nil { fmt.Println("the result is: ",response.Results) } }
  • 使用非SSL方式连接实例的示例代码 from influxdb import InfluxDBClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV username = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') client = InfluxDBClient(host=IP, port=****, username=username, password=password, ssl=False) client.get_list_database() 上述host,port请以实际值为准。
共100000条