云服务器内容精选

  • 功能说明 OBS客户端支持通过访问密钥、请求方法类型、请求参数等信息生成一个在Query参数中携带鉴权信息的URL,可将该URL提供给其他用户进行临时访问。在生成URL时,您需要指定URL的有效期来限制访客用户的访问时长。 如果您想授予其他用户对桶或对象临时进行其他操作的权限(例如上传或下载对象),则需要生成带对应请求的URL后(例如使用生成PUT请求的URL上传对象),将该URL提供给其他用户。 如果遇到跨域报错、签名不匹配问题,请参考以下步骤排查问题: 未配置跨域,需要在控制台配置CORS规则,请参考配置桶允许跨域请求。 签名计算问题,请参考URL中携带签名排查签名参数是否正确;比如上传对象功能,后端将Content-Type参与计算签名生成授权URL,但是前端使用授权URL时没有设置Content-Type字段或者传入错误的值,此时会出现跨域错误。解决方案为:Content-Type字段前后端保持一致。 不支持通过 CDN加速 后的 域名 生成临时访问URL。
  • 其他使用前须知 本文档是与OBS SDK配套的参考文档,为了您能更好的使用Java SDK,推荐前往下载与安装SDK(Java SDK)下载最新版本的Java SDK。 请确认您已经熟悉OBS的基本概念,如桶(Bucket)、对象(Object)、访问密钥(AK和SK)、终端节点(Endpoint)和访问域名等。 您可以先参考OBS客户端通用示例,了解OBS Java SDK接口调用的通用方式。 使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效;如果抛出异常,则说明操作失败,此时可从SDK自定义异常实例中获取错误信息。 使用OBS客户端进行接口调用成功后,均会返回包含响应头信息的SDK公共响应头实例(或其子类实例)。 当前各区域特性开放不一致,部分特性只在部分区域开放,使用过程中如果接口HTTP状态码为405,请确认该区域是否支持该功能特性。您可以查看功能总览确认区域是否支持该功能特性,或者提交工单寻求技术支持。
  • 代码示例 本示例用于通过ObsClient.setBucketTagging设置examplebucket桶的桶标签。代码展示如下: 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.BucketTagInfo; public class SetBucketTagging001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_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 { // 设置桶标签 BucketTagInfo bucketTagInfo = new BucketTagInfo(); BucketTagInfo.TagSet tagSet = new BucketTagInfo.TagSet(); tagSet.addTag("tag1", "value1"); tagSet.addTag("tag2", "value2"); bucketTagInfo.setTagSet(tagSet); obsClient.setBucketTagging("examplebucket", bucketTagInfo); System.out.println("setBucketTagging successfully"); } catch (ObsException e) { System.out.println("setBucketTagging 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("setBucketTagging failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 每个桶最多能设置10个标签。 您必须是桶拥有者或拥有设置桶标签的权限,才能设置桶标签。建议使用 IAM 或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutBucketTagging权限,如果使用桶策略则需授予PutBucketTagging权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 接口约束 您必须是桶拥有者或拥有下载对象的权限,才能下载对象。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:object:GetObject权限,如果使用桶策略则需授予GetObject权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、配置对象策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。 所有的图片处理操作均不会修改存储在桶中的原图。 归档存储不支持图片处理。 深度归档存储不支持图片处理。 处理后的图片直接返回浏览器展示,不会保存在OBS中,也不会占用存储空间,不会产生存储费用。图片处理只收取处理的费用。
  • 代码示例 本示例用于通过obsClient.getBucketTagging获取examplebucket桶的桶标签。代码展示如下: 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 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.BucketTagInfo; public class GetBucketTagging001 { 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 { // 获取桶标签 BucketTagInfo bucketTagInfo = obsClient.getBucketTagging("examplebucket"); for(BucketTagInfo.TagSet.Tag tag : bucketTagInfo.getTagSet().getTags()){ System.out.println("\t" + tag.getKey() + ":" + tag.getValue());} System.out.println("getBucketTagging successfully"); } catch (ObsException e) { System.out.println("getBucketTagging 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("getBucketTagging failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 接口约束 您必须是桶拥有者或拥有获取桶标签的权限,才能获取桶标签。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:GetBucketTagging权限,如果使用桶策略则需授予GetBucketTagging权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。 OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
  • 请求参数说明 表1 请求参数列表 参数名称 参数类型 是否必选 描述 request BaseBucketRequest 必选 参数解释: 桶基本信息参数列表,详见BaseBucketRequest。 表2 BaseBucketRequest 参数名称 参数类型 是否必选 描述 bucketName String 必选 参数解释: 桶名。 约束限制: 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。 桶命名规则如下: 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。 禁止使用IP地址。 禁止以“-”或“.”开头及结尾。 禁止两个“.”相邻(如:“my..bucket”)。 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。 默认取值: 无
  • 配置须知 按照本案例配置后,可以正常通过API或SDK完成权限所允许的操作,但如果通过控制台或OBS Browser+登录,可能会出现无权限的相关提示信息。 报错原因:通过控制台或者OBS Browser+登录后,加载桶列表时会调用获取桶列表(ListAllMyBuckets)等接口,加载对象列表时会调用列举桶内对象(ListBucket)等接口,其他页面也会调用其他的OBS接口。如果指定的权限中没有包含如obs:bucket:ListAllMyBuckets、obs:bucket:ListBucket及一些控制台和OBS Browser+加载页面时需要调用的接口权限,会提示“拒绝访问,请检查相应权限”,或者“不允许在请求的资源上执行此操作”。 如果希望IAM用户能在控制台或OBS Browser+顺利完成桶和对象相关操作,建议至少在自定义策略中包含obs:bucket:ListAllMyBuckets和obs:bucket:ListBucket两个权限。(本案例中的权限2和权限3已包含) obs:bucket:ListAllMyBuckets面向所有资源,资源选择时要选择所有资源。 obs:bucket:ListBucket只面向授权的桶,资源选择时根据情况选择所有资源或者指定的桶。
  • 桶ACL和桶策略的映射关系 桶ACL用于授予桶基本的读写权限,桶策略高级设置中支持更多在桶上可以执行的动作。桶ACL是对桶策略的补充,除了限定的只能由桶ACL授予日志投递用户组权限外,更多时候桶策略可以替代桶ACL管理桶的访问权限。桶ACL访问权限和桶策略动作的映射关系如表1所示。 表1 桶ACL和桶策略的映射关系 ACL权限 选项 对应桶策略高级设置中的动作 桶访问权限 读取权限 HeadBucket ListBucket ListBucketVersions ListBucketMultipartUploads 写入权限 PutObject DeleteObject DeleteObjectVersion 对象权限 对象读权限 GetObject ACL访问权限 读取权限 GetBucketAcl 写入权限 PutBucketAcl
  • 对象ACL和桶策略的映射关系 对象ACL用于授予对象基本的读写权限。桶策略高级设置中支持更多在对象上可以执行的动作。对象ACL访问权限和桶策略动作的映射关系如表2所示。 表2 对象ACL和桶策略的映射关系 对象ACL权限 选项 对应桶策略高级设置中的动作 对象访问权限 读取权限 GetObject GetObjectVersion ACL访问权限 读取权限 GetObjectAcl GetObjectVersionAcl 写入权限 PutObjectAcl PutObjectVersionAcl
  • Action / NotAction 桶策略动作与资源相关,当资源为当前整个桶时,桶策略动作需配置为桶相关的动作;当资源为桶内对象时,桶策略动作需配置为对象相关的动作。 桶策略动作可以通过排除策略来指定: (可选项)排除以上授权操作:桶策略对除指定动作外的其他动作生效。 不勾选:表示桶策略对指定的动作生效。 勾选:表示桶策略对除指定动作外的其他动作生效。 对于桶策略模板,“桶读写”模板默认勾选,其他模板默认不勾选。桶策略模板中的动作排除策略不支持修改。
  • Condition 除了指定效力、被授权用户、资源、动作外,桶策略还可以指定生效条件。只有当条件设置的表达式与访问请求中的值匹配时,桶策略才生效。条件是可选参数,用户可以根据业务需要选择是否使用。 例如,账号A拥有example桶,账号B会向账号A的example桶中上传对象,账号A想要拥有账号B向example桶中上传对象的完全控制权限(因为默认情况下对象由上传该对象的账号B拥有),则可以指定上传请求中必须包含x-obs-acl键,以及显式授予完全控制权限,完整的条件表达式如下: 条件运算符 键 值 StringEquals x-obs-acl bucket-owner-full-control 条件由条件运算符、条件键、条件值三部分组成,最终组成一个条件表达式,决定桶策略生效的条件。同一个条件运算符中,如果存在多个相同的键,则只会保留最后一个键。条件运算符、键两者之间存在互相限制的关联关系,例如:条件运算符选择了一个String类型的,比如StringEquals,键就只能选择String类型的,比如UserAgent。键选择了一个Date类型,比如CurrentTime,条件运算符就只能选择Date类型的,比如DateEquals。 条件运算符 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,策略才能生效。Statement中可选的条件运算符参见表4,String型运算符如未增加说明,不区分大小写。
  • 配置须知 如果同时在IAM和企业项目中针对某个动作(Action)为某IAM用户进行了授权,授权结果以IAM为准。 举例: 1、如果在IAM和企业项目同时配置了列举桶权限(obs:bucket:ListAllMyBuckets),最终结果会列举出所有桶,包括用户所属企业项目之外的桶。 2、针对上传权限(obs:object:PutObject),如果在IAM中配置Allow,企业项目中配置deny,最终结果为Allow,即允许上传对象。 如果在IAM中为某IAM用户配置OBS Viewer权限,并且将其所在用户组加入至企业项目中,则IAM用户登录后将会出现无法列举桶的情况。 配置完成进入桶后仍然会出现无权限相关提示,属于正常现象,因为控制台还调用了其他高级配置的接口,但此时已可以正常完成读写模式中允许的操作。
  • 场景介绍 本章节介绍如何通过企业项目为华为云账号下的某个IAM用户配置指定桶的权限,使其只能在控制台看到授权的桶并且拥有桶的指定权限,无法看到账号下的其他桶,实现桶资源的隔离。 本案例将指定IAM用户test-user只能在控制台看到名为example的桶,并且只拥有上传权限(obs:object:PutObject)、列举桶内权限(obs:bucket:ListBucket)和列举桶权限(obs:bucket:ListAllMyBuckets),通过这些权限test-user用户可以完成上传对象的操作。