tencent cloud

Cloud Object Storage

동향 및 공지
릴리스 노트
제품 공지
제품 소개
제품 개요
기능 개요
적용 시나리오
제품 장점
기본 개념
리전 및 액세스 도메인
규격 및 제한
제품 요금
과금 개요
과금 방식
과금 항목
프리 티어
과금 예시
청구서 보기 및 다운로드
연체 안내
FAQ
빠른 시작
콘솔 시작하기
COSBrowser 시작하기
사용자 가이드
요청 생성
버킷
객체
데이터 관리
일괄 프로세스
글로벌 가속
모니터링 및 알람
운영 센터
데이터 처리
스마트 툴 박스 사용 가이드
데이터 워크플로
애플리케이션 통합
툴 가이드
툴 개요
환경 설치 및 설정
COSBrowser 툴
COSCLI 툴
COSCMD 툴
COS Migration 툴
FTP Server 툴
Hadoop 툴
COSDistCp 툴
HDFS TO COS 툴
온라인 도구 (Onrain Dogu)
자가 진단 도구
실습 튜토리얼
개요
액세스 제어 및 권한 관리
성능 최적화
AWS S3 SDK를 사용하여 COS에 액세스하기
데이터 재해 복구 백업
도메인 관리 사례
이미지 처리 사례
COS 오디오/비디오 플레이어 사례
데이터 다이렉트 업로드
데이터 보안
데이터 검증
빅 데이터 사례
COS 비용 최적화 솔루션
3rd party 애플리케이션에서 COS 사용
마이그레이션 가이드
로컬 데이터 COS로 마이그레이션
타사 클라우드 스토리지 데이터를 COS로 마이그레이션
URL이 소스 주소인 데이터를 COS로 마이그레이션
COS 간 데이터 마이그레이션
Hadoop 파일 시스템과 COS 간 데이터 마이그레이션
데이터 레이크 스토리지
클라우드 네이티브 데이터 레이크
메타데이터 가속
데이터 레이크 가속기 GooseFS
데이터 처리
데이터 처리 개요
이미지 처리
미디어 처리
콘텐츠 조정
파일 처리
문서 미리보기
장애 처리
RequestId 가져오기
공용 네트워크로 COS에 파일 업로드 시 속도가 느린 문제
COS 액세스 시 403 에러 코드 반환
리소스 액세스 오류
POST Object 자주 발생하는 오류
보안 및 컴플라이언스
데이터 재해 복구
데이터 보안
액세스 관리
자주 묻는 질문
인기 질문
일반 문제
과금
도메인 규정 준수 문제
버킷 설정 문제
도메인 및 CDN 문제
파일 작업 문제
로그 모니터링 문제
권한 관리
데이터 처리 문제
데이터 보안 문제
사전 서명 URL 관련 문제
SDK FAQ
툴 관련 문제
API 관련 문제
Agreements
Service Level Agreement
개인 정보 보호 정책
데이터 처리 및 보안 계약
연락처
용어집
DocumentationCloud Object Storage

클라이언트 암호화

Focus Mode
Font Size
Last updated: 2024-06-25 11:17:42

개요

Java SDK는 클라이언트 암호화를 지원합니다. 파일을 암호화한 후 업로드하고, 다운로드 시 복호화하여 중요 데이터를 저장하는 클라이언트에 적합합니다.
클라이언트 암호화는 다음 두 가지 방식을 지원합니다.
KMS 서비스 호스팅 키: KMS 서비스의 사용자 마스터 키 ID(CMK ID)를 SDK에 제공하기만 하면 됩니다. 이 방식을 사용하려면 KMS 서비스를 활성화해야 합니다. KMS 서비스 정보에 대한 자세한 내용은 Tencent Cloud Key Management Service를 참고하십시오.
사용자 보관 키: 사용자가 암호화 키를 제공하고 보관합니다. 대칭 AES 및 비대칭 RSA 암호화를 지원합니다.
설명:
대칭과 비대칭은 매번 생성되는 임의 키를 암호화할 때만 사용하며, 파일 데이터 암호화에는 항상 AES256 대칭 암호화를 사용합니다.

주의 사항

사용자 데이터를 암호화하기 전에는 Tencent Cloud Cloud Object Storage(COS)에 업로드하지 않습니다.
클라이언트 암호화는 일부 업로드 속도를 소모합니다.
SDK 내부의 멀티파트 업로드는 직렬 방식으로 업로드합니다.

