(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는 임시 키를 신청하기 위한 영구 ID(루트 계정, 서브 계정 등)를 나타내며, 서브 계정은 버킷 작업 권한이 있어야 합니다.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// Tencent Cloud api 키 SecretId로 교체config.put("secretId", secretId);// Tencent Cloud api 키 SecretKey로 교체config.put("secretKey", secretKey);// 도메인 설정:// Tencent Cloud cvm을 사용하는 경우 내부 도메인 이름 설정 가능//config.put("host", "sts.internal.tencentcloudapi.com");// 임시 키의 유효 시간은 초 단위입니다. 기본값은 1800 초이며, 현재 루트 계정에서 최대 2 시간(7200 초), 서브 계정에서 최대 36시간(129600초)까지 설정 가능config.put("durationSeconds", 1800);// 사용자의 bucket으로 변경config.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 설정(필요한 경우)//# 임시 키가 적용되는 조건. COS에서 지원하는 condition 및 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 sdk 가져오기import 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 인터페이스에서 반환하는 임시 SecretId로 변경String tmpSecretKey = "COS_SECRETKEY"; // STS 인터페이스에서 반환하는 임시 SecretKey로 변경String 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 이름에는 반드시 appid를 포함String 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에서 파일의 etag 반환String etag = putObjectResult.getETag();} catch (CosServiceException e) {//실패 시 CosServiceException 팝업e.printStackTrace();} catch (CosClientException e) {//실패 시 CosClientException 팝업e.printStackTrace();}// 클라이언트 종료cosclient.shutdown();}}
문제 해결에 도움이 되었나요?