이 페이지에서는 암호화를 위해 Cloud KMS Autokey로 생성된 키를 사용하여 보호된 리소스를 만드는 방법을 보여줍니다. Autokey에 대한 자세한 내용은 Autokey 개요를 참조하세요.
시작하기 전에
Autokey를 사용하여 보호된 리소스를 만들려면 먼저 다음 단계를 완료하여 준비해야 합니다.
- Autokey 폴더 내에 리소스 프로젝트가 아직 없는 경우 만들려는 리소스를 보관할 프로젝트를 만들어야 합니다.
-
Autokey를 사용하여 보호된 리소스를 만드는 데 필요한 권한을 얻으려면 관리자에게 폴더 또는 프로젝트에 대한 Cloud KMS Autokey 사용자(
roles/cloudkms.autokeyUser
) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요. - 또한 Autokey 폴더 또는 폴더 내 리소스 프로젝트에 대한 리소스 만들기 권한이 필요합니다. 각 리소스를 만드는 데 필요한 권한에 대한 자세한 내용은 서비스별 문서를 참조하세요. CMEK 통합 표에서 서비스를 찾고 만들려는 리소스 유형의 링크를 방문하여 이 문서를 찾을 수 있습니다.
Compute Engine 리소스에 Autokey 사용
Autokey는 생성 중인 리소스와 동일한 위치에 각 디스크, 이미지, 머신 이미지에 대한 새 키를 만듭니다.
Autokey는 스냅샷의 새 키를 만들지 않습니다. 스냅샷은 디스크를 암호화하는 데 사용된 키와 동일한 키를 사용해야 합니다. Google Cloud 콘솔을 사용하여 스냅샷을 만들면 디스크에서 사용한 암호화 키가 자동으로 스냅샷에 적용됩니다. gcloud CLI, Terraform, Compute Engine API를 사용하여 스냅샷을 만드는 경우 디스크를 암호화하는 데 사용된 키를 식별하고 이 키를 사용하여 스냅샷을 암호화해야 합니다.
스냅샷과 함께 CMEK를 사용하는 방법에 대한 자세한 내용은 CMEK로 암호화된 디스크에서 스냅샷 만들기를 참조하세요.
보호되는 Compute Engine 리소스 만들기
콘솔
디스크를 만들려면 다음 단계를 완료합니다.
Google Cloud 콘솔에서 디스크 페이지로 이동합니다.
새 디스크를 클릭하고 새 디스크의 속성을 입력합니다.
암호화에서 Cloud KMS 키를 선택합니다.
키 유형에서 Autokey가 포함된 Cloud KMS를 선택한 후 새 키 요청을 클릭합니다. 키가 성공적으로 생성되었고 사용할 준비가 되었다는 메시지가 표시됩니다.
디스크 만들기를 마치려면 만들기를 클릭합니다.
비슷한 프로세스를 수행하여 보호되는 VM 인스턴스, 이미지, 머신 이미지 리소스를 만들 수 있습니다.
Terraform
다음 Terraform 샘플은 키 핸들을 만들고 반환된 키를 사용하여 새 영구 디스크 리소스를 보호합니다.
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "compute.googleapis.com/Disk"
}
resource "google_compute_disk" "persistent_disk" {
project = "RESOURCE_PROJECT_ID"
name = "DISK_NAME"
type = "pd-ssd"
zone = "ZONE"
size = 30
physical_block_size_bytes = 4096
disk_encryption_key {
kms_key_self_link = google_kms_key_handle.my_key_handle.kms_key
}
}
다음을 바꿉니다.
RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.KEY_HANDLE
: 키 핸들에 사용할 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.DISK_NAME
: 새 디스크의 이름입니다.ZONE
: 보호되는 리소스의 영역입니다. 리소스를 만들 위치 내의 영역이어야 합니다. 예를 들어us-central1
위치에서 리소스를 만드는 경우 영역은us-central1-a
일 수 있습니다.
Cloud KMS에서는 KeyHandle
리소스를 삭제할 수 없습니다. 생성-폐기 패턴을 사용하는 경우 KeyHandle
을 다시 만들려고 하면 ALREADY_EXISTS
오류가 발생합니다. 이 문제를 방지하려면 이전에 만든 KeyHandle
을 가져오면 됩니다. 자세한 내용은 이 페이지의 Terraform에서 패턴 만들기 및 폐기하기를 참조하세요.
API
KeyHandle
을 만들어 새 Cloud KMS 키를 요청합니다.curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.RESOURCE_TYPE
: 만들 리소스의 유형입니다(예:compute.googleapis.com/Disk
).
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
출력의
OPERATION_ID
를 기록해 둡니다. 생성된 키의 리소스 ID를 가져오려면 이 값이 필요합니다.키 핸들과 연결된 Cloud KMS 키를 찾습니다.
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.OPERATION_ID
: 이전 단계의 출력에서 키 핸들 요청 작업의 식별자입니다.
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
출력의
kmsKey
요소 값은 이 리소스에 대해 Autokey로 생성된 키의 전체 리소스 ID입니다. 다른 Cloud KMS 리소스에 리소스 ID를 사용할 때와 동일한 방식으로 이 리소스 ID를 사용할 수 있습니다.gcloud compute disks create
명령어를--kms-key
플래그와 함께 사용하여 암호화된 디스크를 만듭니다.gcloud compute disks create DISK_NAME \ --kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
다음을 바꿉니다.
DISK_NAME
: 새 디스크의 이름입니다.KEY_PROJECT_ID
: 키 프로젝트의 프로젝트 ID입니다.LOCATION
: 리소스를 만들 위치입니다.KEY_NAME
: 이전 단계에서 출력에 반환된 키의 이름입니다.
Cloud Storage 리소스에 Autokey 사용
Autokey는 버킷과 동일한 위치에 새 키를 만듭니다. Autokey로 생성된 키가 버킷 기본 키로 할당됩니다.
Autokey는 객체의 키를 만들지 않습니다. 기본적으로 버킷에서 생성된 객체는 버킷 기본 키를 사용합니다. 버킷 기본 키 이외의 키를 사용하여 객체를 암호화하려면 수동으로 CMEK를 만들고 객체를 만들 때 이 키를 사용하면 됩니다.
버킷에 할당된 기본 키를 변경하려면 Autokey로 생성된 키를 포함한 기존 CMEK를 사용하면 됩니다.
보호되는 Cloud Storage 리소스 만들기
콘솔
Google Cloud 콘솔에서 버킷 만들기 페이지로 이동합니다.
객체 데이터를 보호하는 방법 선택이 표시될 때까지 새 버킷 만들기 안내를 따릅니다.
객체 데이터를 보호하는 방법 선택에서 데이터 암호화 섹션을 펼친 다음 Cloud KMS 키를 선택합니다.
키 유형에서 Autokey가 포함된 Cloud KMS를 선택한 후 새 키 요청을 클릭합니다. 키가 성공적으로 생성되었고 사용할 준비가 되었다는 메시지가 표시됩니다.
버킷 만들기를 마치려면 만들기를 클릭합니다.
Terraform
다음 Terraform 샘플은 키 핸들을 만들고 반환된 키를 사용하여 새 스토리지 버킷을 보호합니다.
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "storage.googleapis.com/Bucket"
}
resource "google_storage_bucket" "simple_bucket_name" {
name = "BUCKET_NAME"
location = "LOCATION"
force_destroy = true
project = "RESOURCE_PROJECT_ID"
uniform_bucket_level_access = true
encryption {
default_kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
다음을 바꿉니다.
RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.KEY_HANDLE
: 키 핸들에 사용할 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.BUCKET_NAME
: 새 버킷의 이름입니다.
Cloud KMS에서는 KeyHandle
리소스를 삭제할 수 없습니다. 생성-폐기 패턴을 사용하는 경우 KeyHandle
을 다시 만들려고 하면 ALREADY_EXISTS
오류가 발생합니다. 이 문제를 방지하려면 이전에 만든 KeyHandle
을 가져오면 됩니다. 자세한 내용은 이 페이지의 Terraform에서 패턴 만들기 및 폐기하기를 참조하세요.
API
KeyHandle
을 만들어 새 Cloud KMS 키를 요청합니다.curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.RESOURCE_TYPE
: 만들 리소스의 유형입니다(예:storage.googleapis.com/Bucket
).
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
출력의
OPERATION_ID
를 기록해 둡니다. 생성된 키의 리소스 ID를 가져오려면 이 값이 필요합니다.키 핸들과 연결된 Cloud KMS 키를 찾습니다.
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.OPERATION_ID
: 이전 단계의 출력에서 키 핸들 요청 작업의 식별자입니다.
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
출력의
kmsKey
요소 값은 이 리소스에 대해 Autokey로 생성된 키의 전체 리소스 ID입니다. 다른 Cloud KMS 리소스에 리소스 ID를 사용할 때와 동일한 방식으로 이 리소스 ID를 사용할 수 있습니다.gcloud storage buckets create
명령어를--default-encryption-key
플래그와 함께 사용하여 암호화된 버킷을 만듭니다.gcloud storage buckets create gs://BUCKET_NAME \ --location=LOCATION \ --default-encryption-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME
다음을 바꿉니다.
BUCKET_NAME
: 새 버킷의 이름입니다. 버킷 이름은 버킷 이름 지정 요구사항을 따라야 합니다.LOCATION
: 버킷을 만들 위치입니다.KEY_PROJECT_ID
: 키 프로젝트의 프로젝트 ID입니다.LOCATION
: 리소스를 만들 위치입니다.KEY_NAME
: 이전 단계에서 출력에 반환된 키의 이름입니다.
BigQuery 리소스에 Autokey 사용
Cloud KMS는 여러 BigQuery 버전으로 제공됩니다. Autokey를 사용하여 BigQuery 리소스를 보호하기 전에 사용 중인 BigQuery 버전이 Cloud KMS와 호환되는지 확인하세요. BigQuery 버전에 대한 자세한 내용은 BigQuery 버전 이해를 참조하세요.
Autokey는 새 데이터 세트마다 리소스 자체와 동일한 위치에 새 키를 만들며, 이 키는 데이터 세트 기본 키가 됩니다.
Autokey는 테이블, 쿼리, 임시 테이블 또는 모델의 키를 만들지 않습니다. 기본적으로 이러한 리소스는 데이터 세트 기본 키로 보호됩니다. 데이터 세트 기본 키가 아닌 키를 사용하여 데이터 세트의 리소스를 보호하려면 CMEK를 수동으로 만들고 리소스를 만들 때 이 키를 사용하면 됩니다.
데이터 세트 내에 없는 쿼리와 임시 테이블의 경우 프로젝트 기본 키를 사용합니다. BigQuery 리소스가 포함된 프로젝트의 위치마다 다른 프로젝트 기본 키를 사용합니다. 프로젝트 기본 키 사용에 대한 자세한 내용은 프로젝트 기본 키 설정을 참조하세요.
BigQuery와 함께 CMEK를 사용하는 방법에 대한 자세한 내용은 고객 관리 Cloud KMS 키를 참조하세요.
보호되는 BigQuery 리소스 만들기
콘솔
Autokey를 사용하여 BigQuery 데이터 세트를 만들기 전에 필요한 권한이 있는지 확인하세요. 데이터 세트 만들기에 대한 자세한 내용은 데이터 세트 만들기를 참조하세요.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
고급 옵션 > 암호화가 표시될 때까지 데이터 세트 만들기 안내를 따릅니다.
암호화에서 Cloud KMS 키를 선택합니다.
키 유형에서 Autokey가 포함된 Cloud KMS를 선택한 후 새 키 요청을 클릭합니다. 키가 성공적으로 생성되었고 사용할 준비가 되었다는 메시지가 표시됩니다.
데이터 세트 만들기를 마치려면 데이터 세트 만들기를 클릭합니다.
Terraform
다음 Terraform 샘플은 키 핸들을 만들고 반환된 키를 사용하여 새 데이터 세트를 보호합니다.
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "LOCATION"
resource_type_selector = "bigquery.googleapis.com/Dataset"
}
resource "google_bigquery_dataset" "dataset" {
project = "RESOURCE_PROJECT_ID"
dataset_id = "DATASET_ID"
friendly_name = "DATASET_NAME"
description = "DATASET_DESCRIPTION"
location = "LOCATION"
default_table_expiration_ms = 3600000
default_encryption_configuration {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
다음을 바꿉니다.
RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.DATASET_ID
: 새 데이터 세트에 사용할 ID입니다.DATASET_NAME
: 새 데이터 세트의 사용자 친화적인 이름입니다.DATASET_DESCRIPTION
: 새 데이터 세트에 대한 설명입니다.
Cloud KMS에서는 KeyHandle
리소스를 삭제할 수 없습니다. 생성-폐기 패턴을 사용하는 경우 KeyHandle
을 다시 만들려고 하면 ALREADY_EXISTS
오류가 발생합니다. 이 문제를 방지하려면 이전에 만든 KeyHandle
을 가져오면 됩니다. 자세한 내용은 이 페이지의 Terraform에서 패턴 만들기 및 폐기하기를 참조하세요.
API
KeyHandle
을 만들어 새 Cloud KMS 키를 요청합니다.curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.RESOURCE_TYPE
: 만들 리소스의 유형입니다(예:bigquery.googleapis.com/Dataset
).
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
출력의
OPERATION_ID
를 기록해 둡니다. 생성된 키의 리소스 ID를 가져오려면 이 값이 필요합니다.키 핸들과 연결된 Cloud KMS 키를 찾습니다.
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.OPERATION_ID
: 이전 단계의 출력에서 키 핸들 요청 작업의 식별자입니다.
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
출력의
kmsKey
요소 값은 이 리소스에 대해 Autokey로 생성된 키의 전체 리소스 ID입니다. 다른 Cloud KMS 리소스에 리소스 ID를 사용할 때와 동일한 방식으로 이 리소스 ID를 사용할 수 있습니다.bq mk
명령어를--destination_kms_key
플래그와 함께 사용하여 암호화된 데이터 세트를 만듭니다.bq --location=LOCATION mk \ --dataset \ --default_kms_key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME \ --default_table_expiration=TABLE_EXPIRATION \ --description="DATASET_DESCRIPTION" \ RESOURCE_PROJECT_ID:DATASET_ID
다음을 바꿉니다.
LOCATION
: 데이터 세트를 만들 위치입니다.KEY_PROJECT_ID
: 키 프로젝트의 프로젝트 ID입니다.KEY_NAME
: 이전 단계에서 출력에 반환된 키의 이름입니다.TABLE_EXPIRATION
: 이 데이터 세트에서 새 테이블의 기본 수명(초)입니다.DATASET_DESCRIPTION
: 새 데이터 세트에 대한 설명입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.DATASET_ID
: 사용자가 만들 데이터 세트의 ID입니다.
bq
도구에 대한 자세한 내용은 bq 명령줄 도구 살펴보기를 참조하세요.
Secret Manager 리소스에 Autokey 사용
Autokey는 동일한 프로젝트 및 위치에 있는 모든 보안 비밀을 보호하는 단일 키를 만듭니다. 키가 순환되면 프로젝트에 추가된 새 보안 비밀이 키의 새로운 기본 버전을 사용합니다.
Secret Manager는 Terraform 또는 REST API를 사용하여 리소스를 만들 때만 Cloud KMS Autokey와 호환됩니다.
보호되는 Secret Manager 리소스 만들기
Terraform
다음 Terraform 샘플은 키 핸들을 만들고 반환된 키를 사용하여 자동 복제로 새 보안 비밀을 보호합니다.
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "global"
resource_type_selector = "secretmanager.googleapis.com/Secret"
}
resource "google_secret_manager_secret" "my_secret" {
project = "RESOURCE_PROJECT_ID"
secret_id = "SECRET_ID"
replication {
auto {
customer_managed_encryption {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
}
}
다음을 바꿉니다.
RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.SECRET_ID
: 새 보안 비밀에 사용할 ID입니다.
키 핸들이 이미 있는 프로젝트 및 위치에 보안 비밀의 키 핸들을 만들려고 하면 오류 메시지가 기존 키 핸들의 세부정보를 반환합니다. 이 경우 키 핸들을 만드는 블록이 하나만 있는지 확인합니다. ID(KEY_HANDLE
)를 통해 키 핸들을 재사용하여 키를 공유해야 하는 추가 보안 비밀을 만들 수 있습니다.
Cloud KMS에서는 KeyHandle
리소스를 삭제할 수 없습니다. 생성-폐기 패턴을 사용하는 경우 KeyHandle
을 다시 만들려고 하면 ALREADY_EXISTS
오류가 발생합니다. 이 문제를 방지하려면 이전에 만든 KeyHandle
을 가져오면 됩니다. 자세한 내용은 이 페이지의 Terraform에서 패턴 만들기 및 폐기하기를 참조하세요.
API
KeyHandle
을 만들어 새 Cloud KMS 키를 요청합니다.curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.RESOURCE_TYPE
: 만들 리소스의 유형입니다(예:secretmanager.googleapis.com/Secret
).
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }
출력의
OPERATION_ID
를 기록해 둡니다. 생성된 키의 리소스 ID를 가져오려면 이 값이 필요합니다.키 핸들이 이미 있는 프로젝트 및 위치에 보안 비밀의 키 핸들을 만들려고 하면 오류 메시지가 기존 키 핸들의 세부정보를 반환합니다. 이 경우 다음 단계를 건너뛰고
existingKmsKey
필드의 키 리소스 ID를 사용하여 새 보안 비밀을 보호합니다.키 핸들과 연결된 Cloud KMS 키를 찾습니다.
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
다음을 바꿉니다.
USER_PROJECT
: 이 요청과 관련된 요금이 청구될 프로젝트입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.LOCATION
: 보호된 리소스를 만들 위치입니다.OPERATION_ID
: 이전 단계의 출력에서 키 핸들 요청 작업의 식별자입니다.
출력은 다음과 비슷합니다.
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }
출력의
kmsKey
요소 값은 이 리소스에 대해 Autokey로 생성된 키의 전체 리소스 ID입니다. 다른 Cloud KMS 리소스에 리소스 ID를 사용할 때와 동일한 방식으로 이 리소스 ID를 사용할 수 있습니다.gcloud secrets create
명령어를--kms-key-name
플래그와 함께 사용하여 자동 복제로 암호화된 보안 비밀을 만듭니다.gcloud secrets create "SECRET_ID" \ --replication-policy "automatic" \ --kms-key-name "projects/KEY_PROJECT_ID/locations/global/keyRings/autokey/cryptoKeys/KEY_NAME" \ --project "RESOURCE_PROJECT_ID"
다음을 바꿉니다.
SECRET_ID
: 새 보안 비밀에 사용할 ID입니다.KEY_PROJECT_ID
: 키 프로젝트의 프로젝트 ID입니다.KEY_NAME
: 이전 단계에서 출력에 반환된 키의 이름입니다.RESOURCE_PROJECT_ID
: 보호된 리소스를 만들려는 Autokey 폴더 내의 리소스 프로젝트의 프로젝트 ID입니다.
Terraform의 생성 및 폐기 패턴
Cloud KMS에서는 KeyHandle
리소스를 삭제할 수 없습니다. Terraform 및 생성-폐기 패턴을 사용하는 경우 KeyHandle
을 다시 만들려고 하면 ALREADY_EXISTS
오류가 발생합니다. import
블록을 사용하면 이 문제를 방지할 수 있습니다. google_kms_key_handle
리소스의 resource
블록 앞에 다음 블록을 삽입합니다.
import {
to = google_kms_key_handle.KEY_HANDLE
id = "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE"
}
다음 단계
- Autokey를 사용하는 경우 자세히 알아보기
- Autokey의 작동 방식 자세히 알아보기