준비 사항

클라이언트 암호화는 내부 데이터 암호화에 AES256을 사용합니다. 기본적으로 JDK6~JDK8 초기 버전은 256비트 암호화를 지원하지 않으며, 실행 시 java.security.InvalidKeyException: Illegal key size or default parameters와 같은 이상 경고가 뜹니다. 이 경우 정책적 제한이 없는 Oracle의 JCE 권한 파일을 JRE 환경에 배포해야 합니다. 현재 사용 중인 JDK 버전에 따라 해당하는 파일을 각각 다운로드하여 압축을 해제한 후 JAVA_HOME의 jre/lib/security 디렉터리에 저장하십시오.

업로드 암호화 프로세스

1. 파일 객체를 업로드하기 전에 무작위로 대칭 암호화 키를 생성합니다. 무작위로 생성한 키는 KMS 서비스(또는 사용자가 제공한 키)를 통해 암호화되며, 암호화된 결과는 객체의 메타데이터에 base64로 인코딩되어 저장됩니다.
2. 파일 객체를 업로드합니다. 업로드 시 메모리에서 AES256 알고리즘을 사용해 암호화합니다.

다운로드 복호화 프로세스

1. 파일 메타데이터에서 암호화에 필요한 정보를 가져와 Base64로 디코딩 후 KMS 서비스(또는 사용자가 제공한 키)로 복호화하여 암호화된 데이터의 키를 얻습니다.
2. 키 쌍을 사용해 입력 스트림을 다운로드하고 AES256을 사용해 복호화하여 복호화된 파일 입력 스트림을 얻습니다.

요청 예시

예시 1

Tencent Cloud KMS 서비스를 사용해 암호화하고, 암호화 클라이언트를 생성하는 예시입니다. 전체 예시 코드는 KMS 암호화 클라이언트의 암호화 전체 예시를 참고하십시오.
// 사용자의 개인 정보(secretId, secretKey) 초기화
// SECRETID와 SECRETKEY는 CAM 콘솔에 로그인하여 조회 및 관리
String secretId = "SECRETID";
String secretKey = "SECRETKEY";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 버킷 리전 설정, COS 리전의 약칭은 https://www..com/document/product/436/6224 참고
ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));
// 요청 헤더가 조작되어 데이터를 암호화하지 못하는 문제를 방지하기 위해, 요청 시 https 프로토콜만 사용할 것을 권장
clientConfig.setHttpProtocol(HttpProtocol.https);

// KMS 서비스의 마스터 키
String cmk = "XXXXXXX";
//// KMS 서비스 리전과 COS 버킷 리전이 동일하지 않은 경우 단독 설정 필요
//String kmsRegion = "XXXXX";

// KMS 암호화 자료 초기화
KMSEncryptionMaterials encryptionMaterials = new KMSEncryptionMaterials(cmk);
// AES/GCM 모드를 사용하여 암호화 정보를 파일 메타 정보에 저장
CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption)
.withStorageMode(CryptoStorageMode.ObjectMetadata);

//// KMS 서비스 리전과 COS 리전이 동일하지 않은 경우 암호화 설정에서 KMS 서비스 리전 지정
//cryptoConf.setKmsRegion(kmsRegion);

//// 필요한 경우 KMS 서비스의 cmk에 해당 설명 정보 설정 가능
// encryptionMaterials.addDescription("yourDescKey", "yourDescValue");

// 암호화된 클라이언트 EncryptionClient를 생성합니다. COSEncryptionClient는 COSClient의 서브 유형으로, COSClient가 지원하는 모든 인터페이스를 지원합니다.
// EncryptionClient는 COSClient의 업로드/다운로드 로직을 덮어쓰기 하며 내부적으로 암호화 작업을 실행합니다. 다른 작업 실행 로직은 COSClient와 동일합니다.
COSEncryptionClient cosEncryptionClient =
new COSEncryptionClient(new COSStaticCredentialsProvider(cred),
new KMSEncryptionMaterialsProvider(encryptionMaterials), clientConfig,
cryptoConf);

// 파일 업로드
// putObject의 예시, 고급 API 업로드는 TransferManager 생성 시 COSEncryptionClient 객체를 전송할 때만 사용
String bucketName = "examplebucket-1250000000";
String key = "exampleobject";
File localFile = new File("localFilePath");
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
cosEncryptionClient.putObject(putObjectRequest);
cosEncryptionClient.shutdown();

