(resource:*)
,或者所有操作(action:*)
权限,则存在由于权限范围过大导致的数据安全风险。// 根据 github 提供的 maven 集成方法导入 java sts sdk,使用 3.1.0 及更高版本public class Demo {public static void main(String[] args) {TreeMap<String, Object> config = new TreeMap<String, Object>();try {//这里的 SecretId 和 SecretKey 代表了用于申请临时密钥的永久身份(主账号、子账号等),子账号需要具有操作存储桶的权限。String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// 替换为您的云 api 密钥 SecretIdconfig.put("secretId", secretId);// 替换为您的云 api 密钥 SecretKeyconfig.put("secretKey", secretKey);// 设置域名:// 如果您使用了腾讯云 cvm,可以设置内部域名//config.put("host", "sts.internal.tencentcloudapi.com");// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒config.put("durationSeconds", 1800);// 换成您的 bucketconfig.put("bucket", "examplebucket-1250000000");// 换成 bucket 所在地区config.put("region", "ap-guangzhou");// 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径// 列举几种典型的前缀授权场景:// 1、允许访问所有对象:"*"// 2、允许访问指定的对象:"a/a1.txt", "b/b1.txt"// 3、允许访问指定前缀的对象:"a*", "a/*", "b/*"// 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。config.put("allowPrefixes", new String[] {"exampleobject","exampleobject2"});// 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。// 简单上传、表单上传和分块上传需要以下的权限,其他权限列表请参见 https://www.tencentcloud.com/document/product/436/30580String[] allowActions = new String[] {// 简单上传"name/cos:PutObject",// 表单上传、小程序上传"name/cos:PostObject",// 分块上传"name/cos:InitiateMultipartUpload","name/cos:ListMultipartUploads","name/cos:ListParts","name/cos:UploadPart","name/cos:CompleteMultipartUpload"};config.put("allowActions", allowActions);/*** 设置condition(如有需要)//# 临时密钥生效条件,关于condition的详细设置规则和COS支持的condition类型可以参考 https://www.tencentcloud.com/document/product/436/71307?from_cn_redirect=1final String raw_policy = "{\\n" +" \\"version\\":\\"2.0\\",\\n" +" \\"statement\\":[\\n" +" {\\n" +" \\"effect\\":\\"allow\\",\\n" +" \\"action\\":[\\n" +" \\"name/cos:PutObject\\",\\n" +" \\"name/cos:PostObject\\",\\n" +" \\"name/cos:InitiateMultipartUpload\\",\\n" +" \\"name/cos:ListMultipartUploads\\",\\n" +" \\"name/cos:ListParts\\",\\n" +" \\"name/cos:UploadPart\\",\\n" +" \\"name/cos:CompleteMultipartUpload\\"\\n" +" ],\\n" +" \\"resource\\":[\\n" +" \\"qcs::cos:ap-shanghai:uid/1250000000:examplebucket-1250000000/*\\"\\n" +" ],\\n" +" \\"condition\\": {\\n" +" \\"ip_equal\\": {\\n" +" \\"qcs:ip\\": [\\n" +" \\"192.168.1.0/24\\",\\n" +" \\"101.226.100.185\\",\\n" +" \\"101.226.100.186\\"\\n" +" ]\\n" +" }\\n" +" }\\n" +" }\\n" +" ]\\n" +"}";config.put("policy", raw_policy);*/Response response = CosStsClient.getCredential(config);System.out.println(response.credentials.tmpSecretId);System.out.println(response.credentials.tmpSecretKey);System.out.println(response.credentials.sessionToken);} catch (Exception e) {e.printStackTrace();throw new IllegalArgumentException("no valid secret !");}}}
// 根据 github 提供的 maven 集成方式导入 cos xml java sdkimport com.qcloud.cos.*;import com.qcloud.cos.auth.*;import com.qcloud.cos.exception.*;import com.qcloud.cos.model.*;import com.qcloud.cos.region.*;public class Demo {public static void main(String[] args) throws Exception {// 用户基本信息String tmpSecretId = "COS_SECRETID"; // 替换为 STS 接口返回给您的临时 SecretIdString tmpSecretKey = "COS_SECRETKEY"; // 替换为 STS 接口返回给您的临时 SecretKeyString sessionToken = "Token"; // 替换为 STS 接口返回给您的临时 Token// 1 初始化用户身份信息(secretId, secretKey)COSCredentials cred = new BasicCOSCredentials(tmpSecretId, tmpSecretKey);// 2 设置 bucket 区域,详情请参见 COS 地域 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));// 3 生成 cos 客户端COSClient cosclient = new COSClient(cred, clientConfig);// bucket 名需包含 appidString bucketName = "examplebucket-1250000000";String key = "exampleobject";// 上传 object, 建议 20M 以下的文件使用该接口File localFile = new File("src/test/resources/text.txt");PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);// 设置 x-cos-security-token header 字段ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setSecurityToken(sessionToken);putObjectRequest.setMetadata(objectMetadata);try {PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);// 成功:putobjectResult 会返回文件的 etagString etag = putObjectResult.getETag();} catch (CosServiceException e) {//失败,抛出 CosServiceExceptione.printStackTrace();} catch (CosClientException e) {//失败,抛出 CosClientExceptione.printStackTrace();}// 关闭客户端cosclient.shutdown();}}
本页内容是否解决了您的问题?