华为云用户手册

  • 管理控制台审计日志 pEDA通过 云审计 服务(Cloud Trace Service, CTS )记录pEDA 管理控制台的关键操作事件,比如开通服务、变更服务等。记录的日志可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 用户开通云审计服务并创建和配置追踪器后,CTS可记录pEDA在管理控制台上的管理事件和数据事件用于审计。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 pEDA支持云审计的操作事件和查看审计日志方法,请参见管理控制台审计日志。
  • 响应示例 状态码: 200 响应成功 { "offset" : 0, "limit" : 5, "count" : 1, "data" : [ { "otherNumber" : "", "otherNumberCountry" : "", "country" : "chinaPR", "phone" : "+86135xxxx0611", "email" : "******", "corpName" : null, "deptName" : null, "position" : null, "address" : null, "remarks" : null, "id" : "af4aaae4b29d45649e3c61f48ee2f64b", "name" : "李四", "customNumber" : null, "type" : "CORP", "updateTime" : 1665994358499 } ] }
  • IMS权限 默认情况下,管理员创建的 IAM 用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 IMS部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域下的项目中都生效。访问IMS时,需要先切换至授权区域。 根据授权精度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 表1 IMS系统角色 系统角色 描述 依赖关系 IMS Administrator 镜像服务 的管理员权限。 该角色有依赖,需要勾选依赖的角色:Tenant Administrator。 Server Administrator 拥有该权限的用户可以创建、删除、查询、修改及上传镜像。 该角色有依赖,需要在同项目中勾选依赖的角色:IMS Administrator。 策略(推荐):IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对IMS服务,管理员能够控制IAM用户仅能对某一类镜像资源进行指定的管理操作。 多数策略以API接口为粒度进行权限拆分,IMS支持的API授权项请参见:权限及授权项说明。 表2 IMS系统策略 策略名称 描述 依赖关系 IMS FullAccess 镜像服务所有权限。 无 IMS ReadOnlyAccess 镜像服务只读权限,拥有该权限的用户仅能查看镜像服务数据。 无 表3列出了镜像服务(IMS)常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表3 常用操作与系统权限的关系 操作 IMS FullAccess IMS ReadOnlyAccess IMS Administrator(需依赖Tenant Administrator) 创建镜像 √ x √ 删除镜像 √ x √ 查询镜像 √ √ √ 更新镜像信息 √ x √
  • 应用场景 服务器上云或云上迁移 利用镜像导入功能,将已有的业务服务器制作成镜像后导入到云平台(当前支持vhd、vmdk、qcow2、raw等多种格式),方便企业业务上云。 使用镜像共享和镜像跨区域复制功能,实现云服务器在不同账号、不同地域之间迁移。 部署特定软件环境 使用共享镜像或者应用超市的市场镜像均可帮助企业快速搭建特定的软件环境,免去了自行配置环境、安装软件等耗时费力的工作,特别适合互联网初创型公司使用。 批量部署软件环境 将已经部署好的云服务器的操作系统、分区和软件等信息打包,用以制作私有镜像,然后使用该镜像批量创建云服务器实例,新实例将拥有一样的环境信息,从而达到批量部署的目的。 服务器运行环境备份 对一台云服务器实例制作镜像以备份环境。当该实例的软件环境出现故障而无法正常运行时,可以使用镜像进行恢复。
  • 镜像部署与手工部署对比 表1 镜像部署与手工部署对比 对比项 镜像部署 手工部署 部署时长 2~5分钟 1~2天 复杂度 使用公共镜像、应用超市的市场镜像,或者根据已使用过的方案均可快速创建符合要求的云服务器。 评估业务场景,选择合适的操作系统、数据库、应用软件等,并且需要安装和调试。 安全性 除共享镜像需要用户自行甄别来源以外,公共镜像、私有镜像,及市场镜像均经过严格测试,能够保证镜像安全、稳定。 依赖开发或运维人员的水平。
  • 安全 公共镜像覆盖华为自研EulerOS操作系统,及Windows Server、Ubuntu、CentOS等多款主流操作系统,皆以正版授权,均经过严格测试,能够保证镜像安全、稳定。 镜像后端对应的镜像文件使用华为云 对象存储服务 进行多份冗余存储,具有高数据可靠性和持久性。 可以使用密钥管理服务(Key Management Service,KMS)提供的信封加密方式对私有镜像进行加密,确保数据安全性。
  • OBS客户端通用示例 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效,返回SDK公共响应头实例或其子类实例;若抛出异常,则说明操作失败,此时应从SDK自定义异常实例中获取错误信息。 以下代码展示了使用OBS客户端的通用方式: // 您的工程中可以只保留一个全局的ObsClient实例 // ObsClient是线程安全的,可在并发场景下使用 ObsClient obsClient = null; try { String endPoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AC CES S_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsClient实例 obsClient = new ObsClient(ak, sk, endPoint); // 调用接口进行操作,例如上传对象 HeaderResponse response = obsClient.putObject("bucketname", "objectname", new File("localfile")); // localfile为待上传的本地文件路径,需要指定到具体的文件名 System.out.println(response); } catch (ObsException e) { System.out.println("HTTP Code: " + e.getResponseCode()); System.out.println("Error Code:" + e.getErrorCode()); System.out.println("Error Message: " + e.getErrorMessage()); System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); }finally{ // 关闭ObsClient实例,如果是全局ObsClient实例,可以不在每个方法调用完成后关闭 // ObsClient在调用ObsClient.close方法关闭后不能再次使用 if(obsClient != null){ try { // obsClient.close(); } catch (IOException e) { } } } 父主题: 快速入门
  • 初始化 CryptoCipher OBS Java SDK 提供两种 加密套件。您可根据使用场景自行选择。 CtrRSACipherGenerator 继承于CTRCipherGenerator,不需要提供数据密钥或初始值,只需要提供 RSA 公钥或RSA 私钥,用以加密和解密随机生成的数据密钥。 表1 CtrRSACipherGenerator 类型参数 参数名 类型 约束 说明 privateKey PrivateKey 解密文件时必选(例如getObject) RSA 私钥。 publicKey PublicKey 加密文件时必选(例如putObject) RSA 公钥。 masterKeyInfo String 可选 密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同密钥,需您自行维护 masterKeyInfo与 密钥的映射关系. secureRandom SecureRandom 必选 安全随机数生成器,用于随机生成cryptoKeyBytes和cryptoIvBytes,请您根据业务需求选择设置 needSha256 boolean 可选 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据. 说明: 设置 need_sha256 为 True 时,SDK 会自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的 sha256 值置于请求头,服务端收到请求后会计算收到对象的sha256,如若 sha256 不一致会返回错误信息。 为了节省内存开销,SDK 采用了流式计算sha256的方法,这也就意味着,普通上传时需要读取并加密文件两次;另外由于InputStream流无法重复读取,流式上传不支持计算sha256。 CTRCipherGenerator 仅需提供一个数据密钥,所有对象均使用该数据密钥进行加密。 表2 CTRCipherGenerator 类型参数 参数名 类型 约束 说明 masterKeyInfo String 可选 密钥信息,该信息会存至对象的自定义元数据中, 帮助您区分不同cryptoKeyBytes,需您自行维护 masterKeyInfo与 cryptoKeyBytes的映射关系. cryptoKeyBytes byte[] 必选 加密数据所使用的数据密钥,长度必须为 32 bytes. cryptoIvBytes byte[] 可选 加密数据时所使用的初始值,长度必须为 16 bytes,指定时,所有对象均使用该初始值加密;未指定时,SDK 会为每个对象随机生成不同 初始值. secureRandom SecureRandom 必选 安全随机数生成器,用于在未设置cryptoKeyBytes或cryptoIvBytes时随机生成缺失的对应参数,请您根据业务需求设置 needSha256 boolean 可选 是否校验加密后数据的sha256,并设置加密前后的sha256作为自定义元数据. 说明: 设置 need_sha256 为 True 时,SDK 会自动计算待上传对象的加密前 sha256 值与加密后的 sha256 值,并存至对象自定义元数据,同时也会在发送请求时将加密后的文件的 sha256 值置于请求头,服务端收到请求后会计算收到对象的sha256,如若 sha256 不一致会返回错误信息。 为了节省内存开销,SDK 采用了流式计算sha256的方法,这也就意味着,普通上传时需要读取并加密文件两次;另外由于InputStream流无法重复读取,流式上传不支持计算sha256。
  • 示例代码 这是CtrRSACipherGenerator的示例代码 import com.obs.services.ObsConfiguration; import com.obs.services.crypto.CTRCipherGenerator; import com.obs.services.crypto.CryptoObsClient; import com.obs.services.crypto.CtrRSACipherGenerator; import com.obs.services.exception.ObsException; import com.obs.services.model.GetObjectRequest; import com.obs.services.model.ObsObject; import com.obs.services.model.PutObjectResult; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; public class CtrRSACipherGeneratorDemo001 { public static void main(String[] args) { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 // String endPoint = System.getenv("ENDPOINT"); String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; CtrRSACipherGenerator ctrRSACipherGenerator = null; try { String examplePrivateKeyPath = "yourRSAPrivateKeyPath"; String examplePublicKeyPath = "yourRSAPublicKeyPath"; ObsConfiguration config = new ObsConfiguration(); PrivateKey privateKeyObj = CtrRSACipherGenerator.importPK CS 8PrivateKey(examplePrivateKeyPath); PublicKey publicKeyObj = CtrRSACipherGenerator.importPublicKey(examplePublicKeyPath); ctrRSACipherGenerator = new CtrRSACipherGenerator( "example_master_key_info", true, config.getSecureRandom(), privateKeyObj, publicKeyObj); } catch (IllegalArgumentException | IOException | NoSuchAlgorithmException | InvalidKeySpecException e) { e.printStackTrace(); } assert ctrRSACipherGenerator != null; // 创建ObsClient实例 try (CryptoObsClient cryptoObsClient = new CryptoObsClient(ak, sk, securityToken, endPoint, ctrRSACipherGenerator)) { String exampleBucketName = "example-bucket"; String exampleObjectKey = "exampleObjectKey"; String examplePlainTextFilePath = "examplePlainTextFilePath"; String exampleDecryptedFilePath = "exampleDecryptedFilePath"; PutObjectResult putObjectResult = cryptoObsClient.putObject(exampleBucketName, exampleObjectKey, new File(examplePlainTextFilePath)); System.out.println("HTTP Code: " + putObjectResult.getStatusCode()); System.out.println("Etag: " + putObjectResult.getEtag()); // 客户端加密上传成功 System.out.println("CtrRSACipherGeneratorDemo001 putObject successfully"); GetObjectRequest getObjectRequest = new GetObjectRequest(exampleBucketName, exampleObjectKey); ObsObject obsObject = cryptoObsClient.getObject(getObjectRequest); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; FileOutputStream fileOutputStream = new FileOutputStream(exampleDecryptedFilePath); int len; while ((len = input.read(b)) != -1) { fileOutputStream.write(b, 0, len); } fileOutputStream.close(); input.close(); System.out.println("HTTP Code: " + obsObject.getMetadata().getStatusCode()); // 客户端解密下载成功 System.out.println("CtrRSACipherGeneratorDemo001 getObject successfully"); // 验证一下,加密之前的文件和解密之后的文件是否一致 byte[] plainTextFileSha256 = CTRCipherGenerator.getFileSha256Bytes(examplePlainTextFilePath); byte[] decryptedFileSha256 = CTRCipherGenerator.getFileSha256Bytes(exampleDecryptedFilePath); String plainTextFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(plainTextFileSha256); String decryptedFileSha256Base64Encoded = CTRCipherGenerator.getBase64Info(decryptedFileSha256); System.out.println("plainTextFileSha256 base64 encoded: " + plainTextFileSha256Base64Encoded); System.out.println("decryptedFileSha256 base64 encoded: " + decryptedFileSha256Base64Encoded); System.out.println( "plainTextFileSha256 equals decryptedFileSha256 ? " + decryptedFileSha256Base64Encoded.equals(plainTextFileSha256Base64Encoded)); System.out.println("CtrRSACipherGeneratorDemo001 successfully"); } catch (ObsException e) { System.out.println("CtrRSACipherGeneratorDemo001 failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CtrRSACipherGeneratorDemo001 putObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 透传访问密钥 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 OBS Java SDK提供了直接在接口方法中透传AK和SK的OBS客户端(SecretFlexibleObsClient)。示例代码如下: String endPoint = "https://your-endpoint"; // 创建ObsConfiguration配置类实例 ObsConfiguration config = new ObsConfiguration(); config.setEndPoint(endPoint); // 创建SecretFlexibleObsClient实例 SecretFlexibleObsClient obsClient = new SecretFlexibleObsClient(config); // 使用访问OBS // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak1 = System.getenv("ACCESS_KEY_ID"); String sk1 = System.getenv("SECRET_ACCESS_KEY_ID"); obsClient.listBuckets(ak1, sk1); String ak2 = System.getenv("ACCESS_KEY_ID"); String sk2 = System.getenv("SECRET_ACCESS_KEY_ID"); obsClient.listBuckets(ak2, sk2); // 关闭obsClient obsClient.close(); SecretFlexibleObsClient继承自ObsClient,可作为ObsClient使用。 父主题: 初始化
  • 代码示例 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.HeaderResponse; import com.obs.services.model.inventory.InventoryConfiguration; import com.obs.services.model.inventory.SetInventoryConfigurationRequest; public class SetInventoryConfiguration001 { public static void main(String[] args) { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。 String securityToken = System.getenv("SECURITY_TOKEN"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 创建ObsClient实例 try (ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint)) { // 设置相关示例参数 String exampleBucketName = "example-bucket"; String exampleTargetBucketName = "example-target-bucket"; String exampleConfigurationId = "exampleConfigId001"; String exampleInventoryPrefix = "exampleInventoryPrefix"; String exampleObjectPrefix = "exampleObjectPrefix"; // 设置桶清单配置规则详细参数 InventoryConfiguration exampleConfiguration = new InventoryConfiguration(); exampleConfiguration.setDestinationBucket(exampleTargetBucketName); exampleConfiguration.setConfigurationId(exampleConfigurationId); exampleConfiguration.setInventoryFormat(InventoryConfiguration.InventoryFormatOptions.CSV); exampleConfiguration.setFrequency(InventoryConfiguration.FrequencyOptions.DAILY); exampleConfiguration.setEnabled(true); exampleConfiguration.setIncludedObjectVersions(InventoryConfiguration.IncludedObjectVersionsOptions.CURRENT); exampleConfiguration.setInventoryPrefix(exampleInventoryPrefix); exampleConfiguration.setObjectPrefix(exampleObjectPrefix); // 设置清单文件中会包含的额外的对象元数据字段 exampleConfiguration.getOptionalFields().add(InventoryConfiguration.OptionalFieldOptions.IS_MULTIPART_UPLOADED); exampleConfiguration.getOptionalFields().add(InventoryConfiguration.OptionalFieldOptions.ETAG); exampleConfiguration.getOptionalFields().add(InventoryConfiguration.OptionalFieldOptions.REPLICATION_STATUS); SetInventoryConfigurationRequest request = new SetInventoryConfigurationRequest(exampleBucketName, exampleConfiguration); // 设置桶清单配置规则 HeaderResponse response = obsClient.setInventoryConfiguration(request); System.out.println("SetInventoryConfiguration succeeded"); System.out.println("HTTP Code: " + response.getStatusCode()); } catch (ObsException e) { System.out.println("SetInventoryConfiguration failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("SetInventoryConfiguration failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 初始化OBS客户端 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 集成OBS SDK工具时,使用import声明包,参考以下示例: import com.obs.services.ObsClient; 向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例: String endPoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 使用访问OBS // 关闭obsClient,全局使用一个ObsClient客户端的情况下,不建议主动关闭ObsClient客户端 obsClient.close(); 更多关于OBS客户端初始化的操作请参考“初始化”章节。 日志配置详见配置SDK日志 父主题: 快速入门
  • 关闭桶日志 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 关闭桶日志功能实际上就是调用ObsClient.setBucketLogging将日志配置清空,以下代码展示了如何关闭桶日志: // Endpoint以北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // 创建ObsClient实例 ObsClient obsClient = new ObsClient(ak, sk, endPoint); // 对桶设置空的日志配置 obsClient.setBucketLogging("bucketname", new BucketLoggingConfiguration()); 父主题: 设置访问日志
  • 单点登录测试 应用凭证申请。 服务器接口调测成功后,集成联营Kit前,服务商需要申请应用凭证,该凭证在发布商品、Kit集成阶段均会使用,具体操作步骤请参见《云商店 接入指南》的应用凭证申请。 应用测试账号获取。 服务商成功申请应用凭证并完成如上的接口开发后,为了测试已调试好的应用的可用性,可以申请测试账号进行测试验证,具体操作步骤请参见《云商店 接入指南》的应用测试账号获取。 父主题: 单点登录改造和测试
  • 应用单点登录 新增组织机构、用户成功,即可开始应用单点登录。用户登录之后工业工作台若无门户页面,门户配置请参考管理员配置企业门户。 打开华为工业云平台页面。 图1 华为工业云平台页面 输入账号、密码,进入工业工作台用户界面。 图2 工业工作台用户界面 单击“通用应用”,进入应用界面。 图3 应用界面 单击其中一个应用进行单点登录。 图4 应用单点登录页面 父主题: 应用绑定企业租户后对接工业工作台
  • MIW测试人员审核测试报告 应用对接测试用例自测全部通过之后,联系华为方应用对接人员审核测试报告,从以下三个方面进行审核: 应用新增租户、组织、用户同步事件成功。 应用单点登录正常。 应用对接测试用例执行通过。 审核通过后,SaaS类0元测试商品需进行下架处理。 华为方应用对接人员: 刘勇文 工号:l30039245,联系方式:13570918957 朱凯宏 工号:z30036867,联系方式:17826827694 父主题: 自测指引
  • 应用单点登录 新增组织机构、用户成功,即可开始应用单点登录。用户登录之后工业工作台若无门户页面,门户配置请参考管理员配置企业门户。 打开华为工业云平台页面。 图1 华为工业云平台页面 输入账号、密码,进入工业工作台用户界面。 图2 工业工作台用户界面 单击“通用应用”,进入应用界面。 图3 应用界面 单击其中一个应用进行单点登录。 图4 应用单点登录页面 父主题: 应用绑定企业租户后对接工业工作台
  • 如何获取企业邀请码? 企业管理员在管理后台开启邀请设置,用户可以通过邀请码直接在前台登录页面进行注册,便于普通成员通过自注册的方式加入目标单位或部门,具体获取方式如下。 在“通讯录”页面,在左侧通讯录选择需要邀请成员的部门。 在界面右上角选择“邀请成员加入本组织”。 如果出现“当前部门的邀请功能已停用”界面,单击“启用”。 进入邀请成员界面后,即可获得企业邀请码、企业链接及企业二维码,如图1所示。 图1 企业邀请码、企业链接、企业二维码 在“ 邀请设置”区域,可以进一步对邀请有效期进行设置。 图2 邀请设置 进入“注册完成按钮配置”,您可以单击操作列的“编辑”,选择是否开启“注册完成按钮配置”。 开启:可自行配置当前租户邀请链接完成注册后页面的独立按钮。设置按钮文字、跳转链接后单击“保存”。以web端为例,页面效果如图3所示。 按钮文字至多显示5个汉字或字母。 图3 设置独立按钮 关闭:不配置完成注册后页面的独立按钮,即页面只显示一个按钮,以web端为例,页面效果如图4所示。 图4 未设置独立按钮 设置完成后,将企业邀请码、企业链接或企业二维码分享给需要邀请的用户。 用户在用户门户登录页面选择“注册账号”,输入企业邀请码,或直接进入企业邀请链接,输入用户信息后即可加入企业。 邀请成员后,您可以单击“查看申请人列表”查看申请情况,也可以单击“停用邀请”使邀请信息失效,如图5所示。 图5 查看申请人列表 父主题: 账号与登录
  • 租户同步是什么时候触发? 买家侧是购买完商品后,将商品和组织绑定的时候同步,同时会调用租户信息同步接口、租户应用信息同步接口、组织部门同步(全量)接口。 卖家侧是申请应用凭证的时候会同步租户信息同步接口、租户应用信息同步接口、组织部门同步(全量)接口。 买家给账号授权访问应用和卖家申请测试账号的时候会调用租户应用授权信息同步接口。 买家商品绑定组织后,在组织下变更部门的时候会调用组织部门信息同步(增量)接口。 父主题: 开发相关
  • 支持的RabbitMQ插件有哪些? RabbitMQ实例购买后,支持的插件如下,其中,方括号中为空的表示还未安装,标记为[E*]的插件是明确安装的,标记为[e*]的插件是隐式安装的,也就是说,这些插件是作为其它的插件的依赖而进行安装的。 [ ] rabbitmq_amqp1_0 3.8.35 [ ] rabbitmq_auth_backend_cache 3.8.35 [ ] rabbitmq_auth_backend_http 3.8.35 [ ] rabbitmq_auth_backend_ldap 3.8.35 [ ] rabbitmq_auth_mechanism_ssl 3.8.35 [ ] rabbitmq_consistent_hash_exchange 3.8.35 [ ] rabbitmq_delayed_message_exchange 3.8.9 [ ] rabbitmq_event_exchange 3.8.35 [ ] rabbitmq_federation 3.8.35 [ ] rabbitmq_federation_management 3.8.35 [ ] rabbitmq_jms_topic_exchange 3.8.35 [E*] rabbitmq_management 3.8.35 [e*] rabbitmq_management_agent 3.8.35 [ ] rabbitmq_mqtt 3.8.35 [ ] rabbitmq_peer_discovery_aws 3.8.35 [ ] rabbitmq_peer_discovery_common 3.8.35 [ ] rabbitmq_peer_discovery_consul 3.8.35 [ ] rabbitmq_peer_discovery_etcd 3.8.35 [ ] rabbitmq_peer_discovery_k8s 3.8.35 [ ] rabbitmq_random_exchange 3.8.35 [ ] rabbitmq_recent_history_exchange 3.8.35 [ ] rabbitmq_sharding 3.8.35 [ ] rabbitmq_shovel 3.8.35 [ ] rabbitmq_shovel_management 3.8.35 [ ] rabbitmq_stomp 3.8.35 [E*] rabbitmq_top 3.8.35 [ ] rabbitmq_tracing 3.8.35 [ ] rabbitmq_trust_store 3.8.35 [e*] rabbitmq_web_dispatch 3.8.35 [ ] rabbitmq_web_mqtt 3.8.35 [ ] rabbitmq_web_mqtt_examples 3.8.35 [ ] rabbitmq_web_stomp 3.8.35 [ ] rabbitmq_web_stomp_examples 3.8.35 RabbitMQ控制台支持安装的插件有:rabbitmq_amqp1_0、rabbitmq_delayed_message_exchange、rabbitmq_federation、rabbitmq_sharding、rabbitmq_shovel、rabbitmq_tracing、rabbitmq_mqtt、rabbitmq_web_mqtt、rabbitmq_stomp、rabbitmq_web_stomp和rabbitmq_consistent_hash_exchange,实例创建后,以上插件默认关闭,如需开启,在控制台实例详情的“插件管理”页面开启,具体操作请参见开启实例插件。 RabbitMQ插件功能可用于测试和迁移业务等场景,不建议用于生产业务。详情请参考约束与限制。 如果需要激活其他未安装且控制台不支持开启的插件(如rabbitmq_random_exchange),需要联系客服在后台开启插件,开启过程中,对业务没有任何影响。
  • 使用rabbitmq_tracing插件 开启rabbitmq_tracing插件,具体步骤请参考开启实例插件。 登录RabbitMQ WebUI页面。 在顶部导航栏选择“Admin”,进入Admin页面。 在右侧导航栏选择“Virtual Hosts”,进入Virtual Hosts页面。 图1 Virtual Hosts页面 单击待创建trace的Vhost名称,进入Vhost详情页面。 图2 待创建trace的Vhost名称 在“Permissions”区域,为Vhost添加guest权限。 使用trace功能的Vhost必须配置guest权限,否则创建trace时会报错。 图3 为Vhost添加guest权限 在右侧导航栏选择“Tracing”,进入Tracing页面。 图4 Admin页面 在“Add a new trace”区域,输入以下参数,单击“Add trace”,新增一个trace。 表1 trace参数说明 参数 说明 Virtual host 选择待创建trace的Vhost名称。 Name 自定义trace的名称,用于区分不同的trace。 Format 输出消息日志的格式。支持“Text”和“JSON”两种格式,“Text”格式方便阅读,“JSON”格式方便解析。 Tracer connection username 指定创建trace的用户名。 Tracer connection password 指定创建trace的密码。 Max payload bytes 每条消息的最大限制,单位为B。 假设“Max payload bytes”设置为“10”,当有超过10B的消息经过RabbitMQ流转时就会被载断,例如“trace test payload”会被载断成“trace test”。 Pattern 设置匹配的模式。取值示例如下: #:追踪所有进入和离开RabbitMQ的消息 publish.#:追踪所有进入RabbitMQ的消息 deliver.#:追踪所有离开RabbitMQ的消息 publish.delay_exchange:追踪进入指定交换机的信息,delay_exchange为交换机名称,请根据实际情况修改。 deliver.delay_queue:追踪离开指定队列的消息,delay_queue为队列名称,请根据实际情况修改。 图5 新增一个trace trace创建成功后,在“All traces”区域,显示已创建的trace列表。 图6 trace列表 (可选)如果RabbitMQ实例为集群,在“Node”中切换到其他节点,重复8,为其他所有节点创建trace。 图7 切换节点 当trace日志文件中存入消息日志后,单击trace日志文件名称,查看日志内容。 图8 trace日志文件 “delay_exchange_trace.log”的日志内容如图9所示。 图9 delay_exchange_trace.log “delay_queue_trace.log”的日志内容如图10所示。 图10 delay_queue_trace.log
  • 云闪贷支付规则 支持购买华为云包年/包月(包1/2/3年)产品。(注:对云产品进行支付时,若该云服务产品支持云闪贷,则能勾选“云闪贷”支付方式。) 目前仅支持包年/包月产品的新购,暂不支持续订、升降配、按需转包年/包月、按需资源包、云商店等产品。 只能支付订单时长为1年、2年、3年的产品。 订单时长为1年,可选的贷款分期为3、6、9期。 订单时长为2年,可选的贷款分期为6、12、18期。 订单时长为3年,可选的贷款分期为6、12、18、24、30期。 云闪贷利息:1年期费率2.61%,2年期费率2.48%,3年期费率2.43%(以银行还款计划为准)。 使用云闪贷支付时,需要开通专属汇款账号。 订单总金额需要大于等于1000元,且首付款不低于订单总金额的20%。首付款只能通过余额支付或在线支付。 可用贷款额度大于等于订单的贷款金额。 云闪贷支付的订单,贷款结清前不允许续订。升配金额不能使用云闪贷。
  • 策略样例 示例1:授权用户拥有费用中心、账号中心的所有权限。 { "Version": "1.1", "Statement": [ { "Action": [ "BSS:*:*" ], "Effect": "Allow" } ] } 示例2:授权用户拥有查看订单和消费汇总的权限。 { "Version": "1.1", "Statement": [ { "Action": [ "bss:account:update", "bss:order:view", "bss:bill:view", ], "Effect": "Allow" } ] }
  • 操作步骤 进入“待支付订单”页面。 可以根据输入订单号搜索待支付订单。 根据实际情况选择单个支付或合并支付。 单个支付:单击待支付订单列表对应的“支付”。 合并支付:选中待支付订单前的复选框,单击“合并支付”。 商品组合购买生成的多个订单,对其中一个订单支付时会自动带出其他关联订单一并支付。若商品组合购订单中的部分订单待审核,部分已审核完成的订单也不能支付,需所有订单都审核通过后才可以一起支付。 商品组合购买生成的多个订单,勾选其中一个订单进行合并支付,同时自动勾选其他关联订单,并提示“已自动选中其他**个关联订单”;取消勾选其中一个订单时,自动取消勾选关联订单,并提示“已取消选中其他**个关联订单”。若商品组合购订单中的部分订单待审核,则无法勾选任何一个订单进行合并支付。 合并支付勾选的订单数最多不能超过30个。 在合并支付订单时,若其中有订单状态发生变更,则订单状态已变更的订单不能再进行支付。例如: 合并支付订单中有部分订单的订单状态已变更,则提示“订单状态已变更的订单不能进行支付”,展示需要移除支付的订单号以及将继续支付的订单号。 合并支付订单中全部订单的订单状态已变更,则提示“全部订单的订单状态已发生变更,不能进行支付操作”。可单击“返回我的订单”,查看订单状态变更详情。 合并支付订单中有订单的订单状态为“待审核”,则提示“以下订单需要通过审核才能支付,请耐心等待审核,审核通过后我们将发送通知您帐号绑定的手机和邮件,收到通知后您可以继续支付订单”,并展示具体的订单号。 合并支付订单中有订单的订单状态为“待确认”,则提示订单待确认。如果是客户,请联系客户经理到CRM系统确认订单;如果是客户经理,则可单击“返回CRM”确认订单。 选择优惠和支付方式,单击“确认付款”。 如果客户自主下单的产品规格与客户标准销售合同的产品存在重叠,支付订单时弹框提示“请确认当前下单是否属于合同外下单,否则将无法支付”,确认后可以继续支付,否则无法继续支付。 优惠包含折扣优惠和优惠券。优惠的相关使用说明可参见支付订单时如何使用折扣优惠和优惠券。 使用API查询订单可用优惠券请参见“查询订单可用优惠券”。 使用API查询订单可用折扣请参见“查询订单可用折扣”。 支付方式有:余额支付、在线支付、余额+在线组合支付、合作伙伴代付。 余额支付:选择余额支付,单击“确认付款”,支付完成。 账户余额不足时,用户可以先 充值 后再支付,充值详细操作步骤可参见账户充值。 企业用户可以通过申请线上合同向公司请款。若订单使用了折扣,请确保在折扣有效期内完成请款,避免优惠金额失效。申请线上合同请款详细操作步骤,请参见如何申请请款合同。 在线支付:选择在线支付,单击“去在线支付”,跳转到华为云收银台,选择在线支付方式(支付宝、微信、银联、Huawei Pay等)后,单击“确认支付”。 只有签约主体为“ 华为云计算 技术有限公司”或“华为软件技术有限公司”时才支持在线支付,其他签约主体,不支持在线支付。 平台支付选择支付宝或微信支付确认支付后,弹出二维码,需打开手机支付宝或微信扫码付款,完成支付。 平台支付选择Huawei Pay确认支付后,弹出二维码,需打开华为钱包APP扫码付款,完成支付。仅当签约主体为“华为云计算技术有限公司”时,才支持Huawei Pay支付。 平台支付选择银联在线支付确认支付后,跳转到银联支付页面,输入卡号或登录银联账号付款,完成支付。 个人网银支付时,页面上选择银联支付,确认支付后跳转银联支付页面,选择支付银行,单击“到网上银行支付”,跳转到相应的银行支付平台输入银行卡相关信息后,完成支付。 企业网银支付时,页面上选择银联支付或支付银行,跳转到相应的银行支付平台输入银行卡相关信息后,完成支付。 余额+在线组合支付:选择余额支付时,输入余额支付金额小于订单应付金额时,需同时勾选在线支付剩余应付金额。单击“去在线支付”,跳转到华为云收银台。请参见如何在线支付。 当客户在“安全设置>敏感操作”里面开启操作保护后,余额+在线组合支付订单,且支付金额都不为零的情况下,需要输入验证码进行身份验证才能支付成功。可参见支付订单需要身份验证吗?如何关闭身份验证?。 合作伙伴代付:选择合作伙伴代付,并单击“请他付款”,申请伙伴支付订单。申请成功后,系统会以短信和邮件形式通知合作伙伴支付。 客户申请由合作伙伴提交并支付订单时,不能使用自己帐号下的优惠券。 合作伙伴代付适用范围请参见如何申请合作伙伴支付订单。
  • 操作步骤 进入“待支付订单”页面。 可以根据输入订单号搜索想要取消订单。 在订单页面找到该订单,单击“取消”。 商品组合购买生成的多个订单,需同时取消。如果对商品组合购订单中的一个订单进行取消,系统弹出提示“取消本订单时,关联的订单会同步取消”,确认后所有关联订单一并取消。 取消组合交易订单时(或当一个订单归属于组合交易订单时,取消该订单),则该组合交易订单下所有关联的订单会同步取消。 在系统弹出的“提示”对话框中,单击“确定”。
  • 与其他服务的关系 pEDA-Schematic服务与周边服务的依赖关系如图1所示。 图1 pEDA-Schematic与其他服务的关系 表1 pEDA-Schematic与其他云服务的关系 分类 服务名称 pEDA-Schematic服务与其他服务的关系 公共/运维服务 组织成员帐号(OrgID) 通过OrgID服务,实现对pEDA-Schematic用户的访问控制。 云日志 服务(Log Tank Service,LTS) 记录pEDA-Schematic服务运行日志,方便用户查询进行问题定级定位。 云审计服务(Cloud Trace Service,CTS) CTS记录pEDA-Schematic服务相关的操作事件,方便用户日后的查询、审计和回溯。 应用性能管理 服务(Application Performance Management, APM ) 实时监控pEDA-Schematic服务组件运行状态、JVM状态、线程状态、API调用统计、Redis/RDS访问记录统计。 调用链管理,方便用户进行日常监控、问题定界定位。 应用运维管理 (Application Operations Management, AOM ) 统计与展示pEDA-Schematic服务运行环境状态指标,基于指标设置告警。 计算/存储/数据库服务 云容器引擎(Cloud Container Engine,CCE) 通过创建CCE集群及其上的主机组/主机,部署pEDA-Schematic的微服务。 弹性云服务器(Elastic Cloud Server,ECS) 通过创建CCE集群主机弹性云服务器,部署应用docker。 容器镜像服务 (SoftWare Repository for Container,SWR) 通过SWR拉取执行集群中用于部署pEDA-Schematic服务的镜像软件。 关系型数据库(Relational Database Service,RDS) RDS用于存储reviewtool检视工具的数据以及EDM的数据。 文档数据库服务(Document Database Service,DDS) DDS存储除reviewtool检视工具和EDM的其他的业务数据。 对象存储服务(Object Storage Service,OBS) 存储RDS、DDS的备份数据。 网络服务 NAT网关(NAT Gateway) 使用NAT网关能够为VPC内的容器实例提供 网络地址转换 服务,SNAT功能通过绑定弹性公网IP,实现私有IP向公有IP的转换,可实现VPC内的容器实例共享弹性公网IP访问Internet。 弹性公网IP(Elastic IP) pEDA-Schematic服务通过EIP对外提供服务(DNS绑定改IP)。 API网关(API Gateway,APIG) pEDA-Schematic服务内部和外部的API统一通过APIG进行调用。 弹性负载均衡( Elastic Load Balance,ELB) ELB对接APIG和CCE集群,完成pEDA-Schematic服务请求的负载转发均衡。 虚拟私有云(Virtual Private Cloud,VPC) 实现pEDA-Schematic服务隔离的私有云空间。 安全服务/中间件服务 微服务引擎(Cloud Service Engine,CSE) CSE服务提供服务注册、服务治理、配置管理等功能,通过使用CSE服务实现微服务应用的快速开发和高可用运维。 分布式缓存服务(Distributed Cache Service,DCS) 通过DCS服务将热点数据放入缓存,加快用户端的访问速度,提升用户体验。 内容分发网络(Content Delivery Network,CDN) 通过CDN实现网站图片的缓存和加速能力,缩短了用户查看内容的访问延迟。 企业主机安全 (Host Security Service,HSS) 通过HSS构筑iDME主机级别安全。 Web应用防火墙 (Web Application Firewall,WAF) 通过WAF构筑iDME Web应用安全。 Anti-DDoS流量清洗服务(Anti-DDoS traffic cleaning service,Anti-DDoS) 通过Anti-DDoS构筑iDME防DDoS攻击安全。
  • 导入样例CBB数据 登录pEDA-Schematic并进入电子设计数据管理。 在“电子设计数据管理”页面,选择“CBB”页签。 在“CBB”页面,单击“批量导入”。 在“CBB批量导入”页面,单击“模板下载”,将模板文件下载到本地不用修改。 在“CBB批量导入”页面,单击“选择文件”,直接选择下载的cbb_batch_example.zip文件,单击“打开”,系统自动对模板中的信息进行校验,校验完成后页面显示校验结果。 图1 样例数据批量导入结果 在导入结果页面,单击右上角的“上传”,系统会自动导入所有CBB,导入完成后提示导入成功,页面跳转到CBB列表。
  • 导入自有CBB数据 登录pEDA-Schematic并进入电子设计数据管理。 在“电子设计数据管理”页面,选择“CBB”页签。 在“CBB”页面,单击“批量导入”。 在“CBB批量导入”页面,单击“模板下载”,将模板文件下载到本地。 在本地解压下载的符号模板文件zip包,按模板文件要求填写符号信息。 下载的封装模板文件zip包中包含.tssch文件和excel文件两种文件,需要将这两种文件内容补充完成后,重新打包成zip包后,才能导入数据。 .tssch文件:是包含有CBB数据的CBB文件。 excel文件:是数据导入文件,请按照excel文件中“导入说明”页签中的要求,在“cbb”页签填写好需要导入的符号数据,其中“CBB文件名”列的值需要和.tssch的CBB文件名称相对应。 模板文件填写完成后,单击“选择文件”选择本地准备好的模板文件,系统自动对模板中的信息进行校验,校验完成后页面显示校验结果。 图2 自有数据批量导入结果 在导入结果页面,单击右上角的“上传”,系统会对CBB信息进行二次校验。 当所有CBB都通过二次校验,单击“上传”后,系统会自动导入所有CBB,导入完成后提示导入成功。 当部分CBB通过二次校验,单击“上传”后,通过校验的CBB会自动导入,未通过校验的CBB会显示在弹出的“重新导入失败数据”页面,在“重新导入失败文件”页面,可查看CBB导入失败的原因。 图3 重新导入失败文件 “可修改”页签的CBB数据,可勾选CBB,单击“确认”,强制覆盖元件库中的CBB。 “不可修改”页签的CBB数据,需要重新修改导入文件后重新导入。
  • 上传元器件(可选) 开通原理图设计服务后,您可以根据需要将本地已有的元器件导入到pEDA-Schematic的电子设计数据管理中心,方便后面更快捷的绘制原理图。元器件导入到电子设计数据管理中心后,展示在原理图编辑器和Symbol编辑器底部面板的元件库中,在绘图过程中可以从底部面板的元件库调用从电子设计数据管理中心导入的元器件。 批量导入符号 批量导入封装 批量导入器件 批量导入特殊符号 批量导入CBB
  • 导入样例封装数据 登录pEDA-Schematic并进入电子设计数据管理。 在“电子设计数据管理”页面,选择“封装”页签。 在“封装”页面,单击“批量导入”。 在“封装批量导入”页面,单击“模板下载”,将模板文件下载到本地不用修改。 在“封装批量导入”页面,单击“选择文件”,直接选择下载的footprint_batch_example.zip文件,单击“打开”,系统自动对模板中的信息进行校验,校验完成后页面显示校验结果。 图1 样例数据批量导入结果 在导入结果页面,单击右上角的“上传”,系统会自动导入所有封装,导入完成后提示导入成功,页面跳转到封装列表。
共100000条