예시 2

대칭 AES256을 사용하여 매번 생성되는 임의 키를 암호화하는 예시입니다. 전체 예시 코드는 클라이언트 대칭 키 암호화 전체 예시를 참고하십시오.
// 사용자의 개인 정보(secretId, secretKey) 초기화
// SECRETID와 SECRETKEY는 CAM 콘솔에 로그인하여 조회 및 관리
String secretId = "SECRETID";
String secretKey = "SECRETKEY";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 버킷 리전 설정, COS 리전의 약칭은 https://www..com/document/product/436/6224 참고
ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));

// 대칭 키 생성, 생성된 대칭 키는 파일에 저장 가능
KeyGenerator symKeyGenerator = KeyGenerator.getInstance("AES");
symKeyGenerator.init(256);
SecretKey symKey = symKeyGenerator.generateKey();

EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);
// AES/GCM 모드를 사용하여 암호화 정보를 파일 메타데이터에 저장
CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption)
.withStorageMode(CryptoStorageMode.ObjectMetadata);

// 암호화된 클라이언트 EncryptionClient를 생성합니다. COSEncryptionClient는 COSClient의 서브 유형으로, COSClient가 지원하는 모든 인터페이스를 지원합니다.
// EncryptionClient는 COSClient의 업로드/다운로드 로직을 덮어쓰기 하며 내부적으로 암호화 작업을 실행합니다. 다른 작업 실행 로직은 COSClient와 동일합니다.
COSEncryptionClient cosEncryptionClient =
new COSEncryptionClient(new COSStaticCredentialsProvider(cred),
new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfig,
cryptoConf);

// 파일 업로드
// putObject의 예시, 고급 API 업로드는 TransferManager 생성 시 COSEncryptionClient 객체를 전송할 때만 사용
String bucketName = "examplebucket-1250000000";
String key = "exampleobject";
File localFile = new File(localFilePath);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
cosEncryptionClient.putObject(putObjectRequest);
cosEncryptionClient.shutdown();

예시 3

비대칭 RSA를 사용하여 매번 생성되는 임의 키를 암호화하는 예시입니다. 전체 예시 코드는 클라이언트 비대칭 키 암호화 전체 예시를 참고하십시오.
// 사용자의 개인 정보(secretId, secretKey) 초기화
// SECRETID와 SECRETKEY는 CAM 콘솔에 로그인하여 조회 및 관리
String secretId = "SECRETID";
String secretKey = "SECRETKEY";
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// 버킷 리전 설정, COS 리전의 약칭은 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1 참고
ClientConfig clientConfig = new ClientConfig(new Region("COS_REGION"));

// 비대칭 키 생성
KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom srand = new SecureRandom();
keyGenerator.initialize(1024, srand);
KeyPair asymKeyPair = keyGenerator.generateKeyPair();

EncryptionMaterials encryptionMaterials = new EncryptionMaterials(asymKeyPair);
// AES/GCM 모드를 사용하여 암호화 정보를 파일 메타데이터에 저장
CryptoConfiguration cryptoConf = new CryptoConfiguration(CryptoMode.AuthenticatedEncryption)
.withStorageMode(CryptoStorageMode.ObjectMetadata);

// 암호화된 클라이언트 EncryptionClient를 생성합니다. COSEncryptionClient는 COSClient의 서브 유형으로, COSClient가 지원하는 모든 인터페이스를 지원합니다.
// EncryptionClient는 COSClient의 업로드/다운로드 로직을 덮어쓰기 하며 내부적으로 암호화 작업을 실행합니다. 다른 작업 실행 로직은 COSClient와 동일합니다.
COSEncryptionClient cosEncryptionClient =
new COSEncryptionClient(new COSStaticCredentialsProvider(cred),
new StaticEncryptionMaterialsProvider(encryptionMaterials), clientConfig,
cryptoConf);

// 파일 업로드
// putObject의 예시, 고급 API 업로드는 TransferManager 생성 시 COSEncryptionClient 객체를 전송할 때만 사용
String bucketName = "examplebucket-1250000000";
String key = "exampleobject";
File localFile = new File(localFilePath);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
cosEncryptionClient.putObject(putObjectRequest);
cosEncryptionClient.shutdown();

Help and Support

Was this page helpful?

Help us improve! Rate your documentation experience in 5 mins.

Feedback