华为云用户手册

  • 监控安全风险 云监控服务 为用户的云上资源提供了立体化监控平台。通过 云监控 您可以全面了解云上的资源使用情况、业务的运行状况,并及时收到异常告警做出反应,保证业务顺畅运行。 DLI 服务提供基于云监控服务 CES 的资源监控能力 DLI已对接云监控服务,提供基于云监控服务的资源监控能力,帮助用户监控账号下的DLI队列,执行自动实时监控、告警和通知操作。用户可以实时掌握队列中的运行作业网络流入速率、网络流出速率、CPU使用率、内存使用率、磁盘利用率、失败作业率、等待作业数等信息。还可以通过云监控服务提供的管理控制台或API接口来检索 数据湖探索 服务产生的监控指标和告警信息。 关于DLI支持的监控指标请参见 数据湖 探索监控指标说明及查看指导。 父主题: 安全
  • 修订记录 发布日期 修订记录 2024-03-30 新增产品规格。 2024-03-04 权限管理,补充增强型跨源连接权限与系统权限的说明。 2023-09-18 约束与限制补充增强型跨源连接测试连通性时对IP和域名的约束限制。 2023-09-05 将产品介绍中DLI计费说明移动至计费说明。 2023-08-02 权限管理,补充DLI系统权限依赖关系。 2023-07-03 约束与限制,补充DLI相关功能约束限制说明。 2023-03-13 “计费说明”新增弹性资源池CU时的计费说明。 2023-01-05 权限管理,修改只读权限的说明。 权限管理,新增弹性资源池常用操作与系统权限关系说明。 调整产品介绍手册结构。 2022-11-11 新增安全,包含DLI安全特性相关内容。 2022-08-08 优化“计费说明”。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 弹性资源池产品规格 弹性资源池为DLI作业运行提供所需的计算资源(CPU和内存)。弹性资源池的单位为CU,1CU包含1CPU和4GB内存。 您可以在弹性资源池中创建多个队列, 队列之间的计算资源支持共享。 通过合理设置队列的计算资源池分配策略,提高计算资源利用率。 DLI提供以下规格的计算资源,如表1所示。 表1 弹性资源池规格 类型 规格 约束限制 适用场景 基础版 16-64CUs规格 不支持高可靠与高可用。 不支持设置队列属性和作业优先级。 不支持对接Notebook实例。 其他弹性资源池使用相关约束限制请参考弹性资源池概述。 适用于对资源消耗不高、对资源高可靠性和高可用性要求不高的测试场景。 标准版 64CUs及以上规格 弹性资源池使用相关约束限制请参考弹性资源池概述。 具备强大的计算能力、高可用性、及灵活的资源管理能力,适用于大规模计算任务场景和有长期资源规划需求的业务场景。
  • 策略参数 策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。了解策略参数后,您可以根据场景自定义策略,如自定义策略使用样例。 表1 策略参数说明 参数 含义 值 Version 策略的版本。 1.1:代表基于策略的访问控制。 Statement: 策略的授权语句 Effect:作用 定义Action中的操作权限是否允许执行。 Allow:允许执行。 Deny:不允许执行。 说明: 当同一个Action的Effect既有Allow又有Deny时,遵循Deny优先的原则。 Action:授权项 操作权限。 格式为“服务名:资源类型:操作”。授权项支持通配符号*,通配符号*表示所有。 示例: "obs:bucket:ListAllMybuckets":表示查看OBS桶列表权限,其中obs为服务名,bucket为资源类型,ListAllMybuckets为操作。 您可以在对应服务“API参考”资料中查看该服务所有授权项,如OBS授权项。 Condition:条件 使策略生效的特定条件,包括条件键和运算符。 格式为“条件运算符:{条件键:[条件值1,条件值2]}”。 如果您设置多个条件,同时满足所有条件时,该策略才生效。 示例: "StringEndWithIfExists":{"g:UserName":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。 Resource: 资源类型 策略所作用的资源。 格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。支持资源粒度授权的云服务和资源类型参见:支持 IAM 资源粒度授权的云服务。 示例: "obs:*:*:bucket:*": 表示所有的OBS桶。 "obs:*:*:object:my-bucket/my-object/*": 表示my-bucket桶my-object目录下的所有对象。 条件键 条件键表示策略语句的 Condition 元素中的键值。根据适用范围,分为全局条件键和服务条件键。 全局级条件键(前缀为g:)适用于所有操作,IAM提供两种全局条件键:通用全局条件键和其他全局条件键。 通用全局条件键:在鉴权过程中,云服务不需要提供用户身份信息,IAM将自动获取并鉴权。详情请参见:通用全局条件键。 其他全局条件键:在鉴权过程中,IAM通过云服务获取条件信息并鉴权。仅部分已对接的云服务支持其他全局条件键。 服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作,详情请参见对应云服务的用户指南,如OBS请求条件。 表2 通用全局条件键 全局条件键 类型 说明 g:CurrentTime 时间 接收到鉴权请求的时间。以 ISO 8601 格式表示,例如:2012-11-11T23:59:59Z。示例参见1。 g:DomainName 字符串 请求者的账号名称。示例参见2。 g:MFAPresent 布尔值 是否使用MFA多因素认证方式 获取Token 。示例参见3。 g:MFAAge 数值 通过MFA多因素认证方式获取的Token的生效时长。该条件需要和g:MFAPresent一起使用。示例参见4。 g:ProjectName 字符串 项目名称。示例参见5。 g:ServiceName 字符串 服务名称。示例参见6。 g:UserId 字符串 IAM用户ID。示例参见7。 g:UserName 字符串 IAM用户名。示例参见8。 表3 其他全局条件键 全局条件键 类型 说明 g:SourceIp IP Address 请求用户的IP地址 g:SourceVpc String 请求用户的VPC ID g:SourceVpce String 请求用户的VPC Endpoint ID g:TagKeys String 资源标签键 g:ResourceTag/{TagKey} String 资源标签键值 g:CurrentTime 示例:表示用户在北京时间2023年3月1日8点到北京时间2023年3月30日8点可以创建IAM自定义角色。注意:策略中g:CurrentTime条件键值的时间格式为UTC时间。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "DateGreaterThan": { "g:CurrentTime": ["2023-03-01T00:00:00Z"] }, "DateLessThan": { "g:CurrentTime": ["2023-03-30T00:00:00Z"] } } }] } g: DomainName 示例:表示仅有用户zhangsan可以创建自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g:DomainName": ["zhangsan"] } } }] } g:MFAPresent 示例:表示请求者获取身份凭证时采用了MFA认证后才可以创建IAM自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "Bool": { "g:MFAPresent": ["true"] } } }] } g:MFAAge 示例:表示请求者获取身份凭证时采用了MFA认证的时间必须大于900s才可以创建IAM自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " NumberGreaterThanEquals ": { "g:MFAAge": ["900"] } } }] } g:ProjectName 示例:表示请求者获取的凭证范围必须是在北京四时才可以创建IAM自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " StringEquals ": { "g: ProjectName ": ["cn-north-4"] } } }] } g: ServiceName 示例:表示用户可访问除IAM之外其他的所有服务,该条件键匹配的值来源于鉴权Action中的Service Name。 { "Version": "1.1", "Statement": [{ "Action": [ "*:*:*" ], "Effect": "Allow", "Condition": { "StringNotEqualsIgnoreCase": { "g:ServiceName": [ "iam" ] } } }] } g: UserId 示例:表示用户ID为xxxxxxxxxxx…的用户才可以创建IAM自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserId ": ["xxxxxxxxxxx…"] } } }] } g: UserName 示例:表示用户lisi才可以创建IAM自定义角色。 { "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserName ": ["lisi"] } } }] } 多值条件键 ForAllValues:测试请求集的每个成员的值是否为条件键集的子集。如果请求中的每个键值均与策略中的至少一个值匹配,则条件返回true。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAllValues:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] } 此策略描述的是对于请求者发起共享的组织中所有组织路径必须是orgPath1、orgPath2或者orgPath3,那么允许共享。 假如请求者想共享镜像给组织路径orgPath1、orgPath3下的成员,策略匹配成功。 假如请求者想共享镜像给组织路径orgPath1、orgPath2、orgPath3、orgPath4下的成员,策略匹配失败。 ForAnyValue:测试请求值集的至少一个成员是否与条件键值集的至少一个成员匹配。如果请求中的任何一个键值与策略中的任何一个条件值匹配,则条件返回true。对于没有匹配的键或空数据集,条件返回false。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAnyValue:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] } 此策略描述的是对于请求者发起共享的组织中任一一个组织路径是orgPath1、orgPath2或者orgPath3,那么允许共享。 假如请求者想共享镜像给组织路径orgPath1、orgPath4下的成员,策略匹配成功。 假如请求者想共享镜像给组织路径orgPath4、orgPath5下的成员,策略匹配失败。 条件键运算逻辑 图2 条件键运算逻辑示意图 对于同一条件键的多个条件值,采用OR运算逻辑,即请求值按照条件运算符匹配到任意一个条件值则返回true。 当运算符表示否定含义的时候(例如:StringNotEquals),则请求值按照条件运算符不能匹配到所有的条件值。 同一运算符下的不同条件键之间,采用AND运算逻辑。不同运算符之间,采用AND运算逻辑。
  • Python示例代码 以下示例说明了如何使用Python编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云开发者 Python 软件开发工具包 (Python SDK)开发。 from huaweicloudsdkcore.auth.credentials import GlobalCredentials from huaweicloudsdkcore.http.http_config import HttpConfig from huaweicloudsdkiam.v3 import * import urllib # 使用全局域名获取自定义代理登录票据 endpoint = "https://iam.myhuaweicloud.com" # 配置客户端属性 config = HttpConfig.get_default_config() config.ignore_ssl_verification = True config.proxy_protocol = "https" config.proxy_host = "proxy.huawei.com" config.proxy_port = 8080 credentials = GlobalCredentials(ak, sk, domain_id) # 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 client = IamClient().new_builder(IamClient) \ .with_http_config(config) \ .with_credentials(credentials) \ .with_endpoint(endpoint) \ .build() # CreateTemporaryAccessKeyByAgency # 调用通过委托获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken # 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 # 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 # 通过委托获取securitytoken时,请求体中必须填写session_user.name参数。 assume_role_session_user = AssumeroleSessionuser(name="ExternalUser") identity_assume_role = IdentityAssumerole(agency_name="testagency", domain_id="0525e2c87exxxxxxx", session_user=assume_role_session_user, duration_seconds=3600) identity_methods = ["assume_role"] body = CreateTemporaryAccessKeyByAgencyRequestBody( AgencyAuth(AgencyAuthIdentity(methods=identity_methods, assume_role=identity_assume_role))) request = CreateTemporaryAccessKeyByAgencyRequest(body) create_temporary_access_key_by_agency_response = client.create_temporary_access_key_by_agency(request) credential = create_temporary_access_key_by_agency_response.credential # CreateLoginToken # 获取自定义代理登录票据logintoken。 # 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 # 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 login_token_security_token = LoginTokenSecurityToken(access=credential.access, secret=credential.secret, id=credential.securitytoken, duration_seconds=1800) body = CreateLoginTokenRequestBody(LoginTokenAuth(login_token_security_token)) request = CreateLoginTokenRequest(body) create_login_token_response = client.create_login_token(request) login_token = create_login_token_response.x_subject_login_token # 获取自定义代理登录票据URL auth_URL = "https://auth.huaweicloud.com/authui/federation/login" # 企业管理系统登录地址 enterprise_system_login_URL = "https://example.com/" # 需要访问的华为云服务地址 target_console_URL = "https://console.huaweicloud.com/iam/?region=cn-north-4" # 创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。 FederationProxyUrl = auth_URL + "?idp_login_url=" + urllib.parse.quote( enterprise_system_login_URL) + "&service=" + urllib.parse.quote( target_console_URL) + "&logintoken=" + urllib.parse.quote(login_token) print(FederationProxyUrl)
  • Java示例代码 以下示例说明了如何使用java编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云 Java 软件开发工具包(Java SDK)开发。 import java.net.*; import java.util.Collections; import com.huaweicloud.sdk.core.auth.GlobalCredentials; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.iam.v3.IamClient; import com.huaweicloud.sdk.iam.v3.model.*; // 使用全局域名获取自定义代理登录票据 String endpoint = "https://iam.myhuaweicloud.com"; // 配置客户端属性 HttpConfig config = HttpConfig.getDefaultHttpConfig() .withIgnoreSSLVerification(true) .withProxyHost("proxy.huawei.com") .withProxyPort(8080); // 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 IamClient iamClient = IamClient.newBuilder().withCredential(new GlobalCredentials() .withDomainId("domainId") .withAk("ak") .withSk("sk")) .withEndpoint(endpoint) .withHttpConfig(config) .build(); /*CreateTemporaryAccessKeyByAgency 调用通过委托获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken。 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 */ IdentityAssumerole identityAssumerole = new IdentityAssumerole(). withAgencyName("testagency").withDomainId("0525e2c87exxxxxxx").withSessionUser(new AssumeroleSessionuser().withName("ExternalUser")).withDurationSeconds(3600); AgencyAuth agencyAuth = new AgencyAuth().withIdentity(new AgencyAuthIdentity().withAssumeRole(identityAssumerole). withMethods(Collections.singletonList(AgencyAuthIdentity.MethodsEnum.fromValue("assume_role")))); CreateTemporaryAccessKeyByAgencyRequestBody createTemporaryAccessKeyByAgencyRequestBody = new CreateTemporaryAccessKeyByAgencyRequestBody().withAuth(agencyAuth); CreateTemporaryAccessKeyByAgencyResponse createTemporaryAccessKeyByAgencyResponse = iamClient.createTemporaryAccessKeyByAgency(new CreateTemporaryAccessKeyByAgencyRequest().withBody(createTemporaryAccessKeyByAgencyRequestBody)); Credential credential = createTemporaryAccessKeyByAgencyResponse.getCredential(); /*CreateLoginToken 获取自定义代理登录票据logintoken。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 通过委托获取securitytoken时,请求体中必须填写session_user.name参数。 */ CreateLoginTokenRequestBody createLoginTokenRequestBody = new CreateLoginTokenRequestBody(). withAuth(new LoginTokenAuth().withSecuritytoken(new LoginTokenSecurityToken(). withAccess(credential.getAccess()). withId(credential.getSecuritytoken()). withSecret(credential.getSecret()).withDurationSeconds(1800))); CreateLoginTokenResponse createLoginTokenResponse = iamClient.createLoginToken(new CreateLoginTokenRequest().withBody(createLoginTokenRequestBody)); String loginToken = createLoginTokenResponse.getXSubjectLoginToken(); //自定义代理登录地址 String authURL = "https://auth.huaweicloud.com/authui/federation/login"; //企业管理系统登录地址 String enterpriseSystemLoginURL = "https://example.com/"; //需要访问的华为云服务地址 String targetConsoleURL = "https://console.huaweicloud.com/iam/?region=cn-north-4"; //创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器 String FederationProxyUrl = authURL + "?idp_login_url=" + URLEncoder.encode(enterpriseSystemLoginURL, "UTF-8") + "&service=" + URLEncoder.encode(targetConsoleURL, "UTF-8") + "&logintoken=" +URLEncoder.encode(loginToken, "UTF-8");
  • Java示例代码 以下示例说明了如何使用java编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云 Java 软件开发工具包(Java SDK)开发。 import java.net.URLEncoder; import java.util.Collections; import com.huaweicloud.sdk.core.auth.GlobalCredentials; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.core.exception.*; import com.huaweicloud.sdk.iam.v3.IamClient; import com.huaweicloud.sdk.iam.v3.model.*; //使用全局域名获取自定义代理登录票据 String endpoint = "https://iam.myhuaweicloud.com"; //配置客户端属性 HttpConfig config = HttpConfig.getDefaultHttpConfig() .withIgnoreSSLVerification(true) .withProxyHost("proxy.huawei.com") .withProxyPort(8080); // 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 IamClient iamClient = IamClient.newBuilder().withCredential(new GlobalCredentials() .withDomainId(domainId) .withAk(ak) .withSk(sk)) .withEndpoint(endpoint) .withHttpConfig(config) .build(); /*CreateTemporaryAccessKeyByToken 调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securitytoken。 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 */ TokenAuthIdentity tokenAuthIdentity = new TokenAuthIdentity().withMethods(Collections.singletonList(TokenAuthIdentity.MethodsEnum.fromValue("token"))).withToken(new IdentityToken().withDurationSeconds(3600)); CreateTemporaryAccessKeyByTokenRequestBody createTemporaryAccessKeyByTokenRequestBody = new CreateTemporaryAccessKeyByTokenRequestBody().withAuth(new TokenAuth().withIdentity(tokenAuthIdentity)); CreateTemporaryAccessKeyByTokenResponse createTemporaryAccessKeyByTokenResponse = iamClient.createTemporaryAccessKeyByToken(new CreateTemporaryAccessKeyByTokenRequest().withBody(createTemporaryAccessKeyByTokenRequestBody)); Credential credential = createTemporaryAccessKeyByTokenResponse.getCredential(); /*CreateLoginToken 获取自定义代理登录票据logintoken。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 */ CreateLoginTokenRequestBody createLoginTokenRequestBody = new CreateLoginTokenRequestBody(). withAuth(new LoginTokenAuth().withSecuritytoken(new LoginTokenSecurityToken(). withAccess(credential.getAccess()). withId(credential.getSecuritytoken()). withSecret(credential.getSecret()).withDurationSeconds(1800))); CreateLoginTokenResponse createLoginTokenResponse = iamClient.createLoginToken(new CreateLoginTokenRequest().withBody(createLoginTokenRequestBody)); String loginToken = createLoginTokenResponse.getXSubjectLoginToken(); //获取自定义代理登录票据URL String authURL = "https://auth.huaweicloud.com/authui/federation/login"; //企业管理系统登录地址 String enterpriseSystemLoginURL = "https://example.com/"; //需要访问的华为云服务地址 String targetConsoleURL = "https://console.huaweicloud.com/iam/?region=cn-north-4"; //创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。 String FederationProxyUrl = authURL + "?idp_login_url=" + URLEncoder.encode(enterpriseSystemLoginURL, "UTF-8") + "&service=" + URLEncoder.encode(targetConsoleURL, "UTF-8") + "&logintoken=" +URLEncoder.encode(loginToken, "UTF-8");
  • Python示例代码 以下示例说明了如何使用Python编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云开发者 Python 软件开发工具包 (Python SDK)开发。 from huaweicloudsdkcore.auth.credentials import GlobalCredentials from huaweicloudsdkcore.http.http_config import HttpConfig from huaweicloudsdkiam.v3 import * import urllib # 使用全局域名获取自定义代理登录票据 endpoint = "https://iam.myhuaweicloud.com" # 配置客户端属性 config = HttpConfig.get_default_config() config.ignore_ssl_verification = True config.proxy_protocol = "https" config.proxy_host = "proxy.huawei.com" config.proxy_port = 8080 credentials = GlobalCredentials(ak, sk, domain_id) # 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节 client = IamClient().new_builder(IamClient) \ .with_http_config(config) \ .with_credentials(credentials) \ .with_endpoint(endpoint) \ .build() # CreateTemporaryAccessKeyByToken # 调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken # 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。 # 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。 identity_methods = ["token"] identity_token = IdentityToken(duration_seconds=3600) body = CreateTemporaryAccessKeyByTokenRequestBody( TokenAuth(TokenAuthIdentity(methods=identity_methods, token=identity_token))) request = CreateTemporaryAccessKeyByTokenRequest(body) create_temporary_access_key_by_token_response = client.create_temporary_access_key_by_token(request) credential = create_temporary_access_key_by_token_response.credential # CreateLoginToken # 获取自定义代理登录票据logintoken。 # logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。 # 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。 # 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。 # 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。 login_token_security_token = LoginTokenSecurityToken(access=credential.access, secret=credential.secret, id=credential.securitytoken, duration_seconds=1800) body = CreateLoginTokenRequestBody(LoginTokenAuth(login_token_security_token)) request = CreateLoginTokenRequest(body) create_login_token_response = client.create_login_token(request) login_token = create_login_token_response.x_subject_login_token #自定义代理登录地址 auth_URL = "https://auth.huaweicloud.com/authui/federation/login" #企业管理系统登录地址 enterprise_system_login_URL = "https://example.com/" #需要访问的华为云服务地址 target_console_URL = "https://console.huaweicloud.com/iam/?region=cn-north-4" # 创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。 FederationProxyUrl = auth_URL + "?idp_login_url=" + urllib.parse.quote( enterprise_system_login_URL) + "&service=" + urllib.parse.quote( target_console_URL) + "&logintoken=" + urllib.parse.quote(login_token) print(FederationProxyUrl)
  • 华为云账号登录 如果您已注册华为云账号,可以通过该账号直接登录华为云。该账号是您的华为云资源归属、资源使用计费的主体,对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。所有IAM用户产生的费用账单由账号统一接收并付费。账号在登录华为云控制台时,可使用“账号名/邮件地址”或“手机号登录”方式。 已升级华为账号的华为云账号暂不支持登录,请使用华为账号登录。 通过华为云账号登录方法如下: 单击“华为云账号”,如图所示。 图5 华为云账号 输入您的账号信息,单击“登录”。 账号名/邮件地址:华为云账号名/与账号绑定的邮件地址。 账号名不区分大小写。 密码:账号密码,如果您忘记了账号的登录密码,可以单击“忘记密码”进行重置,重置方法请参见:忘记账号密码。 手机号登录:如果您忘记了华为云账号,可以单击“手机号登录”,可以通过已绑定的手机号、账号密码登录华为云。
  • IAM用户登录 IAM用户是由华为云账号或管理员在IAM中创建的用户,是云服务的使用人员,具有独立的身份凭证(密码和访问密钥),根据账号授予的权限使用资源。IAM用户不进行独立的计费,由所属账号统一付费。 账号与IAM用户可以类比为父子关系,如下图所示。 图6 账号与IAM用户 IAM用户登录方法如下: 在华为云的登录页面,单击登录下方的“IAM用户”,在“IAM用户登录”页面,输入账号名,IAM用户名/邮件地址和密码。 图7 IAM用户登录 租户名/原华为云账号:IAM用户所属的账号,即华为云账号。如果不知道账号名,请向管理员获取。 IAM用户名/邮件地址:在IAM创建用户时,输入的IAM用户名/邮件地址。如果不知道用户名及初始密码,请向管理员获取。 IAM用户密码:IAM用户的密码,非账号密码。 单击“登录”,登录华为云。
  • 企业联邦用户登录 企业联邦用户是在企业管理系统中创建的用户,账号在IAM控制台创建身份提供商后,企业联邦用户可以登录华为云并根据对应权限使用云服务。详情请参考:身份提供商概述。 如果您已知创建该身份提供商的华为云账号名称、身份提供商名称、企业管理系统的账号和密码,可以通过此方式登录华为云。 在华为云的登录页面,单击登录下方的“企业联邦用户”,在“企业联邦身份登录”页面,输入账号名,选择身份提供商名称。 图8 企业联邦身份登录 原华为云账号名/租户名:创建身份提供商的华为云账号名称。如果不知道账号名,请向管理员获取。 身份提供商名称:管理员创建身份提供商时,设置的名称。如果不知道身份提供商名称,请向管理员获取。 单击“前往登录”,跳转至企业管理系统登录页面。 在企业管理系统登录页面,输入企业管理系统用户名、密码。 单击“登录”,登录华为云。
  • 扫码登录 华为云APP是华为云的手机客户端,通过华为云APP,您可以在手机上远程管理您的华为云服务资源。如果您在华为云APP上登录了账号或IAM用户,通过APP扫描页面二维码即可登录华为云,无需重复输入账号信息。 如需下载华为云APP,请单击:下载华为云APP。 通过华为云APP扫码登录方法如下: 在华为云的登录页面,单击右上角的二维码,进入“扫码登录”页面。 图3 扫码登录 使用华为云APP扫描页面二维码,登录华为云。
  • 其他账号登录 如果您已有“华为官网账号”、“华为企业合作伙伴账号”,可以通过此方式登录华为云,无需记录多套身份信息。 下面以“华为官网账号”为例,为您介绍使用其他账号登录华为云的操作步骤。 单击“华为官网账号”,如下图所示。 图4 华为官网账号 根据界面指引登录华为官网账号。 首次登录时:页面自动跳转至创建或关联华为云账号页面,输入账号名和手机号、验证码。单击“创建并绑定”,登录华为云控制台。 后续登录时:直接跳转至华为云控制台。 首次登录成功后,后续可以使用步骤2中设置的账号名或手机号,通过华为云账号登录华为云控制台。
  • 敏感操作有哪些 当您开启操作保护后,进行以下操作时,需要进行身份认证。 表1 各云服务定义的敏感操作 类型 服务 敏感操作 计算 弹性云服务器(E CS ) 关闭、重启、删除弹性云服务器 重置弹性云服务器密码 卸载磁盘 解绑弹性公网IP 裸金属服务器(BMS) 关机、重启裸金属服务器 重置裸金属服务器的密码 卸载磁盘 解绑弹性公网IP 弹性伸缩(AS) 删除伸缩组 存储 对象存储服务 (OBS) 删除桶 创建、编辑、删除桶策略 配置对象策略 创建、编辑、删除桶ACL 配置日志记录 配置防盗链 增加、编辑桶清单 云硬盘服务(EVS) 删除云硬盘 云备份(CBR) 删除存储库 删除备份 备份恢复 删除策略 解绑资源 接受备份 CDN与智能边缘 内容分发网络(CDN) 域名下线策略 容器 云容器引擎(CCE) 删除集群 应用编排服务 (AOS) 删除堆栈 网络 云解析服务(DNS) 修改、暂停、删除记录集 修改、删除反向解析 删除自定义线路 虚拟私有云(VPC) 释放、解绑弹性公网IP 删除对等连接 安全组 删除入(出)方向规则 修改入(出)方向规则 批量删除入(出)方向规则 弹性负载均衡(ELB) 共享型负载均衡 删除负载均衡器 删除监听器 删除证书 删除后端云服务器 解绑弹性公网IP 解绑IPv4公网/私有IP 独享型负载均衡 删除负载均衡器 删除监听器 删除证书 删除后端云服务器 解绑弹性公网IP 解绑IPv4公网/私有IP 解绑IPv6地址 移出IPv6共享带宽 弹性公网IP(EIP) 删除共享带宽 释放、解绑弹性公网IP 批量释放、批量解绑弹性公网IP 网络 虚拟专用网络 (VPN) 删除VPN连接 退订包周期VPN网关 安全与合规 SSL证书管理(SCM) 删除证书 吊销证书 管理与监管 统一身份认证 服务(IAM) 关闭操作保护 关闭登录保护 修改手机号 修改邮件地址 修改登录密码 修改登录保护验证方式 删除IAM用户 停用IAM用户 删除委托 删除用户组 删除策略 删除授权 新增访问密钥 删除访问密钥 停用访问密钥 删除项目 修改访问密钥保护状态 管理与监管 云审计 服务( CTS ) 停用system追踪器 管理与监管 云日志 服务(LTS) 删除日志流/组 卸载ICAgent 应用服务 分布式缓存服务(DCS) 重置密码 删除实例 清空数据 专属云 专属分布式存储服务(DSS) 删除磁盘 数据库 云数据库 RDS for MySQL 重置管理员密码 删除数据库实例 删除数据库备份 通过备份文件恢复到已有实例 按指定时间点恢复到已有实例 切换主备节点 修改数据库端口 删除数据库账号 删除数据库 修改实例内网IP 解绑弹性公网IP 下载全量备份文件 数据库 云数据库 RDS for PostgreSQL 重置管理员密码 删除数据库实例 删除数据库备份 切换主备节点 修改数据库端口 修改实例内网IP 解绑弹性公网IP 下载全量备份文件 数据库 云数据库 GaussDB (for MySQL) 删除实例 重启实例 重启节点 删除只读节点 解绑弹性公网IP 删除数据库 重置数据库账号密码 删除数据库账号 重置管理员密码 修改内网域名 修改读写内网地址 将数据库实例恢复到指定时间点 数据库 文档数据库服务(DDS) 重置密码 重启、删除实例 重启节点 副本集主备切换 删除安全组规则 申请Shard或Config节点IP 备份恢复到当前实例 备份恢复到已有实例 包周期实例转按需计费 EI 企业智能 数据仓库 服务 GaussDB(DWS) 扩容、调整大小 重启 节点修复 重置密码 MapReduce服务 MRS ) 集群 删除集群 按需转包周期集群 停止所有组件 同步配置 节点 停止所有角色 隔离主机 取消隔离主机 组件: 停止服务 重启服务 滚动重启服务 停止实例 重启实例 滚动重启实例 入服 退服 保存服务配置 补丁: 安装补丁 卸载补丁 回滚补丁 云通信 消息&短信 (Message& SMS ) 签名删除 模板删除 获取app_secret 指定手机号、邮件地址绑定华为账号 指定IP白名单 续订套餐包 软件开发生产线 需求管理 CodeArts Req 删除项目 删除项目成员 修改成员信息 修改、删除权限 修改项目基本信息 删除工作项 用户服务 费用中心 订单支付 订单退订 资源释放
  • 根因分析 该问题的根因是数据库设置的时区不合理,通常该问题出现时Flink读取的时间和RDS数据库的时间会相差13小时。 请在RDS数据库内执行如下语句 show variables like '%time_zone%' 执行结果如下: 图1 执行结果 表1 参数说明 参数 说明 system_time_zone 数据库时区。 这里它指向 'SYSTEM',也就是数据库服务器的系统时间('system_time_zone')。而这个系统时间在这里指向 CST,所以,最终数据库时区才是 CST。 time_zone 数据库所在服务器的时区,服务器是台主机。 如本地数据库所在计算机的默认时区是中国标准时间,则查出来 'system_time_zone' 是 CST。 问题根因:在Mysql的time_zone是SYSTEM,system_time_zone是CST的情况下会造成bug。 CST在mysql里被理解为China Standard Time(UTC+8),但在 Java 里被理解为Central Standard Time (USA)(UTC-5)。 Flink taskmanager本质是一个 java 进程,在Mysql 的jdbc驱动的代码里会设置时区,这个时区是通过TimeZone.getTimeZone(canonicalTimezone) 读取的。也就是说,读取的是CST(UTC+8),但真正设置的时区却是CST(UTC-5)。
  • 操作步骤 该示例将car_info数据,以day字段为分区字段,parquet为编码格式,转储数据到OBS。更多内容请参考《数据湖探索Flink SQL语法参考》。 1 2 3 4 5 6 7 8 9 10 11 12 13 create sink stream car_infos ( carId string, carOwner string, average_speed double, day string ) partitioned by (day) with ( type = "filesystem", file.path = "obs://obs-sink/car_infos", encode = "parquet", ak = "{{myAk}}", sk = "{{mySk}}" ); 数据最终在OBS中的存储目录结构为:obs://obs-sink/car_infos/day=xx/part-x-x。 数据生成后,可通过如下SQL语句建立OBS分区表,用于后续批处理: 创建OBS分区表。 1 2 3 4 5 6 7 8 create table car_infos ( carId string, carOwner string, average_speed double ) partitioned by (day string) stored as parquet location 'obs://obs-sink/car-infos'; 从关联OBS路径中恢复分区信息。 1 alter table car_infos recover partitions;
  • JOIN数据倾斜解决方案 登录数据湖探索管理控制台,选择“SQL作业”,在要修改的作业所在行的“操作”列,单击“编辑”进入SQL编辑器界面。 在SQL编辑器界面,单击“设置”,在“配置项”尝试添加以下几个Spark参数进行解决。 参数项如下,冒号前是配置项,冒号后是配置项的值。 spark.sql.enableToString:false spark.sql.adaptive.join.enabled:true spark.sql.adaptive.enabled:true spark.sql.adaptive.skewedJoin.enabled:true spark.sql.adaptive.enableToString:false spark.sql.adaptive.skewedPartitionMaxSplits:10 spark.sql.adaptive.skewedPartitionMaxSplits表示倾斜拆分力度,可不加,默认为5,最大为10。 单击“执行”重新运行作业,查看优化效果。
  • Group By数据倾斜解决方案 取部分数据执行select count(*) as sum,Key from tbl group by Key order by sum desc查询具体是哪些key引起的数据倾斜。 然后对于倾斜Key单独做处理,加盐让其先将他分为多个task分别统计,最后再对分开统计结果进行结合统计。 例如:如下SQL示例,假设已知倾斜key为'Key01',导致单个task处理大量数据,做如下处理: SELECT a.Key, SUM(a.sum) AS Cnt FROM ( SELECT Key, count(*) AS sum FROM tbl GROUP BY Key, CASE WHEN KEY = 'Key01' THEN floor(random () * 200) ELSE 0 END ) a GROUP BY a.Key;
  • 解决方案 在SQL语句中配置发送失败重试:connector.properties.retries=5 create table kafka_sink( car_type string , car_name string , primary key (union_id) not enforced ) with ( "connector.type" = "upsert-kafka", "connector.version" = "0.11", "connector.properties.bootstrap.servers" = "xxxx:9092", "connector.topic" = "kafka_car_topic ", "connector.sink.ignore-retraction" = "true", "connector.properties.retries" = "5", "format.type" = "json" );
  • 参数说明 参数 约束 描述 file_or_folder_url 下载对象时必选 本地文件/文件夹路径。 folder_url 批量下载时必选 本地文件夹路径。 bucket 必选 桶名。 key 下载对象时必选 批量下载时可选 待下载的对象名,或批量下载的对象名前缀。 下载对象时,该值不能为空,最终保存在本地的位置及命名规则如下: 如果file_or_folder_url不存在,则工具会判断其是否以“/”或“\”结尾,如果是,则会以该路径创建文件夹,将对象下载到该新建的文件夹下; 如果file_or_folder_url不存在,且不以“/”或“\”结尾,则以该值作为文件名,将对象下载到本地; 如果file_or_folder_url为已存在的文件,则以该值作为文件名,将对象覆盖下载到本地; 如果file_or_folder_url为已存在的文件夹,则以对象名为文件名,将对象覆盖下载到file_or_folder_url指定的文件夹下。 批量下载时,最终保存在本地的位置规则如下: 如果该值为空,则将整个桶的内容下载到folder_url指定的文件夹下; 如果该值不为空,则将桶内以该值作为对象名前缀的内容下载到folder_url指定的文件夹下。 说明: 批量下载且该值不为空时,如果未设置flat选项,则下载的本地文件会包含上一级父对象名前缀;如果设置了flat选项,则下载的本地文件不包含上一级父对象名前缀。 请参考下载示例理解该参数的使用方式。 fr 附加参数,下载对象时可选 下载对象时生成结果清单文件。 flat 附加参数,批量下载时可选 批量下载时,不包含上一级父对象名前缀。 tempFileDir 附加参数,可选 分段下载时保存临时文件的文件夹,默认为配置文件中的defaultTempFileDir。 说明: 如果该值为空,且配置文件中的defaultTempFileDir也为空,则分段下载时生成的临时文件会保存在待下载文件的同目录下并以.obs.temp结尾。 由于分段下载时生成的临时文件会保存在该目录,请确保运行obsutil的用户对该路径有写权限。 该路径的可用空间需要大于待下载对象的大小。 dryRun 附加参数,可选 测试模式运行,不执行实际的下载操作。 u 附加参数,可选 增量下载操作,设置该参数后,下载每个对象时会对比本地对应路径的文件,仅在文件不存在,或者文件大小与对象大小不一致,或者文件的最后修改时间早于对象的最后修改时间时进行下载。 vlength 附加参数,可选 下载完成后,验证本地文件大小是否与桶中对象的大小一致。 vmd5 附加参数,可选 下载完成后,验证本地文件的MD5值是否与桶中对象的MD5值一致。 说明: 桶中对象必须包含元数据x-obs-meta-md5chksum,否则会忽略MD5值校验。 p 附加参数,可选 每个分段下载任务的最大并发数,默认为配置文件中的defaultParallels。 threshold 附加参数,可选 开启分段下载任务的阈值,单位:字节,默认为配置文件中的defaultBigfileThreshold。 说明: 如果待下载的对象小于该阈值,则使用直接下载模式;否则使用分段下载模式。 直接下载模式不会产生断点记录文件,不支持断点续传。 支持带容量单位配置,例如,配置1MB代表1048576字节。 versionId 附加参数,下载对象时可选 下载单个对象时可指定的对象版本号。 ps 附加参数,可选 每个分段下载任务的段大小,单位:字节,默认为配置文件中的defaultPartSize。 说明: 支持带容量单位配置,例如,配置1MB代表1048576字节。 支持配置为auto,此时obsutil会根据源对象大小自动设置每个分段任务的段大小。 cpd 附加参数,可选 生成断点记录文件的文件夹,默认为运行obsutil命令的用户目录的子文件夹.obsutil_checkpoint。 说明: 每个分段下载任务会产生唯一对应的断点记录文件并保存至该文件夹的down子文件夹下,分段任务执行成功后,对应的断点记录文件会被自动删除;分段任务执行失败或被中断后,下次执行该分段任务时会尝试通过对应的断点记录文件恢复任务。 r 附加参数,批量下载时必选 按指定的对象名前缀批量下载对象。 f 附加参数,批量下载时可选 强制操作,不进行询问提示。 j 附加参数,批量下载时可选 批量下载时的最大并发数,默认为配置文件中的defaultJobs。 说明: 工具会保证该值至少为1。 exclude 附加参数,批量下载时可选 不包含源对象的匹配模式,如:*.txt。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符,例如abc*.txt代表匹配以abc开头以.txt结尾的任意文件。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 如果待下载的对象名匹配该参数,则跳过该对象的复制。 须知: 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个exclude参数,如-exclude=*.xxx -exclude=*.xxx include 附加参数,批量下载时可选 include参数规定了下载对象的对象名格式,满足该格式的对象才会被下载。例如“*.jpg”规定只有对象名后缀为“.jpg”的对象会被下载。 说明: 支持“*”匹配多个任意字符和“?”匹配单个任意字符。 您可以使用“\*”代表匹配“*”字符本身,使用“\?”代表匹配“?”字符本身。 首先执行exclude的匹配规则,如果待下载的对象名不匹配exclude,则判断待下载的对象名是否匹配该参数,如果匹配则下载该对象,否则跳过该文件的下载。 须知: 建议使用引号传递该匹配模式(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)防止特殊符号被操作系统转义,导致不可预期的结果。 该匹配模式作用于对象全路径(含从根路径开始的对象前缀和对象名,例如,桶内对象路径为obs://bucket/src1/src2/test.txt,则对象的全路径为src1/src2/test.txt)。 该匹配模式仅适用于对象名非“/”结尾的对象。 支持指定多个include参数,如-include=*.xxx -include=*.xxx timeRange 附加参数,批量下载时可选 下载对象时的时间段匹配模式,仅下载最后修改时间在该时间段内的对象。 该匹配模式优先级低于对象名匹配模式:exclude和include,优先执行对象名匹配模式后才会执行该匹配模式。 说明: 使用“time1-time2”,代表匹配的时间段,其中time1必须小于等于time2,格式为yyyyMMddHHmmss。 时间格式支持自动补全,例如yyyyMMdd等价于yyyyMMdd000000,yyyyMM等价于yyyyMM01000000。 使用“*-time2”,代表匹配最后修改时间在time2之前的所有文件,使用“time1-*”,代表匹配最后修改时间time1之后的所有文件。 须知: 该匹配模式表示的时间是UTC时间。 该匹配模式仅适用于对象名非“/”结尾的对象。 mf 附加参数,可选 设置名称匹配模式(include、exclude)和时间匹配模式(timeRange)对对象名以“/”结尾的对象也生效。 o 附加参数,可选 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果、失败结果和警告结果三个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。 说明: 结果清单文件命名规则:cp_{succeed | failed | warning}_report_时间_TaskId.txt。 单个结果清单文件默认情况下最大为30MB且最大可保留的文件个数为1024,可在配置文件中通过recordMaxLogSize和recordBackups分别配置。 当涉及多文件/文件夹时,如需确认失败任务的具体错误信息,可参考结果清单文件夹下的失败结果清单文件"cp_failed_report_时间_TaskId.txt"及日志路径下的日志文件; config 附加参数,可选 运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 e 附加参数,可选 指定终端节点。 i 附加参数,可选 指定用户的AK。 k 附加参数,可选 指定用户的SK。 t 附加参数,可选 指定用户的securitytoken。
  • 命令结构 Windows操作系统 下载单个对象 obsutil cp obs://bucket/key file_or_folder_url [-tempFileDir=xxx] [-dryRun] [-u] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-ps=auto] [-cpd=xxx][-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] 批量下载对象 obsutil cp obs://bucket[/key] folder_url -r [-tempFileDir=xxx] [-dryRun] [-f] [-flat] [-u] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] macOS/Linux操作系统 下载单个对象 ./obsutil cp obs://bucket/key file_or_folder_url [-tempFileDir=xxx] [-dryRun] [-u] [-vlength] [-vmd5] [-p=1] [-threshold=52428800] [-versionId=xxx] [-ps=auto] [-cpd=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx] 批量下载对象 ./obsutil cp obs://bucket[/key] folder_url -r [-tempFileDir=xxx] [-dryRun] [-f] [-flat] [-u] [-vlength] [-vmd5] [-j=1] [-p=1] [-threshold=52428800] [-ps=auto] [-include=*.xxx] [-exclude=*.xxx] [-timeRange=time1-time2] [-mf] [-o=xxx] [-cpd=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
  • 代码示例 本示例展示了如何通过使用断点续传方式将本地文件localfile上传到examplebucket桶下的objectKey对象中。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.CompleteMultipartUploadResult; import com.obs.services.model.UploadFileRequest; public class UploadFile001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK 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, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。 //String endPoint = System.getenv("ENDPOINT"); // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); // 使用临时AK/SK和SecurityToken初始化客户端 // ObsClient obsClient = new ObsClient(ak, sk, securityToken, endPoint); try { UploadFileRequest request = new UploadFileRequest("examplebucket", "objectKey"); // 设置待上传的本地文件,localfile为待上传的本地文件路径,需要指定到具体带文件后缀的文件名 request.setUploadFile("localfile"); // 设置分段上传时的最大并发数 request.setTaskNum(5); // 设置分段大小为10MB request.setPartSize(10 * 1024 * 1024); // 开启断点续传模式 request.setEnableCheckpoint(true); // 进行断点续传上传 CompleteMultipartUploadResult result = obsClient.uploadFile(request); System.out.println("UploadFile successfully"); } catch (ObsException e) { // 发生异常时可再次调用断点续传上传接口进行重新上传 System.out.println("UploadFile 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()); e.printStackTrace(); } catch (Exception e) { System.out.println("UploadFile failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有上传对象的权限,才能上传对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:PutObject权限,如果使用桶策略则需授予PutObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 断点续传上传接口传入的文件大小至少要100K以上。 使用SDK的断点续传接口时,必须开启断点续传选项后才能在进程再次进入时读取上一次上传的进度。
  • 功能说明 对分段上传的封装和加强,解决上传大文件时由于网络不稳定或程序崩溃导致上传失败的问题。其原理是将待上传的文件分成若干个分段分别上传,并实时地将每段上传结果统一记录在checkpoint文件中,仅当所有分段都上传成功时返回上传成功的结果,否则返回错误信息提醒用户再次调用接口进行重新上传(重新上传时因为有checkpoint文件记录当前的上传进度,避免重新上传所有分段,从而节省资源提高效率)。
  • 自定义域名访问介绍与配置 当以自定义域名访问OBS桶时,需要先将该自定义域名同对应OBS桶访问域名进行绑定,相关配置请参见自定义域名绑定简介,自定义域名绑定配置。 当在自定义域名上配置了 CDN加速 服务,即自定义域名为CDN服务的加速域名时,需要额外对CDN服务进行配置,以保证可以正常采用自定义域名访问OBS服务。 以华为云CDN服务为例,相关配置如下所示: 登录华为云CDN服务,从CDN服务左侧列表中选择域名管理项,在该项中可以查看到所有配置的CDN服务域名信息。 配置源站。单击要使用的自定义域名项,进入域名配置界面,编辑源站配置,选择主源站类型为源站域名类型,对应源站为要访问的OBS桶域名。 配置回源HOST。回源HOST必须指定为加速域名即访问OBS服务时访问的自定义域名,否则可能会出现回源鉴权失败的问题。
  • 请求示例 在gaussdb_test数据库中创建多个SCHEMA。 { "db_name" : "gaussdb_test", "schemas" : [ { "name" : "rds", "owner" : "teste123" }, { "name" : "rds001", "owner" : "teste123" } ] }
  • 请求示例 创建一个 GaussDB数据库 ,库名为gaussdb_test。 { "name" : "gaussdb_test", "owner" : "test", "template" : "template0", "character_set" : "UTF8", "lc_collate" : "en_US.UTF-8", "lc_ctype" : "en_US.UTF-8" }
  • URI URI格式 POST https://{Endpoint}/gaussdb/v3/{project_id}/instances/{instance_id}/action URI样例 https://gaussdb-opengauss.cn-north-1.myhuaweicloud.com/opengauss/v3/0483b6b16e954cb88930a360d2c4e663/instances/dsfae23fsfdsae3435in01/action 参数说明 表1 参数说明 名称 是否必选 说明 project_id 是 租户在某一region下的project ID。 获取方法请参见获取项目ID/名称。 instance_id 是 实例ID。
  • URI URI格式 PUT https://{Endpoint}/gaussdb/v3/{project_id}/instances/{instance_id}/name URI样例 https://gaussdb-opengauss.cn-north-1.myhuaweicloud.com/opengauss/v3/0483b6b16e954cb88930a360d2c4e663/instances/dsfae23fsfdsae3435in14/name 参数说明 表1 参数说明 名称 是否必选 说明 project_id 是 租户在某一region下的project ID。 获取方法请参见获取项目ID/名称。 instance_id 是 实例ID。
共100000条