애플리케이션 데이터 암호화

이 주제에서는 네트워크에서 애플리케이션 데이터를 전송하기 전에 Cloud Key Management Service를 사용하여 클라이언트의 애플리케이션 데이터를 직접 암호화하는 방법을 설명합니다.

이 예시에서는 암호화된 데이터가 Google Cloud로 전송되고 Cloud Storage 버킷에 저장됩니다. 또한 Cloud Storage는 전체 프로세스를 자동화하는 자동 고객 관리 암호화 키를 사용한 서버 측 암호화를 지원합니다. 애플리케이션 데이터를 Google Cloud로 전송하기 전에 보호하려면 Tink 라이브러리를 이용하는 것이 좋습니다.

Tink 라이브러리는 일반적인 암호화 작업을 위한 단순한 오용 방지 API를 제공하는 다국어 교차 플랫폼 라이브러리입니다. 데이터가 Google Cloud 데이터 저장소에 들어가기 전에 데이터를 암호화하는 데 사용할 수 있으며, 자바, Python, C ++, Go, Objective-C, 기타 언어, 객체 저장소 및 관계형 데이터베이스 서비스를 모두 지원합니다.

본 가이드에서는 파일을 버킷에 업로드하기 전에 Cloud KMS를 사용하여 암호화합니다. 그런 다음 동일한 데이터를 다운로드하고 복호화하여 클라이언트에서 읽을 수 있습니다.

이 안내를 따르면 키 및 모든 암호화 작업이 Google Cloud에 유지되며 복호화에 Cloud KMS를 사용해야 합니다. 원시 대칭 암호화를 사용하면 온프레미스에서 데이터를 로컬로 암호화 또는 복호화하거나 다양한 라이브러리와 서비스 제공업체 간에 암호화된 데이터를 먼저 복호화하지 않고도 이동할 수 있습니다.

시작하기 전에

Google Cloud 조직 내에서 새 프로젝트를 만들고 이 프로젝트에서 결제를 사용 설정하고 사용자를 만들고 권한을 관리하려면 권한이 필요합니다. roles/resourcemanager.organizationAdmin 역할이 이 권한을 부여합니다.

설정

업무분장을 위해 두 개의 프로젝트와 두 개의 사용자 계정을 사용하는 것이 좋습니다. 이 주제의 단계를 따르면 암호화 키를 관리하는 사용자 및 서비스는 이를 사용하는 사용자 및 서비스와 다릅니다. 한 프로젝트는 키를 포함하고 관리하며, 다른 프로젝트는 암호화된 데이터를 Cloud Storage 버킷에 저장하고 필요에 따라 복호화합니다.

프로젝트 만들기

Google Cloud Console에서 프로젝트를 만듭니다. 단계별 안내는 ID 및 액세스 관리 빠른 시작을 참조하세요.

조직 내:

  1. 보안 비밀을 저장하는 데 사용되는 Cloud Storage 버킷을 포함할 Google Cloud 프로젝트를 만듭니다. 보안 비밀은 버킷에 객체로 저장됩니다. 아래 단계에서는 이 프로젝트를 my-storage-project라고 합니다.

  2. 선택적으로 두 번째 Google Cloud 프로젝트를 만들어 보안 비밀을 암호화하고 복호화하는 데 사용되는 Cloud KMS 키를 관리합니다. 아래 단계에서는 이 프로젝트를 my-kms-project라고 합니다.

    my-storage-projectmy-kms-project 모두에 동일한 Google Cloud 프로젝트를 사용하도록 선택할 수 있습니다.

  3. 각 프로젝트에서 Cloud KMS 빠른 시작의 시작하기 전에 섹션의 단계에 따라 Cloud KMS API를 사용 설정하고 결제를 사용 설정합니다.

사용자 만들기

사용자를 만들고 Google Cloud Console에서 역할을 부여합니다. 단계별 안내는 ID 및 액세스 관리 빠른 시작을 참조하세요.

이 절차에서는 두 사용자를 만듭니다. key-admin은 암호화 키를 관리하고 key-user는 키를 사용해서 데이터를 암호화 및 복호화합니다.

my-kms-project 프로젝트에서 이 절차를 수행합니다.

  1. key-admin 사용자를 만듭니다. 사용자를 만들려면 my-kms-project 프로젝트에 대해 roles/resourcemanager.organizationAdmin 역할이 필요합니다.

  2. key-adminroles/cloudkms.admin ID 및 액세스 관리 역할을 부여합니다. key-admin은 키를 만들고 관리할 수 있습니다.

  3. key-user 사용자를 만듭니다.

  4. key-userroles/cloudkms.cryptoKeyEncrypterDecrypter IAM 역할을 부여합니다. key-user는 키를 사용하여 데이터를 암호화하고 복호화할 수 있습니다.

스토리지 버킷 만들기

