이 페이지에서는 네트워크에서 애플리케이션 데이터를 전송하기 전에 Cloud Key Management Service를 사용하여 클라이언트의 애플리케이션 데이터를 직접 암호화하는 방법을 보여줍니다.
이 예시에서는 암호화된 데이터가 Google Cloud 로 전송되고 Cloud Storage 버킷에 저장됩니다. 또한 Cloud Storage는 전체 프로세스를 자동화하는 자동 고객 관리 암호화 키를 사용한 서버 측 암호화를 지원합니다. 애플리케이션 데이터를Google Cloud로 전송하기 전에 보호하려면 Tink 라이브러리를 사용하는 것이 좋습니다.
Tink 라이브러리는 일반적인 암호화 작업을 위한 API를 제공하는 다국어 교차 플랫폼 라이브러리입니다. 데이터가 Google Cloud 데이터 저장소에 들어가기 전에 데이터를 암호화하는 데 사용할 수 있으며, Java, Python, C ++, Go, Objective-C, 기타 언어, 객체 저장소 및 관계형 데이터베이스 서비스를 모두 지원합니다.
이 워크스루에서는 파일을 버킷에 업로드하기 전에 Cloud KMS를 사용하여 암호화합니다. 그런 다음 동일한 데이터를 다운로드하고 복호화하여 클라이언트에서 읽을 수 있습니다.
이 안내를 따르면 키와 모든 암호화 작업이 Google Cloud 에 유지되며 복호화에는 Cloud KMS를 사용해야 합니다. 원시 대칭 암호화를 사용하면 온프레미스에서 데이터를 로컬로 암호화 또는 복호화하거나 다양한 라이브러리와 서비스 제공업체 간에 암호화된 데이터를 먼저 복호화하지 않고도 이동할 수 있습니다.
시작하기 전에
Google Cloud 조직 내에서 새 프로젝트를 만들고 이 프로젝트에서 결제를 사용 설정하고 사용자를 만들고 권한을 관리하려면 권한이 필요합니다. roles/resourcemanager.organizationAdmin
역할이 이 권한을 부여합니다.
설정
업무분장을 위해 두 개의 프로젝트와 두 개의 사용자 계정을 사용하는 것이 좋습니다. 이 가이드의 단계를 따르면 암호화 키를 관리하는 사용자 및 서비스는 이를 사용하는 사용자 및 서비스와 다릅니다. 한 프로젝트는 키를 포함하고 관리하며, 다른 프로젝트는 암호화된 데이터를 Cloud Storage 버킷에 저장하고 필요에 따라 복호화합니다.
프로젝트 만들기
Google Cloud 콘솔에서 프로젝트를 만듭니다. 단계별 안내는 ID 및 액세스 관리 빠른 시작을 참고하세요.
조직 내에서 다음 프로젝트를 만듭니다.
보안 비밀을 저장하는 데 사용되는 Cloud Storage 버킷을 포함할 Google Cloud 프로젝트를 만듭니다. 보안 비밀은 버킷에 객체로 저장됩니다. 이 프로젝트를 STORAGE_PROJECT_ID라고 합니다.
보안 비밀을 암호화하고 복호화하는 데 사용되는 Cloud KMS 키를 관리하는 두 번째 Google Cloud 프로젝트를 만듭니다. 이 프로젝트를 KEY_PROJECT_ID라고 합니다.
각 프로젝트에서 Cloud KMS 빠른 시작의 시작하기 전에 섹션의 단계에 따라 Cloud KMS API를 사용 설정하고 결제를 사용 설정합니다.
사용자 만들기
사용자를 만들고 콘솔에서 역할을 부여합니다. Google Cloud 단계별 안내는 ID 및 액세스 관리 빠른 시작을 참고하세요.
이 절차에서는 두 사용자를 만듭니다. 키 관리자는 암호화 키를 관리하고 키 사용자는 키를 사용하여 데이터를 암호화 및 복호화할 수 있습니다.
KEY_PROJECT_ID 프로젝트에서 이 절차를 수행합니다.
키 관리자 계정을 만듭니다.
키 관리자에게
roles/cloudkms.admin
Identity and Access Management 역할을 부여합니다. 이 역할로 키 관리자는 키를 만들고 관리할 수 있습니다.키 사용자 계정을 만듭니다.
키 사용자에게
roles/cloudkms.cryptoKeyEncrypterDecrypter
IAM 역할을 부여합니다. 이 역할을 가진 키 사용자는 데이터를 암호화하고 복호화할 수 있습니다.
스토리지 버킷 만들기
STORAGE_PROJECT_ID
프로젝트에서 이 절차를 수행합니다.
STORAGE_BUCKET
이라는 이름의 스토리지 버킷을 만듭니다.- STORAGE_BUCKET 스토리지 버킷의
roles/storage.objectAdmin
역할을 키 사용자 계정에 부여합니다.
암호화 키 만들기
이 절차를 KEY_PROJECT_ID 프로젝트의 키 관리자 사용자로 수행합니다.
키링을 만듭니다. 키링의 이름은 프로젝트 내에서 고유해야 합니다. 키링은 삭제하거나 이름을 변경할 수 없습니다. Google Cloud CLI를 사용하여 키링을 만듭니다.
gcloud kms keyrings create KEY_RING \ --location LOCATION
다음을 바꿉니다.
KEY_RING
: 저장소 키링에 사용할 이름입니다(예:storage
).LOCATION
: 키링을 만들 위치입니다. Cloud Storage 버킷을 만들려는 위치와 지리적으로 가까워야 합니다.
키링에 암호화 키를 만듭니다. 키의 이름은 키링 내에서 고유해야 합니다. 키는 삭제하거나 이름을 변경할 수 없지만, 키 버전은 폐기할 수 있습니다. Google Cloud CLI를 사용하여 키를 만듭니다. 초기 키 버전은 자동으로 생성되며 기본 버전이 됩니다.
gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose encryption
다음을 바꿉니다.
LOCATION
: 키링을 만든 위치입니다.KEY_NAME
: 저장소 키에 사용할 이름입니다(예:storage
).KEY_RING
: 저장소 키링에 사용한 이름입니다(예:storage
).
참고: 원시 대칭 암호화 키를 사용하려면 용도 필드를
raw-encryption
로 설정합니다.
키링 및 키 만들기에 대해 자세히 알아보세요.
보안 비밀을 포함하는 파일 암호화
두 프로젝트에서 모두 작업하는 키 사용자 계정으로 이 절차를 실행합니다.
로컬 머신에 보안 비밀을 저장합니다.
echo "SECRET_TEXT" > PATH_TO_SECRET
다음을 바꿉니다.
SECRET_TEXT
: 보호하려는 보안 비밀(예:this is a secret
)입니다.PATH_TO_SECRET
: 비밀을 만들 경로입니다(예:secret.txt
).
Cloud KMS 및 암호화 키를 사용하여 보안 비밀을 암호화합니다.
gcloud kms encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --plaintext-file PATH_TO_SECRET \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET
다음을 바꿉니다.
LOCATION
: 키링을 만든 위치입니다.KEY_RING
: 키링의 이름입니다.KEY_NAME
: 암호화 키 이름PATH_TO_SECRET
: 비밀을 만든 경로입니다.PATH_TO_ENCRYPTED_SECRET
: 암호화된 보안 비밀을 저장할 경로입니다(예:secret.txt.encrypted
).
데이터 암호화 빠른 시작에 따라 데이터 암호화에 대해 자세히 알아보세요.
원시 대칭 암호화에는 대신
raw-encrypt
를 사용합니다.암호화된 보안 비밀 파일을 스토리지 버킷에 업로드합니다. 다음 gcloud CLI 명령어를 사용할 수 있습니다.
gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
객체를 스토리지 버킷에 업로드하는 방법을 자세히 알아보세요.
선택사항: 로컬 머신에서 일반 텍스트 보안 비밀 파일(
PATH_TO_SECRET
)을 삭제합니다. 이는 암호화되지 않은 민감한 정보가 포함된 파일에 권장됩니다.
이제 STORAGE_BUCKET
스토리지 버킷에 KEY_NAME
암호화 키를 사용하여 암호화된 암호화된 보안 비밀 파일이 포함됩니다.
보안 비밀을 포함하는 파일 복호화
두 프로젝트에서 모두 작업하는 키 사용자 계정으로 이 단계를 실행합니다.
스토리지 버킷에서 암호화된 보안 비밀 파일을 다운로드합니다. 다음 gcloud CLI 명령어를 사용할 수 있습니다.
gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
저장소 버킷에서 객체를 다운로드하는 방법에 대해 자세히 알아보세요.
암호화하는 데 사용한 것과 동일한 키를 사용하여 파일을 복호화합니다.
gcloud kms decrypt --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET \ --plaintext-file PATH_TO_DECRYPTED_SECRET
다음을 바꿉니다.
LOCATION
: 키링을 만든 위치입니다.KEY_RING
: 키링의 이름입니다.KEY_NAME
: 암호화 키 이름PATH_TO_ENCRYPTED_SECRET
: 다운로드한 암호화된 보안 비밀의 경로입니다(예:secret.txt.encrypted
).PATH_TO_DECRYPTED_SECRET
: 복호화된 보안 비밀을 저장할 경로입니다(예:secret_decrypted.txt
).
데이터 암호화 빠른 시작에 따라 데이터 복호화에 대해 자세히 알아보세요.
원시 대칭 암호화에는 대신
raw-decrypt
를 사용합니다.이제
cat
또는 텍스트 편집기를 사용하여 보안 비밀의 복호화된 일반 텍스트를 읽을 수 있습니다. 콘텐츠는PATH_TO_SECRET
의 원본 콘텐츠와 동일합니다.선택사항: 로컬 머신에서
PATH_TO_ENCRYPTED_SECRET
및PATH_TO_DECRYPTED_SECRET
파일을 삭제합니다.
삭제
정리하려면 로컬 머신에서 만든 모든 파일을 삭제한 다음 KEY_PROJECT_ID
및 STORAGE_PROJECT_ID
프로젝트를 삭제합니다.
다음 단계
- 보안 비밀 관리 자세히 알아보기
- 업무분장 알아보기
- 리소스에 대한 액세스 권한 부여, 변경, 취소 알아보기
- 서비스 계정 만들기에 대해 알아보기