이 주제에서는 로컬에서 데이터를 암호화하고 Tink 및 Cloud Key Management Service(Cloud KMS)를 사용하여 Cloud Storage에 업로드하는 방법을 설명합니다. Tink는 Google의 암호화 전문가와 보안 엔지니어가 작성한 오픈소스 암호화 라이브러리입니다.
개요
클라이언트 측 암호화는 데이터를 클라우드에 전송하기 전에 수행되는 모든 암호화입니다. 클라이언트 측 암호화를 사용할 경우 암호화 키를 만들어 관리하고 데이터를 암호화한 후 클라우드로 전송해야 합니다.
이 주제에서는 Cloud KMS의 암호화 키를 사용하여 Tink로 클라이언트 측 봉투 암호화를 구현합니다.
이 튜토리얼의 Terraform 기반 청사진 버전은 kms-solutions GitHub 저장소에서 확인할 수 있습니다.
시작하기 전에
- 암호화에 대해 대칭 Cloud KMS 암호화 키를 만듭니다. 키의 URI를 기록합니다. 이 값은 나중에 필요합니다.
- Cloud KMS와 함께 사용할 Tink를 설치합니다.
- Cloud Storage에 버킷을 만들어 암호화된 데이터를 업로드합니다.
필요한 역할
Tink와 함께 Cloud KMS 키를 사용하는 데 필요한 권한이 서비스 계정에 있는지 확인하려면 관리자에게 서비스 계정에 키에 대한 Cloud KMS CryptoKey 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter
) IAM 역할을 부여해 달라고 요청합니다.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
관리자는 커스텀 역할이나 다른 사전 정의된 역할을 통해 서비스 계정에 필요한 권한을 부여할 수도 있습니다.
Tink를 사용한 봉투 암호화
봉투 암호화에서 Cloud KMS 키는 키 암호화 키(KEK)로 작동합니다. 즉, 실제 데이터를 암호화하는 데 사용되는 데이터 암호화 키(DEK)를 암호화하는 데 사용됩니다.
Cloud KMS에서 KEK를 만든 후 각 메시지를 암호화하려면 다음을 수행해야 합니다.
- 로컬에서 데이터 암호화 키(DEK)를 생성합니다.
- DEK를 로컬에서 사용하여 메시지를 암호화합니다.
- Cloud KMS를 사용하여 KEK로 DEK를 암호화(래핑)합니다.
- 암호화된 데이터와 래핑된 DEK를 저장합니다.
Tink를 사용할 때는 이 봉투 암호화 프로세스를 처음부터 구현할 필요가 없습니다.
Tink를 봉투 암호화에 사용하려면 키 URI와 사용자 인증 정보를 Tink에 제공합니다. 키 URI는 Cloud KMS의 KEK를 가리키고 사용자 인증 정보는 Tink가 KEK를 사용하도록 허용합니다. Tink는 DEK를 생성하고, 데이터를 암호화하고, DEK를 래핑하고, 암호화된 데이터와 래핑된 DEK가 있는 단일 암호문을 반환합니다.
Tink는 연관 데이터로 암호화 인증(AEAD) 기본을 사용하여 Python, 자바, C++, Go에서 봉투 암호화를 지원합니다.
Tink와 Cloud KMS 연결
Tink에서 생성된 DEK를 Cloud KMS의 KEK로 암호화하려면 KEK의 URI를 가져와야 합니다. Cloud KMS에서 KEK URI 형식은 다음과 같습니다.
gcp-kms://projects/<PROJECT>/locations/<LOCATION>/keyRings/
<KEY RING>/cryptoKeys/<KEY NAME>/cryptoKeyVersions/<VERSION>
키 경로를 가져오는 방법에 대한 자세한 내용은 Cloud KMS 리소스 ID 가져오기를 참조하세요.
Tink 초기화 및 데이터 암호화
Tink는 기본 알고리즘의 세부정보를 관리하는 기본 암호화 빌드 블록을 사용하므로 사용자가 태스크를 안전하게 수행할 수 있습니다. 기본마다 특정 태스크를 처리하는 API를 제공합니다. 여기에서는 AEAD를 사용하므로 Tink AEAD 기본을 사용합니다.
Python
Python
Cloud KMS용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud KMS 클라이언트 라이브러리를 참조하세요.
Cloud KMS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
자바
Java
Cloud KMS용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Cloud KMS 클라이언트 라이브러리를 참조하세요.
Cloud KMS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Tink에서 지원하는 기본 및 인터페이스에 대한 자세한 내용은 Tink 시작하기 페이지를 참조하세요.
다음 단계
- Tink에 대해 자세히 알아보기
- Cloud SQL에서 클라이언트 측 암호화 사용 방법 알아보기