my-storage-project 프로젝트에서 이 절차를 수행합니다.

  1. my-bucket이라는 이름의 스토리지 버킷을 만듭니다.
  2. key-usermy-bucket 스토리지 버킷에 대한 roles/storage.objectAdmin 역할을 부여합니다.

암호화 키 만들기

my-kms-project 프로젝트에서 이 절차를 key-admin 사용자로 수행합니다.

  1. storage라는 키링을 만듭니다. 키링의 이름은 프로젝트에서 고유합니다. 키링은 삭제하거나 이름을 변경할 수 없습니다. Google Cloud CLI를 사용하여 키링을 만듭니다.

    gcloud kms keyrings create storage \
      --location global
    
  2. 암호화 용도로 my-key라는 키를 storage 키링에 만듭니다. 키의 이름은 키링에서 고유합니다. 키는 삭제하거나 이름을 변경할 수 없지만, 키 버전은 폐기할 수 있습니다. Google Cloud CLI를 사용하여 키를 만듭니다. 초기 키 버전은 자동으로 생성되며 기본 버전이 됩니다.

    gcloud kms keys create my-key \
     --location global \
     --keyring storage \
     --purpose encryption
    

키링 및 키 만들기에 대해 자세히 알아보세요.

보안 비밀을 포함하는 파일 암호화

두 프로젝트를 사용하여 이 절차를 key-user 사용자로 수행합니다.

  1. 로컬 머신에서 'This is my secret.' 텍스트가 포함된 my-secret.txt라는 파일을 만듭니다.

    echo "This is my secret" > my-secret.txt
    
  2. my-kms-project 프로젝트에서 my-key 키를 사용하여 my-secret.txt를 암호화합니다. 암호화 파일을 mysecret.txt.encrypted에 기록합니다.

    gcloud kms encrypt \
     --location global \
     --keyring storage \
     --key my-key \
     --plaintext-file my-secret.txt \
     --ciphertext-file my-secret.txt.encrypted
    

    데이터 암호화 빠른 시작에 따라 데이터 암호화에 대해 자세히 알아보세요.

    원시 대칭 암호화에는 대신 raw-encrypt를 사용합니다.

  3. 암호화된 my-secret.txt.encrypted 파일을 my-storage-project 프로젝트에 있는 my-bucket 스토리지 버킷에 업로드합니다. gsutil 명령어를 사용할 수 있습니다.

    gsutil cp my-secret.txt.encrypted gs://my-storage-bucket
    

    객체를 스토리지 버킷에 업로드하는 방법을 자세히 알아보세요.

  4. [선택사항] 로컬 머신에서 일반 텍스트 my-secret.txt 파일을 삭제합니다. 이는 암호화되지 않은 민감한 정보가 포함된 파일에 권장됩니다.

이제 my-storage-bucket 스토리지 버킷에 my-key 키를 사용하여 암호화된 my-secret.txt.encrypted 파일이 포함됩니다.

보안 비밀을 포함하는 파일 복호화

두 프로젝트를 사용하여 이 단계를 key-user 사용자로 수행합니다.

  1. my-bucket 스토리지 버킷에서 my-secret.txt.encrypted 파일을 다운로드합니다. gsutil 명령어를 사용할 수 있습니다.

    gsutil cp gs://my-storage-bucket/my-secret.txt.encrypted .
    

    저장소 버킷에서 객체를 다운로드하는 방법에 대해 자세히 알아보세요.

  2. less와 같은 명령어 또는 텍스트 편집기를 사용하여 파일을 읽으세요. 일반 텍스트 파일이 아닙니다.

  3. my-secret.txt 암호화에 사용된 것과 동일한 키를 사용해서 my-secret.txt.encrypted를 복호화하고 보호화된 데이터를 my-secret.txt.decrypted라는 새 일반 텍스트 파일에 저장합니다.

    gcloud kms decrypt --location global \
     --keyring storage \
     --key my-key \
     --ciphertext-file my-secret.txt.encrypted \
     --plaintext-file my-secret.txt.decrypted
    

    데이터 복호화 빠른 시작에 따라 데이터 암호화에 대해 자세히 알아보세요.

    원시 대칭 암호화에는 대신 raw-decrypt를 사용합니다.

  4. cat 명령어를 사용하여 my-secret.txt.decrypted 파일을 읽습니다. 해당 콘텐츠는 my-secret.txt의 원래 콘텐츠와 동일합니다.

    cat my-secret.txt.decrypted
    
    This is my secret.
  5. [원본] 로컬 머신에서 my-secret.txt.encryptedmy-secret.txt.decrypted 파일을 삭제합니다.

삭제

정리하려면 로컬 머신에서 만든 모든 파일을 삭제한 다음 [MY_KMS_PROJECT][MY_STORAGE_PROJECT] 프로젝트를 삭제합니다.

다음 단계